Exemplo n.º 1
0
        private ErrorNegocio ValidarDatosTicket(ETicket ticket)
        {
            ErrorNegocio retorno = null;

            if (ticket.Encabezado.IdDoc.FchEmis.Date >= DateTime.Now.Date)
            {
                retorno = new ErrorNegocio()
                {
                    Descripcion = "La fecha de emisión no puede ser mayor a la fecha actual"
                };
                return(retorno);
            }

            if (String.IsNullOrEmpty(ticket.Encabezado.Emisor.RUCEmisor) || ticket.Encabezado.Emisor.RUCEmisor.Length < 4)
            {
                retorno = new ErrorNegocio()
                {
                    Descripcion = "Ruc inválido " + ticket.Encabezado.Emisor.RUCEmisor
                };
                return(retorno);
            }

            return(retorno);
        }
Exemplo n.º 2
0
        public ResultGuardarTicket GuardarSobreCFEXML(string sobreCFE, string destinatarioEmail, string adenda)
        {
            string ruc = "";

            DataAccess.DalcCFE db   = new DataAccess.DalcCFE();
            long        recepcionId = long.MinValue;
            XmlDocument xmlDoc      = new XmlDocument();

            xmlDoc.LoadXml(sobreCFE);
            ResultGuardarTicket retorno = new ResultGuardarTicket();
            ErrorNegocio        error   = null;

            //Convierto el XML en una entidad
            ETicket ticket = new ETicket();

            ticket.Encabezado  = this.ConvertToEncabezado(xmlDoc);
            ticket.Detalle     = this.ConvertToDetalle(xmlDoc);
            ticket.Referencias = this.ConvertToReferencia(xmlDoc);

            try
            {
                //## INICIO - Aplico las validaciones de negocio ##
                error = this.ValidarDatosTicket(ticket);

                if (error != null)
                {
                    retorno.Error = error;
                    return(retorno);
                }
                //## FIN - Aplico las validaciones de negocio ##

                using (TransactionScope scope = new TransactionScope())
                {
                    //Guardo la Recepcion
                    recepcionId = db.GuardarRecepcion(destinatarioEmail, "N");

                    //Guardo el encabezado IdDoc
                    db.GuardarEncabezadoIdDoc(recepcionId, null, recepcionId, ticket.Encabezado.Emisor.CdgDGISucur, ticket.Encabezado.IdDoc.FmaPago,
                                              ticket.Encabezado.IdDoc.FchEmis, 1, null, null, 0, ticket.Encabezado.IdDoc.FchEmis, null, null, ticket.Encabezado.IdDoc.TipoCFE,
                                              null, null, null, null, null);

                    if (ticket.Encabezado.Receptor.TipoDocRecep.Equals(3))
                    {
                        ruc = ticket.Encabezado.Receptor.DocRecep;
                    }
                    else
                    {
                        ruc = ticket.Encabezado.Receptor.DocRecepExt;
                    }

                    //Guardo el Receptor
                    db.GuardarEncabezadoReceptor(recepcionId, null, recepcionId, ruc, ticket.Encabezado.Receptor.TipoDocRecep, ticket.Encabezado.Receptor.CodPaisRecep,
                                                 ruc, ticket.Encabezado.Receptor.RznSocRecep, ticket.Encabezado.Receptor.DirRecep, ticket.Encabezado.Receptor.CiudadRecep, String.Empty, String.Empty, null, null, null, null);

                    //Guardo los totales
                    db.GuardarEncabezadoTotales(recepcionId, null, ticket.Encabezado.Totales.TpoMoneda, ticket.Encabezado.Totales.TpoCambio, ticket.Encabezado.Totales.MntNoGrv, 0, 0, 0, ticket.Encabezado.Totales.MntNetoIvaTasaMin,
                                                ticket.Encabezado.Totales.MntNetoIVATasaBasica, 0, null, ticket.Encabezado.Totales.IVATasaMin, ticket.Encabezado.Totales.IVATasaBasica, ticket.Encabezado.Totales.MntIVATasaMin, ticket.Encabezado.Totales.MntIVATasaBasica,
                                                0, ticket.Encabezado.Totales.MntTotal, 0, ticket.Encabezado.Totales.CantLinDet, 0, ticket.Encabezado.Totales.MntPagar, 0, 0, 0);

                    //Guardo el detalle de la factura
                    if (ticket.Detalle != null && ticket.Detalle.Any())
                    {
                        foreach (Item item in ticket.Detalle)
                        {
                            db.GuardarDetalle(recepcionId, null, item.NroLinDet, null, null, item.IndFact, item.NomItem, null, item.Cantidad, item.UniMed, item.PrecioUnitario, 0, 0, 0, 0, item.MontoItem, null);
                        }
                    }

                    //Guardo la referencia
                    if (ticket.Referencias != null && ticket.Referencias.Any())
                    {
                        foreach (Referencia r in ticket.Referencias)
                        {
                            db.GuardarReferencia(recepcionId, null, r.NroLinRef, 1, null, r.TpoDocRef, r.Serie, r.NroCFERef, null, null, r.FechaCFEref);
                        }
                    }

                    //Guardo adenda
                    db.GuardarAgenda(recepcionId, adenda);

                    //Asigno la variable para retornarla
                    retorno.RecepcionId = recepcionId;

                    scope.Complete();
                }
            }
            catch (Exception ex)
            {
                throw;
            }

            return(retorno);
        }