def get_existencia_sucursales_by_articulo_id(clave, connection_name): bases_datos_sucursales = DatabaseSucursal.objects.filter(empresa_conexion=connection_name) existencias = {} articulo_clave = first_or_none(ArticuloClave.objects.using(connection_name).filter(clave=clave)) articulo_nombre = '' if articulo_clave: articulo = articulo_clave.articulo articulo_nombre = articulo.nombre existencias['MATRIZ'] = get_existencias_articulo( articulo_id = articulo.id, connection_name = connection_name, fecha_inicio = datetime.now().strftime( "01/01/%Y" ), almacen = 'CONSOLIDADO', ) for base_datos in bases_datos_sucursales: articulo_clave = first_or_none(ArticuloClave.objects.using(base_datos.sucursal_conexion).filter(clave=clave)) if articulo_clave: articulo = articulo_clave.articulo if not articulo_nombre: articulo_nombre = articulo.nombre existencias[base_datos.name] = get_existencias_articulo( articulo_id = articulo.id, connection_name = base_datos.sucursal_conexion, fecha_inicio = datetime.now().strftime( "01/01/%Y" ), almacen = 'CONSOLIDADO', ) return {'existencias':existencias,'articulo_nombre':articulo_nombre,}
def save(self, *args, **kwargs): kwargs["using"] = kwargs.get("using", router.db_for_write(self.__class__, instance=self)) consecutivo = "" # Si no se define folio se asigna uno if self.folio == "": self.folio, consecutivo = self.next_folio(connection_name=kwargs["using"]) super(self.__class__, self).save(*args, **kwargs) # si es factura if consecutivo != "" and self.tipo == "F" and self.modalidad_facturacion == "CFDI": folios_fiscales = first_or_none( ConfiguracionFolioFiscal.objects.using(kwargs["using"]).filter( modalidad_facturacion=self.modalidad_facturacion ) ) if folios_fiscales: ConfiguracionFolioFiscalUso.objects.using(kwargs["using"]).create( id=-1, folios_fiscales=folios_fiscales, folio=consecutivo, fecha=datetime.now(), sistema=self.sistema_origen, documento=self.id, xml="", )
def next_folio(self, connection_name=None, **kwargs): """ Funcion para generar el siguiente folio de un documento de ventas """ # Parametros opcionales serie = kwargs.get("serie", None) consecutivos_folios = FolioVenta.objects.using(connection_name).filter( tipo_doc=self.tipo, modalidad_facturacion=self.modalidad_facturacion ) if serie: consecutivos_folios = consecutivos_folios.filter(serie=serie) consecutivo_row = first_or_none(consecutivos_folios) consecutivo = "" if consecutivo_row: consecutivo = consecutivo_row.consecutivo serie = consecutivo_row.serie if serie == u"@": serie = "" folio = "%s%s" % (serie, ("%09d" % int(consecutivo))[len(serie) :]) consecutivo_row.consecutivo = consecutivo_row.consecutivo + 1 consecutivo_row.save(using=connection_name) return folio, consecutivo
def next_folio(self, connection_name=None, **kwargs): """ Funcion para generar el siguiente folio de un documento de ventas """ # Parametros opcionales serie = kwargs.get("serie", None) if self.tipo == "F": consecutivos_folios = FolioVenta.objects.using(connection_name).filter( tipo_doc=self.tipo, modalidad_facturacion=self.modalidad_facturacion ) if serie: consecutivos_folios = consecutivos_folios.filter(serie=serie) consecutivo_row = first_or_none(consecutivos_folios) consecutivo = "" if consecutivo_row: consecutivo = consecutivo_row.consecutivo serie = consecutivo_row.serie if serie == u"@": serie = "" consecutivo_row.consecutivo = consecutivo_row.consecutivo + 1 consecutivo_row.save() elif self.tipo == "V": caja_folios_list = CajaFolios.objects.filter(caja=self.caja, documento_tipo=self.tipo).values_list( "serie", "consecutivo" )[0] serie = caja_folios_list[0] consecutivo = caja_folios_list[1] c = connections[connection_name].cursor() query = """UPDATE FOLIOS_CAJAS set CONSECUTIVO=%s WHERE CAJA_ID = %s and TIPO_DOCTO = %s;""" c.execute(query, [consecutivo + 1, self.caja.id, self.tipo]) c.close() # management.call_command( 'syncdb', database = using, interactive= False) folio = "%s%s" % (serie, ("%09d" % int(consecutivo))[len(serie) :]) return folio, consecutivo - 1
def factura_manageView( request, id = None, type='F', template_name='ventas/documentos/facturas/factura.html' ): message = '' connection_name = get_conecctionname(request.session) documento_nuevo = False if id: documento = get_object_or_404( VentasDocumento, pk = id ) else: documento = VentasDocumento() #Cargar formularios if id: documento_form = VentasDocumentoForm( request.POST or None, instance = documento,) documento_items = VentasDocumentoDetalleFormSet(VentasDocumentoDetalleForm, extra=0, can_delete=False) else: initial_data = { 'fecha': datetime.now(),} documento_form = VentasDocumentoForm( request.POST or None, instance = documento, initial= initial_data) documento_items = VentasDocumentoDetalleFormSet(VentasDocumentoDetalleForm, extra=1, can_delete=False) documento_detalle_formset = documento_items(request.POST or None, instance=documento) if documento_detalle_formset.is_valid() and documento_form.is_valid(): documento = documento_form.save(commit=False) cliente = documento.cliente cliente_clave = first_or_none( ClavesClientes.objects.filter( cliente= cliente ) ) cliente_direccion = first_or_none( ClienteDireccion.objects.filter( cliente= cliente ) ) #Si es una documento nueva if not documento.id: documento_nuevo= True documento.caja= first_or_none( Caja.objects.all() ) documento.tipo= 'F' documento.aplicado = 'N' documento.folio= ''#Se deja vacio para que se calcule el folio al guardar documento.fecha= datetime.now() documento.hora= datetime.now().strftime('%H:%M:%S') documento.cliente_clave= cliente_clave documento.cliente = cliente documento.cliente_direccion= cliente_direccion documento.moneda= Moneda.objects.get(pk= 1) documento.impuesto_incluido= 'N' documento.tipo_cambio= 1 documento.descuento_tipo= 'I' #datos de documento global # documento.tipo_gen_fac='R' # documento.es_fac_global='S' # documento.fecha_ini_fac_global = fecha_ini_fac_global # documento.fecha_fin_fac_global = fecha_fin_fac_global documento.porcentaje_descuento=0 documento.sistema_origen='VE' documento.usuario_creador= request.user.username documento.save() # # ventas_en_factura = documento_form.cleaned_data['ventas_en_factura'] # # impuestos_venta_neta = documento_form.cleaned_data['impuestos_venta_neta'].split(',') # # impuestos_otros_impuestos = documento_form.cleaned_data['impuestos_otros_impuestos'].split(',') # # impuestos_importe_impuesto = documento_form.cleaned_data['impuestos_importe_impuesto'].split(',') # # impuestos_porcentaje_impuestos = documento_form.cleaned_data['impuestos_porcentaje_impuestos'].split(',') # # impuestos_ids = documento_form.cleaned_data['impuestos_ids'].split(',') # #Guardar impuestos # for impuesto_id, venta_neta, otros_impuestos, importe_impuesto, porcentaje_impuesto in zip(impuestos_ids, impuestos_venta_neta, impuestos_otros_impuestos, impuestos_importe_impuesto, impuestos_porcentaje_impuestos ): # if impuesto_id != "": # c = connections[connection_name].cursor() # query = '''INSERT INTO "IMPUESTOS_DOCTOS_PV" ("DOCTO_PV_ID", "IMPUESTO_ID", "VENTA_NETA", "OTROS_IMPUESTOS", "PCTJE_IMPUESTO", "IMPORTE_IMPUESTO") \ # VALUES (%s, %s, %s, %s, %s, %s)'''%(documento.id, impuesto_id, venta_neta, otros_impuestos, porcentaje_impuesto, importe_impuesto) # c.execute(query) # c.close() #Se guardan detalles de documento for detalle_form in documento_detalle_formset: detalle = detalle_form.save(commit = False) if not detalle.id: detalle.id = -1 detalle.documento = documento detalle.unidades_surtidas_devueltas = 0 detalle.fpgc_unitario = 0 detalle.comisiones_porcentaje = 0 detalle.rol = 'N' detalle.posicion = -1 detalle.save() message= 'documento guardada' c = { 'documento_form': documento_form, 'documento_detalle_formset':documento_detalle_formset, 'message':message, } return render_to_response(template_name, c, context_instance=RequestContext(request))