Example #1
0
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,}
Example #2
0
    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="",
                )
Example #3
0
    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
Example #4
0
    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
Example #5
0
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))