public ComprobanteEditViewModel(Comprobante comprobante)
        {
            if (comprobante == null)
            {
                throw new ArgumentNullException("comprobante");
            }

            if (comprobante.Emisor != null)
            {
                this.Emisor = new EmisorDetailViewModel(comprobante.Emisor.Emisor);
            }

            if (comprobante.Receptor != null)
            {
                this.Receptor = new ReceptorDetailsViewModel(comprobante.Receptor.Receptor);
            }

            if (comprobante.Conceptos != null && comprobante.Conceptos.Count > 0)
            {
                this.Conceptos = new List <ConceptoViewModel>();
                foreach (Concepto concepto in comprobante.Conceptos)
                {
                    this.Conceptos.Add(new ConceptoViewModel(concepto));
                }
            }

            if (comprobante.Impuestos.Traslados != null && comprobante.Impuestos.Traslados.Count > 0)
            {
                this.Traslados = new List <TrasladoViewModel>();
                foreach (Traslado traslado in comprobante.Impuestos.Traslados)
                {
                    this.Traslados.Add(new TrasladoViewModel(traslado));
                }
            }

            if (comprobante.Impuestos.Retenciones != null && comprobante.Impuestos.Retenciones.Count > 0)
            {
                this.Retenciones = new List <RetencionViewModel>();
                foreach (Retencion retencion in comprobante.Impuestos.Retenciones)
                {
                    this.Retenciones.Add(new RetencionViewModel(retencion));
                }
            }

            this.ComprobanteId = comprobante.ComprobanteId;
            this.EmisorId      = comprobante.ComprobanteEmisorId;
            //this.DomicilioFiscalId = comprobante.Emisor.DomicilioFiscalId;
            //this.ExpedidoEnId = comprobante.Emisor.DomicilioFiscalId;
            this.CertificadoId = comprobante.CertificadoId;
            this.ReceptorId    = comprobante.ComprobanteReceptorId;

            this.MetodoDePago    = comprobante.MetodoDePago;
            this.LugarExpedicion = comprobante.LugarExpedicion;
            this.FormaDePago     = comprobante.FormaDePago;

            this.Serie = comprobante.Serie;
            this.Folio = comprobante.Folio;
            this.Fecha = comprobante.Fecha.ToString("yyyy-MM-ddTHH:mm:ss");

            this.TipoCambio = comprobante.TipoCambio;
            this.Moneda     = comprobante.Moneda;

            this.Banco = comprobante.ExtendedStringValue1;

            this.SubTotal = comprobante.SubTotal;
            this.Total    = comprobante.Total;

            this.TotalImpuestosRetenidos   = comprobante.Impuestos.TotalImpuestosRetenidos;
            this.TotalImpuestosTrasladados = comprobante.Impuestos.TotalImpuestosTrasladados;

            this.Notas = comprobante.ExtendedStringValue2;

            this.CadenaOriginal = comprobante.GetCadenaOriginal();
            this.Sello          = comprobante.Sello;
            Sistrategia.SAT.CFDiWebSite.Data.ApplicationDbContext DBContext = new Sistrategia.SAT.CFDiWebSite.Data.ApplicationDbContext();
            var certificado = DBContext.Certificados.Where(e => e.NumSerie == comprobante.NoCertificado).SingleOrDefault();

            this.GetSello = certificado.GetSello(this.CadenaOriginal);
        }
        public ComprobanteEditViewModel(Comprobante comprobante)
        {
            if (comprobante == null)
                throw new ArgumentNullException("comprobante");

            if (comprobante.Emisor != null) {
                this.Emisor = new EmisorDetailViewModel(comprobante.Emisor.Emisor);
            }

            if (comprobante.Receptor != null) {
                this.Receptor = new ReceptorDetailsViewModel(comprobante.Receptor.Receptor);
            }

            if (comprobante.Conceptos != null && comprobante.Conceptos.Count > 0) {
                this.Conceptos = new List<ConceptoViewModel>();
                foreach (Concepto concepto in comprobante.Conceptos) {
                    this.Conceptos.Add(new ConceptoViewModel(concepto));
                }
            }

            if (comprobante.Impuestos.Traslados != null && comprobante.Impuestos.Traslados.Count > 0) {
                this.Traslados = new List<TrasladoViewModel>();
                foreach (Traslado traslado in comprobante.Impuestos.Traslados) {
                    this.Traslados.Add(new TrasladoViewModel(traslado));
                }
            }

            if (comprobante.Impuestos.Retenciones != null && comprobante.Impuestos.Retenciones.Count > 0) {
                this.Retenciones = new List<RetencionViewModel>();
                foreach (Retencion retencion in comprobante.Impuestos.Retenciones) {
                    this.Retenciones.Add(new RetencionViewModel(retencion));
                }
            }

            this.ComprobanteId = comprobante.ComprobanteId;
            this.EmisorId = comprobante.ComprobanteEmisorId;
            //this.DomicilioFiscalId = comprobante.Emisor.DomicilioFiscalId;
            //this.ExpedidoEnId = comprobante.Emisor.DomicilioFiscalId;
            this.CertificadoId = comprobante.CertificadoId;
            this.ReceptorId = comprobante.ComprobanteReceptorId;

            this.MetodoDePago = comprobante.MetodoDePago;
            this.LugarExpedicion = comprobante.LugarExpedicion;
            this.FormaDePago = comprobante.FormaDePago;

            this.Serie = comprobante.Serie;
            this.Folio = comprobante.Folio;
            this.Fecha = comprobante.Fecha.ToString("yyyy-MM-ddTHH:mm:ss");

            this.TipoCambio = comprobante.TipoCambio;
            this.Moneda = comprobante.Moneda;

            this.Banco = comprobante.ExtendedStringValue1;

            this.SubTotal = comprobante.SubTotal;
            this.Total = comprobante.Total;

            this.TotalImpuestosRetenidos = comprobante.Impuestos.TotalImpuestosRetenidos;
            this.TotalImpuestosTrasladados = comprobante.Impuestos.TotalImpuestosTrasladados;

            this.Notas = comprobante.ExtendedStringValue2;

            this.CadenaOriginal = comprobante.GetCadenaOriginal();
            this.Sello = comprobante.Sello;
            Sistrategia.SAT.CFDiWebSite.Data.ApplicationDbContext DBContext = new Sistrategia.SAT.CFDiWebSite.Data.ApplicationDbContext();
            var certificado = DBContext.Certificados.Where(e => e.NumSerie == comprobante.NoCertificado).SingleOrDefault();
            this.GetSello = certificado.GetSello(this.CadenaOriginal);
        }