Beispiel #1
0
        private void createCFDI(CFDi cfdi)
        {
            //logger.Info("Proceso de timbrado iniciado. Emisor: " + cfdi.emisor.unidadOperativa.razonSocial.rfc + "; Receptor: " + cfdi.receptor.informacionFiscal.rfc);
            EmisorDAO    emisorDAO = new EmisorDAO();
            ConceptosDAO conDAO    = new ConceptosDAO();
            CFDiDAO      cfdiDAO   = new CFDiDAO();
            UsuarioDAO   uDAO      = new UsuarioDAO();
            Calculador   calc      = new Calculador();

            //if (cfdi.pagos != null && cfdi.pagos.doctoRelacionados != null && cfdi.pagos.doctoRelacionados.Length > 0)
            //{
            //    getDoctoRelacionados(cfdi.pagos.doctoRelacionados, cfdiDAO);
            //}
            cfdi.emisor = emisorDAO.GetIssuerInfo(cfdi.emisor.unidadOperativa.idUnidadOperativa,
                                                  cfdi.tipoCompra.Substring(0, 1));
            cfdi.emisor.certificado         = emisorDAO.GetIssuerCertInfo(cfdi.emisor.unidadOperativa.razonSocial.idRazonSocial);
            cfdi.receptor.usuario           = uDAO.getUsuario(cfdi.receptor.usuario.id);
            cfdi.receptor.informacionFiscal = uDAO.getUsuarioFiscales(cfdi.receptor.usuario.id);
            cfdi.conceptos = conDAO.getConceptos(cfdi.idMov, cfdi.emisor.unidadOperativa.idUnidadOperativa);
            //if(cfdi.conceptos[0].fecha.ToString("yyyy/MM/dd").Equals(DateTime.Now.ToString("yyyy/MM/dd")))
            //{
            //    throw new SameDayInvoiceException("No puedes hacer la factura el mismo día de la compra");
            //}
            //if(!cfdi.conceptos[0].fecha.ToString("yyyy/MM/dd").Equals(cfdi.fecha.ToString("yyyy/MM/dd")))
            //{
            //    throw new InvoiceDateMismatchException("La fecha que has ingresado no coincide con la fecha de la compra");
            //}
            //if(DateTime.Now.Subtract(cfdi.conceptos[0].fecha).TotalDays >= 15)
            //{
            //    throw new ExpiredInvoiceException("Solo puedes facturar hasta 15 dias después de la compra");
            //}
            //Validar si los conceptos no han sido facturados
            calc.calcularDescuentosConceptos(cfdi.conceptos);
            calc.calcularImpuestoConceptos(cfdi.conceptos, cfdi.emisor.unidadOperativa);
            calc.calcularTotal(cfdi);
            cfdi.importeLetra = ConvertidorImporte.enletras(cfdi.total, cfdi.moneda);
            cfdi.fechaCert    = DateTime.Now;
            cfdiDAO.saveCFDI(cfdi, true);
            if (cfdi.folio > 0)
            {
                CfdiXmlBuilder xmlBuilder = new CfdiXmlBuilder();
                cfdi.xml = xmlBuilder.BuildXml(cfdi);

                cfdiDAO.saveCFDI(cfdi, false);
                //timbrarFacturaWS(cfdi);
                //xmlBuilder.obtenerDatosTimbre(cfdi);
                cfdiDAO.saveCFDI(cfdi, false);
                logger.Info("Cadena original del complemento de certificacion digital del SAT: " + cfdi.cadenaCertificadoSat);
                sendMail(cfdi);
            }
            else
            {
                throw new InvalidCfdiDataException("No fue posible guardar los datos de la factura");
            }
        }
Beispiel #2
0
        public CFDi cancelarTimbre(CFDi cfdi)
        {
            logger.Info("Proceso de cancelación de factura iniciado. Serie: " + cfdi.serie + "; Folio: " + cfdi.folio);
            CFDiDAO cfdiDAO = new CFDiDAO();

            if (!cfdiDAO.validateInvoiceStatus(cfdi.serie, cfdi.folio))
            {
                throw new InvalidInvoiceStatusException("El estatus actual de la factura no permite cancelar");
            }
            cfdi = cfdiDAO.getInvoiceInfo(cfdi.serie, cfdi.folio);
            CfdiXmlBuilder builder = new CfdiXmlBuilder();

            cfdi.xml = builder.BuildCancelacionXml(cfdi);
            //WS cancelar
            timbrarFacturaWS(cfdi);
            cfdiDAO.cancelarTimbre(cfdi);
            return(cfdi);
        }
Beispiel #3
0
        private void validateCFDI(CFDi cfdi)
        {
            CFDiDAO cfdiDAO = new CFDiDAO();

            cfdi.xml = cfdiDAO.getCFDIXml(cfdi.idFolio);
            if (cfdi.xml != null && cfdi.xml != "")
            {
                CfdiXmlBuilder xmlBuilder = new CfdiXmlBuilder();
                xmlBuilder.obtenerDatosTimbre(cfdi);
                if (cfdi.folioFiscal != null && cfdi.folioFiscal.Length == 36)
                {
                    sendMail(cfdi);
                }
                else
                {
                    createCFDI(cfdi);
                }
            }
        }