def save(self, *args, **kwargs): # Tomar el costo actual del producto que sera vendido (para reportes futuros) self.costo = self.producto.costo # Actualizar la existencia del producto try: exist = Existencia.objects.get(producto=self.producto, almacen=self.almacen) exist.cantidadAnterior = exist.cantidad exist.cantidad -= decimal.Decimal(self.cantidad) exist.save() except Existencia.DoesNotExist: raise Exception("Intenta facturar un producto que no tiene existencia " + self.producto.descripcion) # Guardar el movimiento del producto mov = Movimiento() mov.producto = self.producto mov.cantidad = float(self.cantidad) mov.precio = self.precio mov.costo = self.costo mov.almacen = self.almacen mov.tipo_mov = "S" mov.documento = "FACT" mov.documentoNo = self.factura.noFactura mov.userLog = self.factura.userLog mov.save() super(Detalle, self).save(*args, **kwargs)
def post(self, request, *args, **kwargs): try: data = json.loads(request.body) facturaNo = int(data['facturaNo']) fact = Factura.objects.get(noFactura=facturaNo) detalle = Detalle.objects.filter(factura=fact) for item in detalle: quitar_producto(self, item.producto.codigo, item.almacen.id, facturaNo, 'E') #E = Eliminar mov = Movimiento() mov.producto = item.producto mov.cantidad = decimal.Decimal(Detalle.objects.get(factura__noFactura=facturaNo, producto=item.producto).cantidad) * -1 mov.precio = item.producto.precio mov.costo = item.producto.costo mov.almacen = item.almacen mov.documento = 'FACT' mov.documentoNo = facturaNo mov.tipo_mov = 'S' mov.userLog = request.user mov.save() fact.borrado = True fact.borradoPor = request.user fact.borradoFecha = datetime.datetime.now() fact.save() return HttpResponse('1') except Exception as e: return HttpResponse(e)