Ejemplo n.º 1
0
 def DescargarConstancia(self, cuit='', filename='', *args, **kwargs):
     padron = PadronAFIP()
     if LeerIni(clave='h**o') == 'S':
         padron.Conectar()
     ok = padron.DescargarConstancia(cuit, filename)
     filename = LeerIni("iniciosistema") + filename
     AbrirArchivo(filename)
Ejemplo n.º 2
0
    def EnviaCorreo(self, *args, **kwargs):

        self.ExportaExcel(mostrar=False)

        if not self.cArchivoGenerado:
            return
        email_contador = LeerIni('email_contador')
        text, ok = QInputDialog.getText(
            self.view,
            'Sistema',
            'Ingrese el mail destinatario:',
            text=email_contador if email_contador else '')
        if ok:
            GrabarIni(clave='email_contador', key='param', valor=str(text))
            pyemail = PyEmail()
            remitente = '*****@*****.**'
            destinatario = str(text).strip()
            mensaje = "Enviado desde mi Software de Gestion desarrollado por http://www.servinlgsm.com.ar"
            archivo = self.cArchivoGenerado
            motivo = "Se envia informe de ventas de {}".format(
                LeerIni(clave='empresa', key='FACTURA'))
            servidor = ParamSist.ObtenerParametro("SERVER_SMTP")
            clave = ParamSist.ObtenerParametro("CLAVE_SMTP")
            usuario = ParamSist.ObtenerParametro("USUARIO_SMTP")
            puerto = ParamSist.ObtenerParametro("PUERTO_SMTP") or 587
            pyemail.Conectar(servidor=servidor,
                             usuario=usuario,
                             clave=clave,
                             puerto=puerto)

            ok = pyemail.Enviar(remitente, motivo, destinatario, mensaje,
                                archivo)
            if not ok:
                Ventanas.showAlert("Sistema", pyemail.Excepcion)
Ejemplo n.º 3
0
    def ConstatarComprobantes(self, *args, **kwargs):
        cbte_modo = kwargs['cbte_modo']  # modalidad de emision: CAI, CAE, CAEA
        cuit_emisor = LeerIni(clave='cuit', key='WSFEv1')  # proveedor
        pto_vta = kwargs['pto_vta']  # punto de venta habilitado en AFIP
        cbte_tipo = kwargs[
            'cbte_tipo']  # 1: factura A (ver tabla de parametros)
        cbte_nro = kwargs['cbte_nro']  # numero de factura
        cbte_fch = kwargs['cbte_fch']  # fecha en formato aaaammdd
        imp_total = kwargs['imp_total']  # importe total
        cod_autorizacion = kwargs[
            'cod_autorizacion']  # numero de CAI, CAE o CAEA
        doc_tipo_receptor = kwargs[
            'doc_tipo_receptor']  # CUIT (obligatorio Facturas A o M)
        doc_nro_receptor = kwargs[
            'doc_nro_receptor']  # numero de CUIT del cliente
        wscdc = WSCDC()
        ta = self.Autenticar()
        wscdc.SetTicketAcceso(ta_string=ta)
        wscdc.SetParametros(cuit=LeerIni(clave='cuit', key='WSFEv1'),
                            token=self.Token,
                            sign=self.Sign)
        ok = wscdc.ConstatarComprobante(cbte_modo, cuit_emisor, pto_vta,
                                        cbte_tipo, cbte_nro, cbte_fch,
                                        imp_total, cod_autorizacion,
                                        doc_tipo_receptor, doc_nro_receptor)
        if not ok:
            Ventanas.showAlert(LeerIni('nombre_sistema'),
                               "ERROR: {}".format(wscdc.ErrMsg))

        return ok
Ejemplo n.º 4
0
    def Validacion(self):
        retorno = True
        if not self.view.validaCliente.text():
            Ventanas.showAlert(
                LeerIni('nombre_sistema'),
                "ERROR: No se ha especificado un cliente valido")
            retorno = False

        for x in range(self.view.gridFactura.rowCount()):
            iva = float(self.view.gridFactura.ObtenerItem(fila=x, col='IVA'))
            if str(iva) not in FEv1().TASA_IVA:
                Ventanas.showAlert(
                    LeerIni('nombre_sistema'),
                    "Error el item {} no tiene un IVA valido".format(x + 1))
                retorno = False
            codigo = self.view.gridFactura.ObtenerItem(fila=x, col='Codigo')
            try:
                articulo = Articulo.get_by_id(codigo)
            except Articulo.DoesNotExist:
                Ventanas.showAlert(
                    LeerIni('nombre_sistema'),
                    "Error el item {} tiene un articulo no valido".format(x +
                                                                          1))
                retorno = False

        return retorno
 def CargaDatos(self):
     self.view.controles['cuit'].setText(LeerIni(clave='cuit',
                                                 key='WSFEv1'))
     self.view.controles['empresa'].setText(
         LeerIni(clave='empresa', key='FACTURA'))
     self.view.controles['nombre'].setText(
         LeerIni(clave='empresa', key='FACTURA'))
Ejemplo n.º 6
0
 def onClickAgregaCliente(self):
     padron = PadronAfip()
     ok = padron.ConsultarPersona(
         cuit=str(self.view.textCUIT.text()).replace("-", ""))
     if padron.errores:
         Ventanas.showAlert(LeerIni("nombre_sistema"),
                            "Error al leer informacion en la AFIP")
     else:
         cliente = Cliente()
         cliente.nombre = padron.denominacion[:30]
         cliente.domicilio = padron.direccion[:30]
         try:
             localidad = Localidad().select().where(
                 Localidad.nombre.contains(padron.localidad)).get()
         except Localidad.DoesNotExist:
             localidad = Localidad().get_by_id(1)
         cliente.localidad = localidad
         cliente.cuit = padron.cuit
         cliente.dni = padron.dni
         cliente.tipodocu = 80 if padron.tipo_doc == 80 else 0
         cliente.tiporesp = 2 if padron.tipo_doc == 80 else 0
         cliente.formapago = 1
         cliente.percepcion = 1
         cliente.save()
         Ventanas.showAlert(
             LeerIni("nombre_sistema"),
             "Verifique si los datos cargados son los correctos")
Ejemplo n.º 7
0
    def UltimoComprobante(self, tipo=1, ptovta=1, *args, **kwargs):
        wsdl = self.WSDL
        print("WSDL {}".format(wsdl))
        cache = None
        proxy = ""
        wrapper = ""  # "pycurl"
        # cacert = True  # geotrust.crt"
        cacert = LeerIni('iniciosistema') + LeerIni(clave='cacert', key='WSFEv1')
        wrapper = ""
        # if int(platform.release()) < 10:
        #     cacert = None
        # else:
        #     cacert = LeerIni('iniciosistema') + LeerIni(clave='cacert', key='WSFEv1')
        # cacert = LeerIni('iniciosistema') + LeerIni(clave='cacert', key='WSFEv1')
        # cacert = None
        ok = self.Conectar(cache, wsdl, proxy, wrapper, cacert)

        if not ok:
            raise RuntimeError(self.Excepcion)

        ta = self.Autenticar()
        self.SetTicketAcceso(ta)
        self.Cuit = LeerIni(clave="cuit", key='WSFEv1')
        ultimo = self.CompUltimoAutorizado(tipo_cbte=tipo, punto_vta=ptovta)
        return ultimo
Ejemplo n.º 8
0
 def __init__(self):
     super(Main, self).__init__()
     if LeerIni("base") == "sqlite":
         #pongo todo en un try para que en caso de que no exista aun la base de datos continue de todas formas
         try:
             copyfile("sistema.db", "sistema-res.db")
         except:
             pass
     self.view = MainView()
     self.view.initUi()
     self.conectarWidgets()
     self.model = ModeloBase()
     self.model.getDb()
     if not LeerIni("ultima_copia"):
         GrabarIni(clave='ultima_copia', key='param', valor='00000000')
     ult = LeerIni("ultima_copia")
     if LeerIni("base") == "sqlite":
         if ult < FechaMysql():
             resguardo = ResguardoController()
             resguardo.Cargar("sistema-res.db")
             resguardo.Cargar("sistema.ini")
             GrabarIni(clave='ultima_copia',
                       key='param',
                       valor=FechaMysql())
     self.CreaTablas()
     self.Migraciones()
     self.initUi()
Ejemplo n.º 9
0
    def onClickBtnConstata(self):

        WSCDC = WSConstComp()

        self.cbte_modo = self.view.cboModoCpte.valor()

        if self.cbte_modo in ['CF']:
            Ventanas.showAlert(
                LeerIni('nombre_sistema'),
                "No se puede constatar facturas emitidas con controlador fiscal"
            )
        proveedor = Proveedor.get_by_id(self.view.textProveedor.text())
        self.cuit_emisor = proveedor.cuit.replace("-", "")  # proveedor
        self.pto_vta = str(self.view.textFactura.lineEditPtoVta.text()
                           )  # punto de venta habilitado en AFIP
        self.cbte_tipo = int(self.view.textTipoComp.text()
                             )  # 1: factura A (ver tabla de parametros)
        self.cbte_nro = str(
            self.view.textFactura.lineEditNumero.text())  # numero de factura
        self.cbte_fch = FechaMysql(self.view.fechaEmision.date().toPyDate()
                                   )  # fecha en formato aaaammdd
        self.cod_autorizacion = str(
            self.view.textCAE.text())  # numero de CAI, CAE o CAEA
        # if self.cbte_modo == 'CAI':
        #     self.imp_total = "0"  # importe total
        #     self.doc_tipo_receptor = ""  # CUIT (obligatorio Facturas A o M)
        #     self.doc_nro_receptor = ""  # numero de CUIT del cliente
        # else:
        self.imp_total = str(self.view.textTotal.text())  # importe total
        self.doc_tipo_receptor = "80"  # CUIT (obligatorio Facturas A o M)
        self.doc_nro_receptor = LeerIni(
            clave='cuit', key='WSFEv1')  # numero de CUIT del cliente

        ok = WSCDC.Comprobar(cbte_modo=self.cbte_modo,
                             cuit_emisor=self.cuit_emisor,
                             pto_vta=self.pto_vta,
                             cbte_tipo=self.cbte_tipo,
                             cbte_nro=self.cbte_nro,
                             cbte_fch=self.cbte_fch,
                             imp_total=self.imp_total,
                             cod_autorizacion=self.cod_autorizacion,
                             doc_tipo_receptor=self.doc_tipo_receptor,
                             doc_nro_receptor=self.doc_nro_receptor)

        if WSCDC.Resultado == "R":
            detalle = "Rechazado"
        elif WSCDC.Resultado == "A":
            detalle = "Aprobado"
        else:
            detalle = "Observado"
        self.estado = detalle
        self.obs = WSCDC.Obs.encode('utf-8')

        detalle += WSCDC.Obs
        if WSCDC.Resultado == "R":
            detalle = WSCDC.ErrMsg
        self.Imprimir()
Ejemplo n.º 10
0
    def ConsultarCAE(self, tipocbte, puntoventa, numero):
        self.CAE = ""
        self.Cuit = LeerIni(clave="cuit", key='WSFEv1')
        ta = self.Autenticar()
        self.SetTicketAcceso(ta_string=ta)
        if LeerIni(clave='h**o') == 'S':  # homologacion
            self.Conectar()
        else:
            ok = self.Conectar("", self.WSDL) #Producción

        print("Tipo comprobante {}".format(tipocbte))
        caeconsultado = self.CompConsultar(tipo_cbte=tipocbte, punto_vta=puntoventa, cbte_nro=numero)
Ejemplo n.º 11
0
    def Cargar(self, filename, callback=None):
        try:
            self.connect("ftp.servinlgsm.com.ar")
            self.login("*****@*****.**", "Factura2019")
            folderName = LeerIni("empresa", key='FACTURA')
            if not folderName in self.nlst():
                self.mkd(LeerIni("empresa", key='FACTURA'))
            self.cwd(LeerIni("empresa", key='FACTURA'))

            with open(filename, "rb") as f:
                self.storbinary("STOR " + filename, f, callback=self.handle, blocksize=1024)
        except Exception as e:
            print("Error no se pudo copiar {}".format(filename))
Ejemplo n.º 12
0
    def CargaDatosCliente(self, *args, **kwargs):
        if not self.view.validaCliente.text():
            return
        try:
            self.cliente = Cliente.select().where(Cliente.idcliente == self.view.validaCliente.text()).get()
            cliente = self.cliente
            self.view.lineEditDomicilio.setText(cliente.domicilio)
            if cliente.tiporesp.idtiporesp in [1, 2, 4]: #monotributo o resp inscripto
                self.view.lineEditDocumento.setText(cliente.cuit.replace('-',''))
                self.view.lineEditDocumento.setInputMask("99-99999999-9")
                if ParamSist.ObtenerParametro("EMITE_FCE") == "S":
                    wsfecred = WsFECred()
                    obligado, minimo = wsfecred.ConsultarMontoObligado(cliente.cuit.replace('-',''), LeerIni('cuit', key='WSFEv1'))
                    if obligado and not self.informo:
                        Ventanas.showAlert("Sistema", "Se debe emitir FCE al cliente desde un monto de {}".format(minimo))
                self.informo = True
            else:
                self.view.lineEditDocumento.setText(str(cliente.dni))
                self.view.lineEditDocumento.setInputMask("99999999")
            if int(LeerIni(clave='cat_iva', key='WSFEv1')) == 1: #si es Resp insc el contribuyente veo si teiene que emitira A o B
                if cliente.tiporesp.idtiporesp == 2: #resp inscripto
                    self.view.cboComprobante.setText('Factura A')
                else:
                    self.view.cboComprobante.setText('Factura B')
            else:
                self.view.cboComprobante.setText('Factura C')

            self.view.cboTipoIVA.setText(cliente.tiporesp.nombre)
            self.ObtieneNumeroFactura()
        except Cliente.DoesNotExist:
            Ventanas.showAlert("Sistema", "Cliente no encontrado en el sistema")
Ejemplo n.º 13
0
def inicio():
    initialize_logger(LeerIni("iniciosistema"))
    # logging.basicConfig(filename=join(LeerIni("iniciosistema"), 'errors.log'), level=logging.DEBUG,
    #                     format='%(asctime)s %(message)s',
    #                     datefmt='%m/%d/%Y %I:%M:%S %p')
    if LeerIni(clave='h**o') == 'S':
        print("Sistema en modo homologacion")
    else:
        print("Sistema en modo produccion")
    # Instancia para iniciar una aplicación
    args = []
    #args = ['', '-style', 'Cleanlooks']
    app = QApplication(args)
    ex = Main()
    ex.run()
    sys.exit(app.exec_())
Ejemplo n.º 14
0
    def tabArticuloUI(self):
        layoutppal = QVBoxLayout()
        self.gridFactura = Grilla(tamanio=10)
        cabeceras = [
            'Cant.', 'Codigo', 'Detalle', 'Unitario', 'IVA', 'SubTotal'
        ]
        self.gridFactura.ArmaCabeceras(cabeceras=cabeceras)
        self.gridFactura.enabled = True
        if int(LeerIni(clave='cat_iva', key='WSFEv1')) != 6:
            self.gridFactura.columnasHabilitadas = [0, 1, 2, 3, 4]
        else:
            self.gridFactura.columnasHabilitadas = [0, 1, 2, 3]

        item = [1, 1, '', 0, 21, 0]
        self.gridFactura.AgregaItem(items=item)

        layoutppal.addWidget(self.gridFactura)
        layoutBotones = QHBoxLayout()
        self.botonAgregaArt = Boton(texto="Agrega",
                                    imagen=imagen("new.png"),
                                    tamanio=QSize(16, 16),
                                    autodefault=False)
        self.botonBorrarArt = Boton(texto="Borrar",
                                    imagen=imagen("delete.png"),
                                    tamanio=QSize(16, 16),
                                    autodefault=False)
        layoutBotones.addWidget(self.botonAgregaArt)
        layoutBotones.addWidget(self.botonBorrarArt)
        layoutppal.addLayout(layoutBotones)
        self.tabArticulo.setLayout(layoutppal)
Ejemplo n.º 15
0
 def __init__(self, *args, **kwargs):
     kwargs['texto'] = kwargs[
         'textoBoton'] if 'textoBoton' in kwargs else '&Cerrar'
     kwargs['imagen'] = LeerIni("iniciosistema") + 'imagenes/log-out.png'
     kwargs['tamanio'] = QSize(32, 32)
     Boton.__init__(self, *args, **kwargs)
     self.setDefault(False)
Ejemplo n.º 16
0
    def Imprimir(self):
        pdf = PDFConstatatacion()
        pdf.estado = self.estado
        pdf.obs = self.obs
        pdf.cbte_modo = self.cbte_modo
        pdf.add_page()
        self.cbte_fch = self.view.fechaEmision.date().toPyDate().strftime(
            "%d/%m/%Y")
        pdf.imprimedetalle(cbte_modo=self.cbte_modo,
                           cuit_emisor=self.cuit_emisor,
                           pto_vta=self.pto_vta,
                           cbte_tipo=self.cbte_tipo,
                           cbte_nro=self.cbte_nro,
                           cbte_fch=self.cbte_fch,
                           imp_total=self.imp_total,
                           cod_autorizacion=self.cod_autorizacion,
                           doc_tipo_receptor=self.doc_tipo_receptor,
                           doc_nro_receptor=self.doc_nro_receptor)
        if not os.path.isdir("tmp"):
            os.mkdir("tmp")
        filename = LeerIni('iniciosistema') + "tmp/constatacion{}.pdf".format(
            self.cuit_emisor.strip())
        pdf.output(name=filename)
        AbrirArchivo(filename)

        padron = PadronAfip()
        cuit = self.doc_nro_receptor.replace("-", "")
        filename = "tmp/constancia{}.pdf".format(cuit)
        padron.DescargarConstancia(cuit=cuit, filename=filename)
Ejemplo n.º 17
0
    def onClickConsulta(self):

        padron = PadronAfip()
        ok = padron.ConsultarPersona(
            cuit=str(self.view.textCUIT.text()).replace("-", ""))
        self.view.gridDatos.setRowCount(0)
        if padron.errores:
            error = padron.LeerError()
            item = ["Error", error]
            self.view.gridDatos.AgregaItem(item)
            Ventanas.showAlert(LeerIni("nombre_sistema"),
                               "Error al leer informacion en la AFIP")
        else:
            item = ["Denominacion", padron.denominacion]
            self.view.gridDatos.AgregaItem(item)
            item = [
                "Tipo", "{} {} {}".format(padron.tipo_persona, padron.tipo_doc,
                                          padron.dni)
            ]
            self.view.gridDatos.AgregaItem(item)
            item = ["Estado", padron.estado]
            self.view.gridDatos.AgregaItem(item)
            item = ["Direccion", padron.direccion]
            self.view.gridDatos.AgregaItem(item)
            item = ["Localidad", padron.localidad]
            self.view.gridDatos.AgregaItem(item)
            item = ["Provincia", padron.provincia]
            self.view.gridDatos.AgregaItem(item)
            item = ["Codigo Postal", padron.cod_postal]
            self.view.gridDatos.AgregaItem(item)
Ejemplo n.º 18
0
    def onClickBtnFactura(self):
        menu = QMenu(self.view)
        emisionAction = menu.addAction(u"Emision de Factura")
        reimprimeAction = menu.addAction(u"Re imprime factura")
        ivaventasAction = menu.addAction(u"IVA Ventas")
        reciboAction = menu.addAction(u"Emision de recibo")
        citiAction = menu.addAction(u"RG 3685 AFIP")
        menu.addAction(u"Volver")
        action = menu.exec_(QCursor.pos())

        if action == emisionAction:
            if LeerIni(key='FACTURA', clave='venta') == 'grilla':
                factura = FacturaController()
            else:
                factura = FacturaCodBarraController()
            factura.view.exec_()
        elif action == reimprimeAction:
            ventana = ReImprimeFacturaController()
            ventana.view.exec_()
        elif action == ivaventasAction:
            ventana = IVAVentasController()
            ventana.view.exec_()
        elif action == reciboAction:
            ventana = EmiteReciboController()
            ventana.view.exec_()
        elif action == citiAction:
            ventana = RG3685VentasController()
            ventana.view.exec_()
Ejemplo n.º 19
0
    def EstadoServidores(self):

        ta = self.Autenticar()
        self.Dummy()
        Ventanas.showAlert(LeerIni('nombre_sistema'),
                           "appserver status {} dbserver status {} authserver status {}".format(
                               self.AppServerStatus, self.DbServerStatus, self.AuthServerStatus
                           ))
Ejemplo n.º 20
0
 def SeleccionaConcepto(self):
     if self.view.controles['concepto'].text() not in [
             str(FEv1.SERVICIOS),
             str(FEv1.PRODUCTOYSERVICIOS),
             str(FEv1.PRODUCTOS)
     ]:
         Ventanas.showAlert(
             LeerIni('nombre_sistema'),
             'Concepto no valido. Unicamente 1 (Productos), 2 (Servicios)')
Ejemplo n.º 21
0
    def initUi(self):
        self.setGeometry(150, 150, 500, 150)
        self.setWindowTitle('Factura Electronica')
        self.layoutPpal = QVBoxLayout(self)
        self.lblTitulo = EtiquetaTitulo(texto="{}-{}".format(
            LeerIni(clave="nombre_sistema"),
            DeCodifica(LeerIni(clave='EMPRESA', key='FACTURA'))))
        self.layoutPpal.addWidget(self.lblTitulo)

        self.groupBoxBotones = Agrupacion()
        self.layoutBotones = QHBoxLayout()

        self.btnClientes = BotonMain(texto='&Clientes',
                                     imagen='imagenes/if_kuser_1400.png')
        self.layoutBotones.addWidget(self.btnClientes)

        self.btnFactura = BotonMain(texto='&Facturacion',
                                    imagen='imagenes/if_bill_416404.png')
        self.layoutBotones.addWidget(self.btnFactura)

        self.btnArticulo = BotonMain(
            texto='&Articulos',
            imagen='imagenes/if_product-sales-report_49607.png')
        self.layoutBotones.addWidget(self.btnArticulo)

        self.btnAFIP = BotonMain(texto='A&FIP',
                                 imagen='imagenes/logoafipfondoblanco.png')
        self.layoutBotones.addWidget(self.btnAFIP)

        self.btnCompras = BotonMain(texto='Compras',
                                    imagen='imagenes/compras.png')
        self.layoutBotones.addWidget(self.btnCompras)

        self.btnSeteo = BotonMain(texto='&Configuracion',
                                  imagen='imagenes/if_Settings-2_379349.png')
        self.layoutBotones.addWidget(self.btnSeteo)

        self.btnSalir = BotonMain(texto='&Salir',
                                  imagen='imagenes/if_Log Out_27856.png')
        self.layoutBotones.addWidget(self.btnSalir)

        # self.layoutPpal.addLayout(self.layoutBotones)
        self.groupBoxBotones.setLayout(self.layoutBotones)
        self.layoutPpal.addWidget(self.groupBoxBotones)
Ejemplo n.º 22
0
 def ObtieneNumeroFactura(self):
     self.view.layoutFactura.lineEditPtoVta.setText(LeerIni(clave='pto_vta', key='WSFEv1').zfill(4))
     # tipos = Tipocomprobantes.ComboTipoComp(tiporesp=int(LeerIni(clave='cat_iva', key='WSFEv1')))
     # tipo_cpte = [k for (k, v) in tipos.valores.iteritems() if v == self.view.cboComprobante.text()][0]
     tipo_cpte = self.view.cboComprobante.text()
     nro = FEv1().UltimoComprobante(tipo=tipo_cpte,
                                    ptovta=self.view.layoutFactura.lineEditPtoVta.text())
     self.tipo_cpte = tipo_cpte
     self.view.layoutFactura.lineEditNumero.setText(str(int(nro)+1).zfill(8))
     self.SumaTodo()
Ejemplo n.º 23
0
    def Comprobar(self, *args, **kwargs):

        cbte_modo = kwargs['cbte_modo']  # modalidad de emision: CAI, CAE, CAEA
        cuit_emisor = kwargs['cuit_emisor'].replace('-', '')  # proveedor
        pto_vta = kwargs['pto_vta']  # punto de venta habilitado en AFIP
        cbte_tipo = kwargs[
            'cbte_tipo']  # 1: factura A (ver tabla de parametros)
        cbte_nro = kwargs['cbte_nro']  # numero de factura
        cbte_fch = kwargs['cbte_fch']  # fecha en formato aaaammdd
        cod_autorizacion = kwargs[
            'cod_autorizacion']  # numero de CAI, CAE o CAEA
        # if cbte_modo == 'CAI':
        #     imp_total = "0"  # importe total
        #     doc_tipo_receptor = ""  # CUIT (obligatorio Facturas A o M)
        #     doc_nro_receptor = ""  # numero de CUIT del cliente
        # else:
        imp_total = kwargs['imp_total']  # importe total
        doc_tipo_receptor = kwargs[
            'doc_tipo_receptor']  # CUIT (obligatorio Facturas A o M)
        doc_nro_receptor = kwargs['doc_nro_receptor'].replace(
            '-', '')  # numero de CUIT del cliente

        wsfev1 = FEv1()
        ta = wsfev1.Autenticar(service='wscdc')
        self.SetTicketAcceso(ta_string=ta)
        self.Cuit = LeerIni(clave='cuit',
                            key='WSCDC')  #cuit de la empresa/persona
        if LeerIni(clave='h**o') == 'N':
            self.WSDL = LeerIni(clave='url_prod', key='WSCDC')
            self.Conectar("", self.WSDL)
        else:
            self.Conectar()

        # if cbte_modo == 'CAI':
        #     ok = self.ConstatarComprobante(cbte_modo, cuit_emisor, pto_vta, cbte_tipo,
        #                         cbte_nro, cbte_fch, imp_total, cod_autorizacion)
        # else:
        ok = self.ConstatarComprobante(cbte_modo, cuit_emisor, pto_vta,
                                       cbte_tipo, cbte_nro, cbte_fch,
                                       imp_total, cod_autorizacion,
                                       doc_tipo_receptor, doc_nro_receptor)

        return ok
Ejemplo n.º 24
0
    def ConsultarPersona(self, cuit=''):
        self.H**O = True if LeerIni(clave='h**o') == 'S' else False

        wsfev1 = FEv1()
        ta = wsfev1.Autenticar(service='ws_sr_padron_a5')
        # ta = wsfev1.Autenticar(service='ws_sr_padron_a13')
        self.SetTicketAcceso(ta_string=ta)
        self.Cuit = LeerIni(clave='cuit',
                            key='WSFEv1')  #cuit de la empresa/persona

        if LeerIni(clave='h**o') == 'N':
            self.WSDL = "https://aws.afip.gov.ar/sr-padron/webservices/personaServiceA5?wsdl"
            # self.WSDL = "https://aws.afip.gov.ar/sr-padron/webservices/personaServiceA13?wsdl"
            self.Conectar("", self.WSDL)
        else:
            self.Conectar()
        ok = self.Consultar(id_persona=cuit)
        # ok = self.Consultar(id_persona=23347203)
        return ok
Ejemplo n.º 25
0
    def EnviaCorreo(self, *args, **kwargs):

        self.ExportaExcel(mostrar=False)

        if not self.cArchivoGenerado:
            return
        email_contador = LeerIni('email_contador')
        text, ok = QInputDialog.getText(
            self.view,
            'Sistema',
            'Ingrese el mail destinatario:',
            text=email_contador if email_contador else '')
        if ok:
            GrabarIni(clave='email_contador', key='param', valor=str(text))
            destinatario = str(text).strip()
            archivo = self.cArchivoGenerado

            mensaje = "Enviado desde mi Software de Gestion desarrollado por http://www.servinlgsm.com.ar \n\n" \
                      "No responder este email"
            motivo = "Se envia informe de ventas de {}".format(
                LeerIni(clave='empresa', key='FACTURA'))
            servidor = ParamSist.ObtenerParametro("SERVER_SMTP")
            clave = ParamSist.ObtenerParametro("CLAVE_SMTP")
            usuario = ParamSist.ObtenerParametro("USUARIO_SMTP")
            puerto = ParamSist.ObtenerParametro("PUERTO_SMTP") or 587
            responder = ParamSist.ObtenerParametro("RESPONDER")
            # envia_correo(from_address='', to_address='', message='', subject='', password_email='', to_cc='',
            #              smtp='', smtp_port=587, files=''):
            ok = envia_correo(from_address=responder,
                              to_address=destinatario,
                              message=mensaje,
                              subject=motivo,
                              password_email=clave,
                              smtp_port=puerto,
                              smtp_server=servidor,
                              files=archivo)
            if not ok:
                Ventanas.showAlert("Sistema",
                                   "Ha ocurrido un error al enviar el correo")
            else:
                Ventanas.showAlert("Sistema",
                                   "Archivo de ventas enviado correctamente")
Ejemplo n.º 26
0
 def text(self):
     if LeerIni('base') == 'mysql':
         if self.isChecked():
             return b'\01'
         else:
             return b'\00'
     else:
         if self.isChecked():
             return True
         else:
             return False
Ejemplo n.º 27
0
    def CargaDatos(self):
        if not self.modelo:
            Ventanas.showAlert(
                LeerIni('nombre_sistema'),
                "No se ha establecido el modelo para la busqueda")
            return

        textoBusqueda = self.lineEdit.text()

        rows = self.modelo.select().dicts()

        if self.condiciones:
            for c in self.condiciones:
                rows = rows.where(c)

        if textoBusqueda:
            rows = rows.where(self.campoBusqueda.contains(textoBusqueda))

        self.tableView.setColumnCount(len(self.campos))
        self.tableView.setRowCount(len(rows))

        logging.info("SQL de condiciones de busqueda {}".format(
            self.condiciones))
        #self.tableView.horizontalHeader().setResizeMode(QHeaderView.ResizeToContents)

        for col in range(0, len(self.campos)):
            if self.campos[col] == self.campoRetorno.column_name:
                self.colRetorno = col
            if self.campos[col] == self.campoBusqueda.column_name:
                self.colBusqueda = col

            self.tableView.setHorizontalHeaderItem(
                col, QTableWidgetItem(self.campos[col].capitalize()))

        fila = 0
        for row in rows:
            for col in range(0, len(self.campos)):
                if isinstance(row[self.campos[col]], (
                        int,
                        decimal.Decimal,
                )):
                    item = QTableWidgetItem(str(row[self.campos[col]]))
                else:
                    item = QTableWidgetItem(
                        QTableWidgetItem(row[self.campos[col]]))

                item.setFlags(QtCore.Qt.ItemIsSelectable
                              | QtCore.Qt.ItemIsEnabled)
                self.tableView.setItem(fila, col, item)

            fila += 1
        self.tableView.resizeRowsToContents()
        self.tableView.resizeColumnsToContents()
Ejemplo n.º 28
0
    def Autenticar(self, *args, **kwargs):
        if 'service' in kwargs:
            service = kwargs['service']
        else:
            service = 'wsfe'
        wsaa = WSAA()
        archivo = ubicacion_sistema() + service + '-ta.xml'
        try:
            file = open(archivo, "r")
            ta = file.read()
            file.close()
        except:
            ta = ''

        if ta == '': #si no existe el archivo se solicita un ticket
            solicitar = True
        else:
            ok = wsaa.AnalizarXml(ta)
            expiracion = wsaa.ObtenerTagXml("expirationTime")
            solicitar = wsaa.Expirado(expiracion) #si el ticket esta vencido se solicita uno nuevo
            logging.info("Fecha expiracion de ticket acceso {}".format(expiracion))

        if solicitar:
            #Generar un Ticket de Requerimiento de Acceso(TRA)
            tra = wsaa.CreateTRA(service=service)
            logging.debug("Ticket de acceso {}".format(tra))
            #Generar el mensaje firmado(CMS)
            if LeerIni(clave='h**o') == 'S':#homologacion
                cms = wsaa.SignTRA(tra, abspath(LeerIni(clave="cert_homo", key="WSAA")),
                               abspath(LeerIni(clave="privatekey_homo", key="WSAA")))
                ok = wsaa.Conectar("", LeerIni(clave='url_homo', key='WSAA'))  # Homologación
            else:
                cacert = LeerIni('iniciosistema') + LeerIni(clave='cacert', key='WSFEv1')
                cms = wsaa.SignTRA(tra, LeerIni(clave="cert_prod", key="WSAA"),
                               LeerIni(clave="privatekey_prod", key="WSAA"))
                ok = wsaa.Conectar("", LeerIni(clave='url_prod', key='WSAA'), cacert=cacert) #Produccion

            #Llamar al web service para autenticar
            ta = wsaa.LoginCMS(cms)
            #Grabo el ticket de acceso para poder reutilizarlo
            file = open(archivo, 'w')
            file.write(ta)
            file.close()
        # devuelvo el ticket de acceso
        return ta
Ejemplo n.º 29
0
 def __init__(self):
     super(Main, self).__init__()
     if LeerIni("base") == "sqlite":
         copyfile("sistema.db", "sistema-res.db")
     self.view = MainView()
     self.view.initUi()
     self.conectarWidgets()
     self.model = ModeloBase()
     self.model.getDb()
     if not LeerIni("ultima_copia"):
         GrabarIni(clave='ultima_copia', key='param', valor='00000000')
     ult = LeerIni("ultima_copia")
     if LeerIni("base") == "sqlite":
         if ult < FechaMysql():
             resguardo = ResguardoController()
             resguardo.Cargar("sistema-res.db")
             resguardo.Cargar("sistema.ini")
             GrabarIni(clave='ultima_copia',
                       key='param',
                       valor=FechaMysql())
     self.CreaTablas()
     self.Migraciones()
Ejemplo n.º 30
0
 def ConsultarMontoObligado(self, cuit_consultada, cuit_emisor):
     if isinstance(cuit_emisor, bytes):
         self.Cuit = cuit_emisor.decode()
     else:
         self.Cuit = cuit_emisor
     cuit_consultada = cuit_consultada.replace('-', '')
     if LeerIni(clave='h**o') == 'S':
         self.Conectar("")
     else:
         self.Conectar("", wsdl=self.WSDL)
     tafce = self.Autenticar()
     self.SetTicketAcceso(tafce)
     minimo = self.ConsultarMontoObligadoRecepcion(cuit_consultada)
     if self.ErrMsg:
         Ventanas.showAlert("Sistema", self.ErrMsg)
     return self.Resultado == 'S', minimo