Ejemplo n.º 1
0
        public ActionResult Create(EmisorCreateViewModel model) {
            //var model = new EmisorCreateViewModel();
            var emisor = new Emisor();

            emisor.RFC = model.RFC;

            if (!string.IsNullOrEmpty(model.Nombre))
                emisor.Nombre = model.Nombre;

            if (model.DomicilioFiscal != null) {
                if (!string.IsNullOrEmpty(model.DomicilioFiscal.Pais)) {
                    emisor.DomicilioFiscal = new UbicacionFiscal {
                        Pais = model.DomicilioFiscal.Pais,
                        Calle = string.IsNullOrEmpty(model.DomicilioFiscal.Calle) ? null : model.DomicilioFiscal.Calle,
                        NoExterior = string.IsNullOrEmpty(model.DomicilioFiscal.NoExterior) ? null : model.DomicilioFiscal.NoExterior,
                        NoInterior = string.IsNullOrEmpty(model.DomicilioFiscal.NoInterior) ? null : model.DomicilioFiscal.NoInterior,
                        Colonia = string.IsNullOrEmpty(model.DomicilioFiscal.Colonia) ? null : model.DomicilioFiscal.Colonia,
                        Localidad = string.IsNullOrEmpty(model.DomicilioFiscal.Localidad) ? null : model.DomicilioFiscal.Localidad,
                        Municipio = string.IsNullOrEmpty(model.DomicilioFiscal.Municipio) ? null : model.DomicilioFiscal.Municipio,
                        Estado = string.IsNullOrEmpty(model.DomicilioFiscal.Estado) ? null : model.DomicilioFiscal.Estado,
                        CodigoPostal = string.IsNullOrEmpty(model.DomicilioFiscal.CodigoPostal) ? null : model.DomicilioFiscal.CodigoPostal,
                        Referencia = string.IsNullOrEmpty(model.DomicilioFiscal.Referencia) ? null : model.DomicilioFiscal.Referencia
                    };
                }
            }

            if (model.ExpedidoEn != null) {
                if (!string.IsNullOrEmpty(model.ExpedidoEn.Pais)) {
                    emisor.ExpedidoEn = new Ubicacion {
                        Pais = model.ExpedidoEn.Pais,
                        Calle = string.IsNullOrEmpty(model.ExpedidoEn.Calle) ? null : model.ExpedidoEn.Calle,
                        NoExterior = string.IsNullOrEmpty(model.ExpedidoEn.NoExterior) ? null : model.ExpedidoEn.NoExterior,
                        NoInterior = string.IsNullOrEmpty(model.ExpedidoEn.NoInterior) ? null : model.ExpedidoEn.NoInterior,
                        Colonia = string.IsNullOrEmpty(model.ExpedidoEn.Colonia) ? null : model.ExpedidoEn.Colonia,
                        Localidad = string.IsNullOrEmpty(model.ExpedidoEn.Localidad) ? null : model.ExpedidoEn.Localidad,
                        Municipio = string.IsNullOrEmpty(model.ExpedidoEn.Municipio) ? null : model.ExpedidoEn.Municipio,
                        Estado = string.IsNullOrEmpty(model.ExpedidoEn.Estado) ? null : model.ExpedidoEn.Estado,
                        CodigoPostal = string.IsNullOrEmpty(model.ExpedidoEn.CodigoPostal) ? null : model.ExpedidoEn.CodigoPostal,
                        Referencia = string.IsNullOrEmpty(model.ExpedidoEn.Referencia) ? null : model.ExpedidoEn.Referencia
                    };
                }
            }            

            if (!string.IsNullOrEmpty(model.RegimenFiscal)) 
                emisor.RegimenFiscal = new List<RegimenFiscal> {
                    new RegimenFiscal {
                        Regimen = model.RegimenFiscal
                    }
                };

            emisor.Telefono = string.IsNullOrWhiteSpace(model.Telefono) ? null : model.Telefono;
            emisor.Correo = string.IsNullOrWhiteSpace(model.Correo) ? null : model.Correo;

            emisor.CifUrl = string.IsNullOrWhiteSpace(model.CifUrl) ? null : model.CifUrl;
            emisor.LogoUrl = string.IsNullOrWhiteSpace(model.LogoUrl) ? null : model.LogoUrl;

            //if (!string.IsNullOrEmpty(model.RegimenFiscal)) {
            //    if (emisor.RegimenFiscal == null)
            //        emisor.RegimenFiscal = new List<RegimenFiscal>();
            //    emisor.RegimenFiscal.Add(new RegimenFiscal {
            //        Regimen = model.RegimenFiscal
            //    });
            //}

            if (model.ViewTemplateId != null) {
                emisor.ViewTemplateId = model.ViewTemplateId;
                emisor.ViewTemplate = this.DBContext.ViewTemplates.Find(model.ViewTemplateId); // .Where(v => v.PublicKey == publicKey).SingleOrDefault();
            }

            this.DBContext.Emisores.Add(emisor);
            this.DBContext.SaveChanges();

            return RedirectToAction("Details", new { Id = emisor.PublicKey.ToString("N") }); // "Index", "Home");

            //return View(model);
        }
Ejemplo n.º 2
0
        public ActionResult Edit(EmisorEditViewModel model) {
            Guid publicKey = model.PublicKey; //  Guid.Parse(id);            
            if (ModelState.IsValid) {
                //var emisor = DBContext.Emisores.Where(e => e.PublicKey == model.PublicKey).SingleOrDefault();
                //if (emisor != null) {
                //    emisor.RFC = model.RFC;
                //    emisor.Nombre = model.Nombre;
                //    //emisor.RegimenFiscal
                //    emisor.Telefono = string.IsNullOrWhiteSpace(model.Telefono) ? null : model.Telefono;
                //    emisor.Correo = string.IsNullOrWhiteSpace(model.Correo) ? null : model.Correo;
                //    emisor.CifUrl = string.IsNullOrWhiteSpace(model.CifUrl) ? null : model.CifUrl;
                //    emisor.LogoUrl = string.IsNullOrWhiteSpace(model.LogoUrl) ? null : model.LogoUrl;
                //}
                //DBContext.SaveChanges();
                //return RedirectToAction("Index");
                var originalEmisor = DBContext.Emisores.Where(e => e.PublicKey == publicKey && e.Status == "A")
                       .SingleOrDefault();
                var newEmisor = new Emisor();

                newEmisor.RFC = model.RFC;

                if (!string.IsNullOrEmpty(model.Nombre))
                    newEmisor.Nombre = model.Nombre;

                //if (model.DomicilioFiscal != null) {
                    if (!string.IsNullOrEmpty(model.Pais)) {
                        newEmisor.DomicilioFiscal = new UbicacionFiscal {
                            Pais = model.Pais,
                            Calle = string.IsNullOrEmpty(model.Calle) ? null : model.Calle,
                            NoExterior = string.IsNullOrEmpty(model.NoExterior) ? null : model.NoExterior,
                            NoInterior = string.IsNullOrEmpty(model.NoInterior) ? null : model.NoInterior,
                            Colonia = string.IsNullOrEmpty(model.Colonia) ? null : model.Colonia,
                            Localidad = string.IsNullOrEmpty(model.Localidad) ? null : model.Localidad,
                            Municipio = string.IsNullOrEmpty(model.Municipio) ? null : model.Municipio,
                            Estado = string.IsNullOrEmpty(model.Estado) ? null : model.Estado,
                            CodigoPostal = string.IsNullOrEmpty(model.CodigoPostal) ? null : model.CodigoPostal,
                            Referencia = string.IsNullOrEmpty(model.Referencia) ? null : model.Referencia
                        };
                    }
                //}

                //if (model.ExpedidoEn != null) {
                    if (!string.IsNullOrEmpty(model.ExpedidoEnPais)) {
                        newEmisor.ExpedidoEn = new Ubicacion {
                            Pais = model.ExpedidoEnPais,
                            Calle = string.IsNullOrEmpty(model.ExpedidoEnCalle) ? null : model.ExpedidoEnCalle,
                            NoExterior = string.IsNullOrEmpty(model.ExpedidoEnNoExterior) ? null : model.ExpedidoEnNoExterior,
                            NoInterior = string.IsNullOrEmpty(model.ExpedidoEnNoInterior) ? null : model.ExpedidoEnNoInterior,
                            Colonia = string.IsNullOrEmpty(model.ExpedidoEnColonia) ? null : model.ExpedidoEnColonia,
                            Localidad = string.IsNullOrEmpty(model.ExpedidoEnLocalidad) ? null : model.ExpedidoEnLocalidad,
                            Municipio = string.IsNullOrEmpty(model.ExpedidoEnMunicipio) ? null : model.ExpedidoEnMunicipio,
                            Estado = string.IsNullOrEmpty(model.ExpedidoEnEstado) ? null : model.ExpedidoEnEstado,
                            CodigoPostal = string.IsNullOrEmpty(model.ExpedidoEnCodigoPostal) ? null : model.ExpedidoEnCodigoPostal,
                            Referencia = string.IsNullOrEmpty(model.ExpedidoEnReferencia) ? null : model.ExpedidoEnReferencia
                        };
                    }
                //}

                if (!string.IsNullOrEmpty(model.RegimenFiscal))
                    newEmisor.RegimenFiscal = new List<RegimenFiscal> {
                    new RegimenFiscal {
                        Regimen = model.RegimenFiscal
                    }
                };

                newEmisor.Telefono = string.IsNullOrWhiteSpace(model.Telefono) ? null : model.Telefono;
                newEmisor.Correo = string.IsNullOrWhiteSpace(model.Correo) ? null : model.Correo;

                newEmisor.CifUrl = string.IsNullOrWhiteSpace(model.CifUrl) ? null : model.CifUrl;
                newEmisor.LogoUrl = string.IsNullOrWhiteSpace(model.LogoUrl) ? null : model.LogoUrl;

                if (model.ViewTemplateId != null) {
                    newEmisor.ViewTemplateId = model.ViewTemplateId;
                    newEmisor.ViewTemplate = this.DBContext.ViewTemplates.Find(model.ViewTemplateId); // .Where(v => v.PublicKey == publicKey).SingleOrDefault();
                }

                originalEmisor.Status = "I";
                this.DBContext.Emisores.Add(newEmisor);
                this.DBContext.SaveChanges();

                return RedirectToAction("Details", new { Id = newEmisor.PublicKey.ToString("N") }); // "Index", "Home");

            }

            return View(model);
        }
Ejemplo n.º 3
0
        public EmisorEditViewModel(Emisor emisor)
        {
            if (emisor == null)
                throw new ArgumentNullException("emisor");

            this.PublicKey = emisor.PublicKey;

            this.RFC = emisor.RFC;
            this.Nombre = emisor.Nombre;
            if (emisor.RegimenFiscal != null && emisor.RegimenFiscal.Count > 0)
                this.RegimenFiscal = emisor.RegimenFiscal[0].Regimen;

            if (emisor.DomicilioFiscal != null) {
                this.Calle = emisor.DomicilioFiscal.Calle;
                this.NoExterior = emisor.DomicilioFiscal.NoExterior;
                this.NoInterior = emisor.DomicilioFiscal.NoInterior;
                this.Colonia = emisor.DomicilioFiscal.Colonia;
                this.Localidad = emisor.DomicilioFiscal.Localidad;
                this.Municipio = emisor.DomicilioFiscal.Municipio;
                this.Estado = emisor.DomicilioFiscal.Estado;
                this.Pais = emisor.DomicilioFiscal.Pais;
                this.CodigoPostal = emisor.DomicilioFiscal.CodigoPostal;
                this.Referencia = emisor.DomicilioFiscal.Referencia;
            }
            //this.RegimenFiscal = emisor.RegimenFiscal;

            this.Correo = emisor.Correo;
            this.Telefono = emisor.Telefono;
            this.CifUrl = emisor.CifUrl;
            this.LogoUrl = emisor.LogoUrl;
            this.ViewTemplateId = emisor.ViewTemplateId;
        }
        public ActionResult Upload(ComprobanteUploadViewModel model)
        {
            string comprobanteId = "";
            if (ModelState.IsValid) {

                if (model.ComprobanteArchivo == null || model.ComprobanteArchivo.ContentLength == 0) {
                    return View();
                }
                try {

                    Comprobante comprobante = new Comprobante();
                    Emisor comprobanteEmisor = null;// new Emisor();
                    Receptor comprobanteReceptor = null; // new Receptor();
                    Certificado certificado = new Certificado();

                    if (model.ComprobanteArchivo != null) {
                        // MemoryStream target = new MemoryStream();

                        System.Xml.XmlTextReader xmlReader = new System.Xml.XmlTextReader(model.ComprobanteArchivo.InputStream);

                        while (xmlReader.Read()) {
                            if (xmlReader.NodeType == System.Xml.XmlNodeType.Element) {

                                if ("xml".Equals(xmlReader.Name)) {

                                }
                                else if ("cfdi:Comprobante".Equals(xmlReader.Name)) {
                                    while (xmlReader.MoveToNextAttribute()) {
                                        switch (xmlReader.Name) {
                                            case "version":
                                                comprobante.Version = xmlReader.Value;
                                                break;
                                            case "serie":
                                                comprobante.Serie = xmlReader.Value;
                                                break;
                                            case "folio":
                                                comprobante.Folio = xmlReader.Value;
                                                break;
                                            case "fecha":
                                                comprobante.Fecha = DateTime.Parse(xmlReader.Value);
                                                break;
                                            case "sello":
                                                comprobante.Sello = xmlReader.Value;
                                                break;
                                            case "noAprobacion":
                                                comprobante.NoAprobacion = xmlReader.Value;
                                                break;
                                            case "anoAprobacion":
                                                comprobante.AnoAprobacion = xmlReader.Value;
                                                break;
                                            case "formaDePago":
                                                comprobante.FormaDePago = xmlReader.Value;
                                                break;
                                            case "noCertificado":
                                                certificado.NumSerie = xmlReader.Value;
                                                //comprobante.LugarExpedicion = xmlReader.Value;
                                                comprobante.HasNoCertificado = true;
                                                break;
                                            case "certificado":
                                                //comprobante.LugarExpedicion = xmlReader.Value;
                                                certificado.CertificadoBase64 = xmlReader.Value;
                                                comprobante.HasCertificado = true;
                                                break;
                                            case "condicionesDePago":
                                                comprobante.CondicionesDePago = xmlReader.Value;
                                                break;
                                            case "subTotal":
                                                comprobante.SubTotal = decimal.Parse(xmlReader.Value);
                                                break;
                                            case "descuento":
                                                comprobante.Descuento = decimal.Parse(xmlReader.Value);
                                                break;
                                            case "motivoDescuento":
                                                comprobante.MotivoDescuento = xmlReader.Value;
                                                break;
                                            case "TipoCambio":
                                                comprobante.TipoCambio = xmlReader.Value;
                                                break;
                                            case "Moneda":
                                                comprobante.Moneda = xmlReader.Value;
                                                break;
                                            case "total":
                                                comprobante.Total = decimal.Parse(xmlReader.Value);
                                                break;
                                            case "tipoDeComprobante":
                                                comprobante.TipoDeComprobante = xmlReader.Value;
                                                break;
                                            case "metodoDePago":
                                                comprobante.MetodoDePago = xmlReader.Value;
                                                break;
                                            case "LugarExpedicion":
                                                comprobante.LugarExpedicion = xmlReader.Value;
                                                break;
                                            case "NumCtaPago":
                                                comprobante.NumCtaPago = xmlReader.Value;
                                                break;
                                            case "SerieFolioFiscalOrig":
                                                comprobante.SerieFolioFiscalOrig = xmlReader.Value;
                                                break;
                                            case "FechaFolioFiscalOrig":
                                                comprobante.FechaFolioFiscalOrig = DateTime.Parse(xmlReader.Value);
                                                break;
                                            case "MontoFolioFiscalOrig":
                                                comprobante.MontoFolioFiscalOrig = decimal.Parse(xmlReader.Value);
                                                break;

                                            case "xmlns:cfdi":
                                            case "xmlns:xsi":
                                            case "xsi:schemaLocation":
                                                break;
                                            default:
                                                throw new Exception(xmlReader.Name + "is not a valid attribute for cfdi:Comprobante.");
                                        }
                                    }

                                }

                                else if ("cfdi:Emisor".Equals(xmlReader.Name)) {
                                    //comprobante.Emisor = new Emisor();
                                    comprobanteEmisor = new Emisor();
                                    while (xmlReader.MoveToNextAttribute()) {
                                        switch (xmlReader.Name) {
                                            case "rfc":
                                                //comprobante.Emisor.RFC = xmlReader.Value;
                                                comprobanteEmisor.RFC = xmlReader.Value;
                                                break;
                                            case "nombre":
                                                //comprobante.Emisor.Nombre = xmlReader.Value;
                                                comprobanteEmisor.Nombre = xmlReader.Value;
                                                break;
                                            default:
                                                throw new Exception(xmlReader.Name + "is not a valid attribute for cfdi:Emisor.");
                                        }
                                    }
                                }

                                else if ("cfdi:DomicilioFiscal".Equals(xmlReader.Name)) {
                                    comprobanteEmisor.DomicilioFiscal = new UbicacionFiscal();
                                    while (xmlReader.MoveToNextAttribute()) {
                                        switch (xmlReader.Name) {
                                            case "calle":
                                                comprobanteEmisor.DomicilioFiscal.Calle = xmlReader.Value;
                                                break;
                                            case "noExterior":
                                                comprobanteEmisor.DomicilioFiscal.NoExterior = xmlReader.Value;
                                                break;
                                            case "noInterior":
                                                comprobanteEmisor.DomicilioFiscal.NoInterior = xmlReader.Value;
                                                break;
                                            case "colonia":
                                                comprobanteEmisor.DomicilioFiscal.Colonia = xmlReader.Value;
                                                break;
                                            case "localidad":
                                                comprobanteEmisor.DomicilioFiscal.Localidad = xmlReader.Value;
                                                break;
                                            case "referencia":
                                                comprobanteEmisor.DomicilioFiscal.Referencia = xmlReader.Value;
                                                break;
                                            case "municipio":
                                                comprobanteEmisor.DomicilioFiscal.Municipio = xmlReader.Value;
                                                break;
                                            case "estado":
                                                comprobanteEmisor.DomicilioFiscal.Estado = xmlReader.Value;
                                                break;
                                            case "pais":
                                                comprobanteEmisor.DomicilioFiscal.Pais = xmlReader.Value;
                                                break;
                                            case "codigoPostal":
                                                comprobanteEmisor.DomicilioFiscal.CodigoPostal = xmlReader.Value;
                                                break;
                                            default:
                                                throw new Exception(xmlReader.Name + "is not a valid attribute for cfdi:DomicilioFiscal.");
                                        }
                                    }
                                }

                                else if ("cfdi:RegimenFiscal".Equals(xmlReader.Name)) {
                                    if (comprobanteEmisor.RegimenFiscal == null)
                                        comprobanteEmisor.RegimenFiscal = new List<RegimenFiscal>();
                                    while (xmlReader.MoveToNextAttribute()) {
                                        switch (xmlReader.Name) {
                                            case "Regimen":
                                                RegimenFiscal regimen = new RegimenFiscal();
                                                regimen.Regimen = xmlReader.Value;
                                                comprobanteEmisor.RegimenFiscal.Add(regimen);
                                                break;
                                            default:
                                                throw new Exception(xmlReader.Name + "is not a valid attribute for cfdi:RegimenFiscal.");
                                        }
                                    }
                                }

                                else if ("cfdi:Receptor".Equals(xmlReader.Name)) {
                                    //comprobante.Receptor = new Receptor();
                                    comprobanteReceptor = new Receptor();
                                    while (xmlReader.MoveToNextAttribute()) {
                                        switch (xmlReader.Name) {
                                            case "rfc":
                                                //comprobante.Receptor.RFC = xmlReader.Value;
                                                comprobanteReceptor.RFC = xmlReader.Value;
                                                break;
                                            case "nombre":
                                                //comprobante.Receptor.Nombre = xmlReader.Value;
                                                comprobanteReceptor.Nombre = xmlReader.Value;
                                                break;
                                            default:
                                                throw new Exception(xmlReader.Name + "is not a valid attribute for cfdi:Receptor.");
                                        }
                                    }
                                }

                                else if ("cfdi:Domicilio".Equals(xmlReader.Name)) {
                                    //comprobante.Receptor.Domicilio = new Ubicacion();
                                    comprobanteReceptor.Domicilio = new Ubicacion();
                                    while (xmlReader.MoveToNextAttribute()) {
                                        switch (xmlReader.Name) {
                                            case "calle":
                                                comprobanteReceptor.Domicilio.Calle = xmlReader.Value;
                                                break;
                                            case "noExterior":
                                                comprobanteReceptor.Domicilio.NoExterior = xmlReader.Value;
                                                break;
                                            case "noInterior":
                                                comprobanteReceptor.Domicilio.NoInterior = xmlReader.Value;
                                                break;
                                            case "colonia":
                                                comprobanteReceptor.Domicilio.Colonia = xmlReader.Value;
                                                break;
                                            case "localidad":
                                                comprobanteReceptor.Domicilio.Localidad = xmlReader.Value;
                                                break;
                                            case "referencia":
                                                comprobanteReceptor.Domicilio.Referencia = xmlReader.Value;
                                                break;
                                            case "municipio":
                                                comprobanteReceptor.Domicilio.Municipio = xmlReader.Value;
                                                break;
                                            case "estado":
                                                comprobanteReceptor.Domicilio.Estado = xmlReader.Value;
                                                break;
                                            case "pais":
                                                comprobanteReceptor.Domicilio.Pais = xmlReader.Value;
                                                break;
                                            case "codigoPostal":
                                                comprobanteReceptor.Domicilio.CodigoPostal = xmlReader.Value;
                                                break;
                                            default:
                                                throw new Exception(xmlReader.Name + "is not a valid attribute for cfdi:Domicilio.");
                                        }
                                    }
                                }

                                else if ("cfdi:Conceptos".Equals(xmlReader.Name)) {
                                    comprobante.Conceptos = new List<Concepto>();
                                }

                                else if ("cfdi:Concepto".Equals(xmlReader.Name)) {
                                    Concepto concepto = new Concepto();
                                    concepto.PublicKey = Guid.NewGuid();
                                    while (xmlReader.MoveToNextAttribute()) {
                                        switch (xmlReader.Name) {
                                            case "cantidad":
                                                concepto.Cantidad = decimal.Parse(xmlReader.Value);
                                                break;
                                            case "unidad":
                                                concepto.Unidad = xmlReader.Value;
                                                break;
                                            case "noIdentificacion":
                                                concepto.NoIdentificacion = xmlReader.Value;
                                                break;
                                            case "descripcion":
                                                concepto.Descripcion = xmlReader.Value;
                                                break;
                                            case "valorUnitario":
                                                concepto.ValorUnitario = decimal.Parse(xmlReader.Value);
                                                break;
                                            case "importe":
                                                concepto.Importe = decimal.Parse(xmlReader.Value);
                                                break;
                                            default:
                                                throw new Exception(xmlReader.Name + "is not a valid attribute for cfdi:Domicilio.");
                                        }
                                    }
                                    concepto.Ordinal = comprobante.Conceptos.Count + 1;
                                    comprobante.Conceptos.Add(concepto);
                                }

                                else if ("cfdi:Impuestos".Equals(xmlReader.Name)) {
                                    comprobante.Impuestos = new Impuestos();
                                    while (xmlReader.MoveToNextAttribute()) {
                                        switch (xmlReader.Name) {
                                            case "totalImpuestosRetenidos":
                                                comprobante.Impuestos.TotalImpuestosRetenidos = decimal.Parse(xmlReader.Value);
                                                break;
                                            case "totalImpuestosTrasladados":
                                                comprobante.Impuestos.TotalImpuestosTrasladados = decimal.Parse(xmlReader.Value);
                                                break;
                                            default:
                                                throw new Exception(xmlReader.Name + "is not a valid attribute for cfdi:Impuestos.");
                                        }
                                    }
                                }

                                else if ("cfdi:Traslados".Equals(xmlReader.Name)) {
                                    comprobante.Impuestos.Traslados = new List<Traslado>();
                                }

                                else if ("cfdi:Traslado".Equals(xmlReader.Name)) {
                                    Traslado traslado = new Traslado();
                                    while (xmlReader.MoveToNextAttribute()) {
                                        switch (xmlReader.Name) {
                                            case "impuesto":
                                                traslado.Impuesto = xmlReader.Value;
                                                break;
                                            case "tasa":
                                                traslado.Tasa = decimal.Parse(xmlReader.Value);
                                                break;
                                            case "importe":
                                                traslado.Importe = decimal.Parse(xmlReader.Value);
                                                break;
                                            default:
                                                throw new Exception(xmlReader.Name + "is not a valid attribute for cfdi:Impuestos.");
                                        }
                                    }
                                    comprobante.Impuestos.Traslados.Add(traslado);
                                }

                                else if ("cfdi:Retenciones".Equals(xmlReader.Name)) {
                                    comprobante.Impuestos.Retenciones = new List<Retencion>();
                                }

                                else if ("cfdi:Retencion".Equals(xmlReader.Name)) {
                                    Retencion retencion = new Retencion();
                                    while (xmlReader.MoveToNextAttribute()) {
                                        switch (xmlReader.Name) {
                                            case "impuesto":
                                                retencion.Impuesto = xmlReader.Value;
                                                break;
                                            case "importe":
                                                retencion.Importe = decimal.Parse(xmlReader.Value);
                                                break;
                                            default:
                                                throw new Exception(xmlReader.Name + "is not a valid attribute for cfdi:Retencion.");
                                        }
                                    }
                                    comprobante.Impuestos.Retenciones.Add(retencion);
                                }

                                else if ("cfdi:Complemento".Equals(xmlReader.Name)) {
                                    comprobante.Complementos = new List<Complemento>();
                                }

                                else if ("tfd:TimbreFiscalDigital".Equals(xmlReader.Name)) {
                                    TimbreFiscalDigital timbre = new TimbreFiscalDigital();
                                    while (xmlReader.MoveToNextAttribute()) {
                                        switch (xmlReader.Name) {
                                            case "version":
                                                timbre.Version = xmlReader.Value;
                                                break;
                                            case "UUID":
                                                timbre.UUID = xmlReader.Value;
                                                break;
                                            case "FechaTimbrado":
                                                timbre.FechaTimbrado = DateTime.Parse(xmlReader.Value);
                                                break;
                                            case "selloCFD":
                                                timbre.SelloCFD = xmlReader.Value;
                                                break;
                                            case "noCertificadoSAT":
                                                timbre.NoCertificadoSAT = xmlReader.Value;
                                                break;
                                            case "selloSAT":
                                                timbre.SelloSAT = xmlReader.Value;
                                                break;
                                            case "xmlns:tfd":
                                            case "xsi:schemaLocation":
                                                break;
                                            default:
                                                throw new Exception(xmlReader.Name + " is not a valid attribute for cfdi:TimbreFiscalDigital.");
                                        }
                                    }
                                    comprobante.Complementos.Add(timbre);
                                }

                                else {
                                    xmlReader.NodeType.ToString();
                                    xmlReader.Name.ToString();
                                }
                                //xmlReader.NodeType.ToString();
                            }
                        }

                        //xmlReader.Dispose();
                        //xmlReader.Close();

                        model.ComprobanteArchivo.InputStream.Position = 0;
                        //model.ComprobanteArchivo.InputStream.Position = 0;

                        //model.ComprobanteArchivo.InputStream.CopyTo(target);
                        //Byte[] data = target.ToArray();

                        if (certificado != null) {
                            if (!string.IsNullOrEmpty(certificado.NumSerie)) {
                                certificado = DBContext.Certificados.Where(c => c.NumSerie == certificado.NumSerie).SingleOrDefault();
                                comprobante.Certificado = certificado;
                            }
                        }

                        if (comprobanteEmisor != null) {
                            //Emisor emisor = DBContext.Emisores.Where(e =>
                            //    (e.RFC == comprobante.Emisor.RFC)
                            //    && (e.Nombre == comprobante.Emisor.Nombre)
                            //    && (e.Status == "A")
                            //    ).SingleOrDefault();

                            List<Emisor> emisores = DBContext.Emisores.Where(e =>
                                (e.RFC == comprobanteEmisor.RFC)
                                && (e.Nombre == comprobanteEmisor.Nombre)
                                ).ToList();

                            if (emisores != null && emisores.Count > 0) {
                                foreach (Emisor emisor in emisores) {

                                    if ((emisor.DomicilioFiscal != null && comprobanteEmisor.DomicilioFiscal != null)
                                        && (emisor.DomicilioFiscal.Calle == comprobanteEmisor.DomicilioFiscal.Calle)
                                        && (emisor.DomicilioFiscal.NoExterior == comprobanteEmisor.DomicilioFiscal.NoExterior)
                                        && (emisor.DomicilioFiscal.NoInterior == comprobanteEmisor.DomicilioFiscal.NoInterior)
                                        && (emisor.DomicilioFiscal.Colonia == comprobanteEmisor.DomicilioFiscal.Colonia)
                                        && (emisor.DomicilioFiscal.Referencia == comprobanteEmisor.DomicilioFiscal.Referencia)
                                        && (emisor.DomicilioFiscal.Localidad == comprobanteEmisor.DomicilioFiscal.Localidad)
                                        && (emisor.DomicilioFiscal.Municipio == comprobanteEmisor.DomicilioFiscal.Municipio)
                                        && (emisor.DomicilioFiscal.Estado == comprobanteEmisor.DomicilioFiscal.Estado)
                                        && (emisor.DomicilioFiscal.CodigoPostal == comprobanteEmisor.DomicilioFiscal.CodigoPostal)
                                        && (emisor.DomicilioFiscal.Pais == comprobanteEmisor.DomicilioFiscal.Pais)
                                        ) {

                                        //if (receptor != null) {
                                        comprobanteEmisor = emisor;
                                        comprobanteEmisor.EmisorId = emisor.EmisorId;
                                        comprobanteEmisor.DomicilioFiscal = emisor.DomicilioFiscal;
                                        comprobanteEmisor.DomicilioFiscalId = emisor.DomicilioFiscalId;
                                        //comprobante.Emisor = DBContext.ComprobantesEmisores.Where( e => e.EmisorId == emisor.EmisorId && e.DomicilioFiscalId = emisor.DomicilioFiscalId && e.ExpedidoEnId)
                                        comprobante.Emisor = DBContext.ComprobantesEmisores.Where(e => e.EmisorId == emisor.EmisorId && e.DomicilioFiscalId == emisor.DomicilioFiscalId).SingleOrDefault();

                                        if (comprobante.Emisor == null) {
                                            comprobante.Emisor = new ComprobanteEmisor {
                                                Emisor = comprobanteEmisor,
                                                //EmisorId = emisor.EmisorId,
                                                DomicilioFiscal = comprobanteEmisor.DomicilioFiscal
                                                //,DomicilioId = receptor.DomicilioId
                                                // TODO:
                                                //RegimenFiscal = emisor.RegimenFiscal
                                            };
                                        }
                                    }
                                }
                                //if (comprobanteEmisor.DomicilioFiscalId == null) {
                                //    // The address has changed, create a new one and inactive the oldone
                                //    foreach (Emisor emisor in emisores) {
                                //        emisor.Status = "I";
                                //    }
                                //    comprobante.Emisor.Status = "A";

                                //}
                                if (comprobanteEmisor.EmisorId == null) {
                                    // The address has changed, create a new one and inactive the oldone

                                    foreach (Emisor emisor in emisores) {
                                        emisor.Status = "I";
                                    }

                                    comprobanteEmisor.Status = "A";

                                    comprobante.Emisor = new ComprobanteEmisor {
                                        Emisor = comprobanteEmisor,
                                        //EmisorId = emisor.EmisorId,
                                        DomicilioFiscal = comprobanteEmisor.DomicilioFiscal
                                        //,DomicilioId = receptor.DomicilioId
                                        // TODO:
                                        //RegimenFiscal = emisor.RegimenFiscal
                                    };

                                }

                            }
                            else {
                                comprobante.Emisor = new ComprobanteEmisor {
                                    Emisor = comprobanteEmisor,
                                    //EmisorId = emisor.EmisorId,
                                    DomicilioFiscal = comprobanteEmisor.DomicilioFiscal
                                    //,DomicilioId = receptor.DomicilioId
                                    // TODO:
                                    //RegimenFiscal = emisor.RegimenFiscal
                                };
                                comprobanteEmisor.Status = "A";
                            }
                        }

                        if (comprobanteReceptor != null) {
                            //Receptor receptor = DBContext.Receptores.Where(r =>
                            //    (r.RFC == comprobante.Receptor.RFC)
                            //    && (r.Nombre == comprobante.Receptor.Nombre)
                            //    && (r.Status == "A")
                            //    ).SingleOrDefault();

                            List<Receptor> receptores = DBContext.Receptores.Where(r =>
                                (r.RFC == comprobanteReceptor.RFC)
                                && (r.Nombre == comprobanteReceptor.Nombre)
                                ).ToList();

                            if (receptores != null && receptores.Count > 0) {
                                foreach (Receptor receptor in receptores) {

                                    if ((receptor.Domicilio != null && comprobanteReceptor.Domicilio != null)
                                        && (receptor.Domicilio.Calle == comprobanteReceptor.Domicilio.Calle)
                                        && (receptor.Domicilio.NoExterior == comprobanteReceptor.Domicilio.NoExterior)
                                        && (receptor.Domicilio.NoInterior == comprobanteReceptor.Domicilio.NoInterior)
                                        && (receptor.Domicilio.Colonia == comprobanteReceptor.Domicilio.Colonia)
                                        && (receptor.Domicilio.Referencia == comprobanteReceptor.Domicilio.Referencia)
                                        && (receptor.Domicilio.Localidad == comprobanteReceptor.Domicilio.Localidad)
                                        && (receptor.Domicilio.Municipio == comprobanteReceptor.Domicilio.Municipio)
                                        && (receptor.Domicilio.Estado == comprobanteReceptor.Domicilio.Estado)
                                        && (receptor.Domicilio.CodigoPostal == comprobanteReceptor.Domicilio.CodigoPostal)
                                        && (receptor.Domicilio.Pais == comprobanteReceptor.Domicilio.Pais)
                                        ) {

                                        //if (receptor != null) {
                                        comprobanteReceptor = receptor;
                                        comprobanteReceptor.ReceptorId = receptor.ReceptorId;
                                        comprobanteReceptor.Domicilio = receptor.Domicilio;
                                        comprobanteReceptor.DomicilioId = receptor.DomicilioId;

                                        comprobante.Receptor = DBContext.ComprobantesReceptores.Where(r => r.ReceptorId == receptor.ReceptorId && r.DomicilioId == receptor.DomicilioId).SingleOrDefault();

                                        if (comprobante.Receptor == null) {
                                            comprobante.Receptor = new ComprobanteReceptor {
                                                Receptor = comprobanteReceptor,
                                                //ReceptorId = comprobanteReceptor.ReceptorId,
                                                Domicilio = comprobanteReceptor.Domicilio
                                                //,DomicilioId = comprobanteReceptor.DomicilioId
                                            };
                                        }
                                    }
                                }
                                if (comprobanteReceptor.ReceptorId == null) {
                                    // The address has changed, create a new one and inactive the oldone

                                    foreach (Receptor receptor in receptores) {
                                        receptor.Status = "I";
                                    }

                                    comprobanteReceptor.Status = "A";

                                    comprobante.Receptor = new ComprobanteReceptor {
                                        Receptor = comprobanteReceptor,
                                        //ReceptorId = comprobanteReceptor.ReceptorId,
                                        Domicilio = comprobanteReceptor.Domicilio
                                        //,DomicilioId = comprobanteReceptor.DomicilioId
                                    };

                                }
                            }
                            else {
                                comprobanteReceptor.Status = "A";
                                comprobante.Receptor = new ComprobanteReceptor {
                                    Receptor = comprobanteReceptor,
                                    //ReceptorId = comprobanteReceptor.ReceptorId,
                                    Domicilio = comprobanteReceptor.Domicilio
                                    //,DomicilioId = comprobanteReceptor.DomicilioId
                                };
                            }

                            //if (receptor != null) {
                            //    comprobante.Receptor = receptor;
                            //    comprobante.ReceptorId = receptor.ReceptorId;
                            //}
                            //else {

                            //}
                        }

                        comprobante.GeneratedCadenaOriginal = comprobante.GetCadenaOriginal();

                        if (model.ComprobantePDFArchivo != null && model.ComprobantePDFArchivo.ContentLength > 0) {
                            comprobante.GeneratedXmlUrl = string.Format(@"https://sistrategiacfdi1.blob.core.windows.net/{0}/{1}.xml",
                                comprobante.Emisor.PublicKey.ToString("N"),
                                comprobante.PublicKey.ToString("N"));
                            comprobante.GeneratedPDFUrl = string.Format(@"https://sistrategiacfdi1.blob.core.windows.net/{0}/{1}.pdf",
                                comprobante.Emisor.PublicKey.ToString("N"),
                                comprobante.PublicKey.ToString("N"));
                            //comprobante.GeneratedPDFUrl
                            //comprobante.ExtendedIntValue1 = model.NoOrden;
                            //comprobante.ExtendedIntValue2 = model.NoCliente;
                        }

                        comprobante.ExtendedIntValue1 = DBContext.Comprobantes.Max(c => c.ExtendedIntValue1) + 1; // DBContext.Comprobantes.Count() + 1;
                        if (comprobante.Receptor.ReceptorId != null && comprobante.Receptor.ReceptorId > 0)
                            comprobante.ExtendedIntValue2 = comprobante.Receptor.ReceptorId;
                        else
                            comprobante.ExtendedIntValue2 = DBContext.Receptores.Count() + 1;

                        comprobante.ViewTemplate = DBContext.ViewTemplates.Find(2);
                        comprobante.ViewTemplateId = comprobante.ViewTemplate.ViewTemplateId;

                        comprobante.Status = "A";

                        comprobanteId = comprobante.PublicKey.ToString("N");
                        DBContext.Comprobantes.Add(comprobante);
                        DBContext.SaveChanges();

                        if (model.ComprobantePDFArchivo != null && model.ComprobantePDFArchivo.ContentLength > 0) {
                            CloudStorageMananger manager = new CloudStorageMananger();
                            manager.UploadFromStream(ConfigurationManager.AppSettings["AzureAccountName"],
                                ConfigurationManager.AppSettings["AzureAccountKey"],
                                comprobante.Emisor.PublicKey.ToString("N"),
                                comprobante.PublicKey.ToString("N") + ".xml",
                                model.ComprobanteArchivo.FileName,
                                model.ComprobanteArchivo.ContentType,
                                model.ComprobanteArchivo.InputStream);

                            manager.UploadFromStream(ConfigurationManager.AppSettings["AzureAccountName"],
                                ConfigurationManager.AppSettings["AzureAccountKey"],
                                comprobante.Emisor.PublicKey.ToString("N"),
                                comprobante.PublicKey.ToString("N") + ".pdf",
                                model.ComprobantePDFArchivo.FileName,
                                model.ComprobantePDFArchivo.ContentType,
                                model.ComprobantePDFArchivo.InputStream);
                        }
                    }
                }
                catch (Exception ex) {
                    //log.Error(ex, "Error upload photo blob to storage");
                    ex.ToString();
                }
            }
            return RedirectToAction("Details", "Comprobante", new { id = comprobanteId });
        }
Ejemplo n.º 5
0
        public EmisorDetailViewModel(Emisor emisor)
        {
            //public EmisorDetailViewModel(ComprobanteEmisor emisor) {
            if (emisor == null)
                throw new ArgumentNullException("emisor");

            this.PublicKey = emisor.PublicKey;

            this.RFC = emisor.RFC;
            this.Nombre = emisor.Nombre;
            //if (emisor.RegimenFiscal != null && emisor.RegimenFiscal.Count > 0)
            //    this.RegimenFiscal = emisor.RegimenFiscal[0].Regimen;
            if (emisor.RegimenFiscal != null && emisor.RegimenFiscal.Count > 0)
                foreach (var regimen in emisor.RegimenFiscal.OrderByDescending(x => x.RegimenFiscalId)) {
                    if ("A".Equals(regimen.Status, StringComparison.InvariantCultureIgnoreCase)) {
                        this.RegimenFiscal = regimen.Regimen;
                        break;
                    }
                }

            if (emisor.DomicilioFiscal != null) {
                this.Calle = emisor.DomicilioFiscal.Calle;
                this.NoExterior = emisor.DomicilioFiscal.NoExterior;
                this.NoInterior = emisor.DomicilioFiscal.NoInterior;
                this.Colonia = emisor.DomicilioFiscal.Colonia;
                this.Localidad = emisor.DomicilioFiscal.Localidad;
                this.Municipio = emisor.DomicilioFiscal.Municipio;
                this.Estado = emisor.DomicilioFiscal.Estado;
                this.Pais = emisor.DomicilioFiscal.Pais;
                this.CodigoPostal = emisor.DomicilioFiscal.CodigoPostal;
                this.Referencia = emisor.DomicilioFiscal.Referencia;
            }
            //this.RegimenFiscal = emisor.RegimenFiscal;

            //  this.EmisorLogoUrl = comprobante.Emisor.LogoUrl;
            //this.EmisorTelefono = comprobante.Emisor.Telefono;
            //this.EmisorCorreo = comprobante.Emisor.Correo;
            //this.EmisorCifUrl = comprobante.Emisor.CifUrl;

            this.Correo = emisor.Correo;
            this.Telefono = emisor.Telefono;
            this.CifUrl = emisor.CifUrl;
            this.LogoUrl = emisor.LogoUrl;

            this.ViewTemplateId = emisor.ViewTemplateId;
        }