Code Monkey home page Code Monkey logo

enredarte's Introduction

Hi 👋 My name is Marco

Software developer

  • 🌍 I'm based in Córdoba, Argentina
  • 🖥️ Personal site
  • 🤝 I'm open to collaborating on Open Source, Python and GitOps related projects

Interested in

Python Django Fast API PostgreSQL Kubernetes Docker Dagger React NextJs

Socials

My GitHub Stats

marcorichetta's GitHub stats

enredarte's People

Contributors

marcorichetta avatar

Watchers

 avatar

Forkers

vanemanza

enredarte's Issues

Permitir cambiar Pedido a estado Entregado

Flujo

  1. Ir a detalle de Pedido con estado Listo para entrega
  2. Se debe mostrar un botón para pasar a estado Entregado
  3. Al hacer click se llama a un endpoint que cambia Pedido a estado Entregado. 💡 (Utilizar la misma función que se utiliza para el otro estado)
  4. Se debe devolver al usuario a la pantalla del Pedido mostrando
    • Estado: Entregado
    • Fecha de entrega real: Nuevo Campo 💡
    • Campo pagado => True

Permitir cargar productos regulares

Pasos

  1. Usuario elige que tipo de producto agregar (Regular o Irregular)

  2. Se lo redirige a la página de creación de dicho producto con su formulario

  • Cargar productos regulares
  • Cargar productos irregulares
  • La tabla productos muestra todos los productos
  • Tests de pedidos
  • Dividir views en 2 archivos diferentes: views_regular.py y views_irregular.py
  • Crear templates para cada uno
  • Crear formularios para productos Irregulares

TO DO

  • Tests urls para un producto regular
  • Tests urls para un producto irregular

Ideas

Abstract models

  1. Modelo Producto (Abstract) con campos comúnes
  2. Modelo por tipo de producto
  • Bandeja, Cuadro
  • Producto irregular
class ProductoBase(models.Model):
    class Meta:
        abstract = True

    nombre = models.CharField(
        max_length=100,
    )

    def __str__(self) -> str:
        return self.nombre


class Regular(ProductoBase):
    largo = models.DecimalField(default=0,
                                help_text='Largo en cm', max_digits=3, decimal_places=1)
    ancho = models.DecimalField(default=0,
                                help_text='Ancho en cm', max_digits=3, decimal_places=1)
    alto = models.DecimalField(default=0,
                               help_text='Alto en cm', max_digits=3, decimal_places=1)

class Irregular(ProductoBase):
    insumos_utilizados = models.ManyToManyField(Insumo,
                                     through="InsumosProducto",
                                     through_fields=('producto', 'insumo'))
    
    def precio(self):
          # Calcular precio de cada insumo y devolver el total
          self.insumos_utilizados.precio_m2()

A futuro se podría dejar que el usuario cree un tipo de producto, pero por ahora los crea el administrador.

Links

Modelo Presupuesto

Campos

  • ID
  • Fecha
  • Fecha validez (Opcional)
  • Estado (Si pasó la fecha validez se pasa a Rechazado)
  • Cliente
  • Productos a vender
  • Precio de cada producto (Se calcula al momento de guardar el presupuesto)
  • Precio final
  • Observaciones (Agregar validez del mismo, forma de pago, etc)

Extra

Ver si es factible crear un Pedido en base a un Presupuesto:

  1. Dentro del Presupuesto
  2. Click en Generar Pedido
  3. Se deberían tomar los datos de
    • ID del Cliente
    • IDs de Productos, la cantidad y el precio de los mismos
  4. Se dirige a un formulario de Pedido con los datos precargados

Implementar calendario con pedidos

Fullcalendar puede servir.

Debería mostrar:

  • Pedidos por entregar
  • Vista diaria, semanal, mensual
  • Filtrar pedidos por estado (Creado, En proceso, Entregado)
  • Ver detalle de pedido (Tooltip)
  • Link a DetailView

Nice to have:

  • Agregar pedido con click en calendario mediante un modal.
  • Modificar estado del pedido

Actualizar modelos

imagen

Hay que actualizar modelos en base a la última revisión del esquema de la BD.

Parte de este issue

  • (#30) Precio a DecimalField
  • (#29) precio_final de Pedido

Calculo de precio final de Pedido

El precio_final de un Pedido se guarda en un campo de la BD.
Este precio debería ser calculado en base al precio de los productos, como si fuese un atributo derivado.

Solución

  • No pasar el campo precio_final en el formulario de creación de pedido
  • En método save() se hace el cálculo del precio final con los precios de todos los productos.
  • Al editar un producto el cálculo no se realiza nuevamente, ya que los productos pueden haber cambiado de precio.

Todo

  • Modificar el formulario de PedidoForm para sacar ocultar el precio
  • Agregar el cálculo del precio final en el modelo Pedido.
  • Sobreescribir el campo precio_final del Pedido a guardar. (form_valid())

Tests

  • Crear pedido con productos y calcular precio
  • Actualizar pedido con productos y calcular precio

Precios de productos en form de creación de pedido

Crear Pedido

  1. Se deben poder elegir productos junto con la cantidad
  2. Se debe mostrar el precio del producto una vez que se elige
  3. Al aplicar el descuento se calcula el precio final en el mismo formulario

Checklist

  • Seleccionar producto y llamar a función para calcular el precio
  • Mostrar el precio (Precio de producto * cantidad)
  • Botón para calcular total
  • Tomar el valor del descuento para calcular el precio final
  • Animar (?)

Última alternativa
💡 Mostrar el precio dentro del mismo select del producto, junto con la descripción

Modificaciones de tablas

El usuario accede a una ListView

Debe poder:

Apps

  • Clientes
  • Proveedores
  • Productos
  • Pedidos
  • Compras
  • Insumos
  • Localidades

Tablas y filtros

Tables2

Filter

Ejemplo Combinados

Datatables

Reportes en PDF

El usuario debe poder generar un pdf de:

  • Pedido del cliente finalizado {% if estado finalizado 'mostrar link' %}
  • Presupuesto (Misma lógica)

Librerías

Modal form para crear nuevos clientes, proveedores, etc mediante Ajax.

from dal import autocomplete

class PacienteAutocomplete(autocomplete.Select2QuerySetView):
    """
    Base de autompletado para pacientes.
    """

    def get_queryset(self):
        if not self.request.user.has_perm('pacientes.view_paciente'):
            return Paciente.objects.none()

        qs = Paciente.objects.all()

        if self.q:
            qs = qs.filter(Q(numero_documento__icontains=self.q) |
                           Q(nombres__icontains=self.q) |
                           Q(apellidos__icontains=self.q)
                           )

        return qs.order_by("apellidos", "nombres")[:5]

Ejemplo Localidad

def LocalidadCreate(request):

Crear usuario operario

Usuario operario

  • Este usuario puede ver un tablero con las órdenes de trabajo iniciadas y las finalizadas
  • También puede cambiar el estado de la O.T.

Todo

  • Crear usuario
  • Asignarle permisos de vista de O.T.
  • Quitarle permisos para ver demás views -> Hay que restringir las demás views (Yeah right)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.