Exemple #1
0
        public static RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Branch> > GetBranch()
        {
            //string text = System.IO.File.ReadAllText(@"C:\Users\jesus.recoder.CTR\Desktop\Email\Emails.html");
            //RODHE.Tools.Email EMAIL = new RODHE.Tools.Email();
            //EMAIL.From = "*****@*****.**";
            //EMAIL.Html = text;
            //EMAIL.Password = "******";
            //EMAIL.User = "******";
            //EMAIL.To = "*****@*****.**";
            //EMAIL.Subject = "factura";
            //EMAIL.Host = "smtp.live.com";
            //EMAIL.Port = 25;
            //EMAIL.EnableSsl = true;
            //EMAIL.TimeOut = 100000;

            //RODHE.Tools.ServiceMail.SendMail(EMAIL);

            RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Branch> > list = new RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Branch> >();

            list.Object = RODHE.Tools.DataTabletoClass.ToClassInstanceCollection <RODHE.Facturacion.OBJ.Branch>(DAL.Branch.GetBranch()).ToList();
            if (list.Object.Count > 0)
            {
                list.Status = RODHE.Facturacion.OBJ.Status.sucess;
            }
            else
            {
                list.Status  = RODHE.Facturacion.OBJ.Status.failed;
                list.Message = "No se encontraron las sucursales.";
            }

            return(list);
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Branch> > result = new RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Branch> >();
                result = BLL.Branch.GetBranch();

                if (result.Status.Equals(RODHE.Facturacion.OBJ.Status.sucess))
                {
                    foreach (RODHE.Facturacion.OBJ.Branch item in result.Object)
                    {
                        sucursal.Items.Add(new ListItem(item.nombre, item.cve_sucursal.ToString()));
                    }
                }

                RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Estado> > resultEst = new RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Estado> >();
                resultEst = BLL.Estado.GetEstado();

                if (resultEst.Status.Equals(RODHE.Facturacion.OBJ.Status.sucess))
                {
                    foreach (RODHE.Facturacion.OBJ.Estado item in resultEst.Object)
                    {
                        estado.Items.Add(new ListItem(item.nombre, item.clave));
                    }
                }
            }
            catch (Exception ex)
            {
                ex.Message.ToString();
                throw;
            }
        }
 public static RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Client> > GetClient(string rfc)
 {
     RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Client> > result = new RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Client> >();
     try
     {
         return(BLL.Client.GetClient(rfc));
     }
     catch (Exception ex)
     {
         result.Status  = RODHE.Facturacion.OBJ.Status.error;
         result.Message = ex.Message;
     }
     return(result);
 }
 public static RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Ticket> > FacturarProcess(string tickets)
 {
     RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Ticket> > result = new RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Ticket> >();
     try
     {
         return(BLL.Factura.FacturarProcess(tickets));
     }
     catch (Exception ex)
     {
         result.Status  = RODHE.Facturacion.OBJ.Status.error;
         result.Message = ex.Message;
     }
     return(result);
 }
 public static RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Client> > AddClient(string rfc, string razon, string pais, string estado, string municipio
                                                                                              , string colonia, string calle, string cp, string noexterno, string nointerno, string correo)
 {
     RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Client> > result = new RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Client> >();
     try
     {
         return(BLL.Client.AddClient(rfc, razon, pais, estado, municipio, colonia, calle, cp, noexterno, nointerno, correo));
     }
     catch (Exception ex)
     {
         result.Status  = RODHE.Facturacion.OBJ.Status.error;
         result.Message = ex.Message;
     }
     return(result);
 }
 public static RODHE.Facturacion.OBJ.Control <List <string> > Facturar(string sucursal, string rfc, string razon, string pais, string estado,
                                                                       string municipio, string colonia, string calle, string cp, string noexterno, string nointerno, string correo, string tickets)
 {
     RODHE.Facturacion.OBJ.Control <List <string> > result = new RODHE.Facturacion.OBJ.Control <List <string> >();
     try
     {
         return(BLL.Factura.Facturar(sucursal, rfc, razon, pais, estado, municipio, colonia, calle, cp, noexterno, correo, tickets));
     }
     catch (Exception ex)
     {
         result.Status  = RODHE.Facturacion.OBJ.Status.error;
         result.Message = ex.Message;
     }
     return(result);
 }
 public static RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Ticket> > FacturarProcess(string tickets)
 {
     RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Ticket> > list = new RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Ticket> >();
     try
     {
         list.Object = RODHE.Tools.DataTabletoClass.ToClassInstanceCollection <RODHE.Facturacion.OBJ.Ticket>(DAL.Ticket.GetTickets(tickets)).ToList();
         list.Status = RODHE.Facturacion.OBJ.Status.sucess;
     }
     catch (Exception ex)
     {
         list.Status  = RODHE.Facturacion.OBJ.Status.error;
         list.Message = "No se logró facturar,intente más tarde." + ex.Message;
     }
     return(list);
 }
Exemple #8
0
        public static RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Estado> > GetEstado()
        {
            RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Estado> > list = new RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Estado> >();

            list.Object = RODHE.Tools.DataTabletoClass.ToClassInstanceCollection <RODHE.Facturacion.OBJ.Estado>(DAL.Estado.GetEstado()).ToList();
            if (list.Object.Count > 0)
            {
                list.Status = RODHE.Facturacion.OBJ.Status.sucess;
            }
            else
            {
                list.Status  = RODHE.Facturacion.OBJ.Status.failed;
                list.Message = "No se encontraron los Estados.";
            }

            return(list);
        }
Exemple #9
0
        public static RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Client> > AddClient(string rfc, string razon, string pais, string estado, string municipio
                                                                                                     , string colonia, string calle, string cp, string noexterno, string nointerno, string correo)
        {
            RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Client> > list = new RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Client> >();
            try
            {
                DAL.Client.AddClient(rfc, razon, pais, estado, municipio, colonia, calle, cp, noexterno, nointerno, correo);

                list.Status  = RODHE.Facturacion.OBJ.Status.sucess;
                list.Message = "Se guardaron correctamente sus datos.";
            }
            catch (Exception ex)
            {
                list.Status  = RODHE.Facturacion.OBJ.Status.error;
                list.Message = ex.Message;
            }
            return(list);
        }
        public static RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.TicketCliente> > GetTicketCliente(string rfc, string tickets)
        {
            RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.TicketCliente> > list = new RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.TicketCliente> >();
            try
            {
                RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Client> > listClient  = new RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Client> >();
                RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Ticket> > listTickets = new RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Ticket> >();
                listTickets = GetTickets(tickets);
                if (listTickets.Status.Equals(RODHE.Facturacion.OBJ.Status.sucess))
                {
                    RODHE.Facturacion.OBJ.Ticket tck = listTickets.Object.ToList <RODHE.Facturacion.OBJ.Ticket>().FirstOrDefault();
                    listClient = BLL.Client.GetClient(rfc);
                    RODHE.Facturacion.OBJ.TicketCliente        ticketcliente     = new RODHE.Facturacion.OBJ.TicketCliente();
                    List <RODHE.Facturacion.OBJ.TicketCliente> Listticketcliente = new List <RODHE.Facturacion.OBJ.TicketCliente>();
                    ticketcliente.ticket = listTickets.Object.ToList <RODHE.Facturacion.OBJ.Ticket>();
                    ticketcliente.client = (listClient.Object.ToList <RODHE.Facturacion.OBJ.Client>().FirstOrDefault() == null ? new RODHE.Facturacion.OBJ.Client() : listClient.Object.ToList <RODHE.Facturacion.OBJ.Client>().FirstOrDefault());
                    Listticketcliente.Add(ticketcliente);

                    IList <RODHE.Facturacion.OBJ.Ticket> ilisTCK = listTickets.Object.AsEnumerable <RODHE.Facturacion.OBJ.Ticket>().ToList();
                    string table = RODHE.Tools.DataTabletoClass.GetMyTableRows(ilisTCK, x => x.nombre, x => x.cantidad, x => String.Format("{0:C}", x.total));

                    list.Object = Listticketcliente;
                    list.Status = RODHE.Facturacion.OBJ.Status.sucess;
                    list.ID     = tickets;
                    list.Body   = table;
                }
                else
                {
                    list.Status  = RODHE.Facturacion.OBJ.Status.failed;
                    list.Message = listTickets.Message;
                }
            }
            catch (Exception ex)
            {
                list.Status  = RODHE.Facturacion.OBJ.Status.error;
                list.Message = ex.Message;
            }
            return(list);
        }
 public static RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Ticket> > GetTicket(string folio)
 {
     RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Ticket> > list = new RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Ticket> >();
     try
     {
         list.Object = RODHE.Tools.DataTabletoClass.ToClassInstanceCollection <RODHE.Facturacion.OBJ.Ticket>(DAL.Ticket.GetTicket(folio)).ToList();
         if (list.Object.Count > 0)
         {
             list.Status = RODHE.Facturacion.OBJ.Status.sucess;
         }
         else
         {
             list.Status  = RODHE.Facturacion.OBJ.Status.failed;
             list.Message = "El ticket no existe.";
         }
     }
     catch (Exception ex)
     {
         list.Status  = RODHE.Facturacion.OBJ.Status.error;
         list.Message = ex.Message;
     }
     return(list);
 }
Exemple #12
0
 public static RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Client> > GetClient(string rfc)
 {
     RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Client> > list = new RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.Client> >();
     try
     {
         list.Object = RODHE.Tools.DataTabletoClass.ToClassInstanceCollection <RODHE.Facturacion.OBJ.Client>(DAL.Client.GetClient(rfc)).ToList();
         if (list.Object.Count > 0)
         {
             list.Status = RODHE.Facturacion.OBJ.Status.sucess;
         }
         else
         {
             list.Status  = RODHE.Facturacion.OBJ.Status.failed;
             list.Message = "No se encontró el cliente.";
         }
     }
     catch (Exception ex)
     {
         list.Status  = RODHE.Facturacion.OBJ.Status.error;
         list.Message = ex.Message;
     }
     return(list);
 }
        public static RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.InformationTicket> > GetInformationTicket(string numberTicket, string store, string dateTicket, string totalTicket, string rfc)
        {
            RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.InformationTicket> > list = new RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.InformationTicket> >();
            try
            {
                list.Object = RODHE.Tools.DataTabletoClass.ToClassInstanceCollection <RODHE.Facturacion.OBJ.InformationTicket>(DAL.Ticket.GetInformationTicket(numberTicket, store, dateTicket, totalTicket)).ToList();
                if (list.Object.Count > 0)
                {
                    list.Status = RODHE.Facturacion.OBJ.Status.sucess;
                    //Proceso para agregar ticket a la tabla
                    RODHE.Facturacion.OBJ.InformationTicket tck = list.Object.ToList <RODHE.Facturacion.OBJ.InformationTicket>().FirstOrDefault();
                    if (tck.facturado.Equals(0))
                    {
                        if ((DateTime.Today.AddDays(-(Convert.ToInt32(ConfigurationManager.AppSettings["daysfac"]))) <= tck.fchVta))
                        {
                            IList <RODHE.Facturacion.OBJ.InformationTicket> ilisTCK = list.Object.AsEnumerable <RODHE.Facturacion.OBJ.InformationTicket>().ToList();
                            string table = RODHE.Tools.DataTabletoClass.GetMyTableRows(ilisTCK, x => x.cve_ticket, x => x.fchVta, x => String.Format("{0:C}", x.total), x => "<button onclick=\"remove(this)\" type=\"button\" class=\"btn btn-default\" aria-label=\"Left Align\"><span class=\"fa fa-trash\" aria-hidden=\"true\"></span></button>");

                            list.Status = RODHE.Facturacion.OBJ.Status.sucess;
                            list.Body   = table;
                        }
                        else
                        {
                            list.Status  = RODHE.Facturacion.OBJ.Status.failed;
                            list.Message = "El ticket no se puede facturar ya que la fecha es mayor a " + ConfigurationManager.AppSettings["daysfac"].ToString() + " días.";
                        }
                    }
                    else
                    {
                        List <RODHE.Facturacion.OBJ.InformationFacturacion> listFacturados = new List <RODHE.Facturacion.OBJ.InformationFacturacion>();
                        listFacturados = RODHE.Tools.DataTabletoClass.ToClassInstanceCollection <RODHE.Facturacion.OBJ.InformationFacturacion>(DAL.Ticket.GetFacturadosInfo(rfc, numberTicket)).ToList();
                        foreach (var item in listFacturados)
                        {
                            if (item.tipo == "productos")
                            {
                                list.Status       = RODHE.Facturacion.OBJ.Status.sucess;
                                list.Message      = "El ticket ya puede ser descargado.";
                                list.BodyProducto = item.UUID;
                                list.IDProducto   = item.folio;
                            }
                            else if (item.tipo == "servicios")
                            {
                                list.Status       = RODHE.Facturacion.OBJ.Status.sucess;
                                list.Message      = "El ticket ya puede ser descargado.";
                                list.BodyServicio = item.UUID;
                                list.IDServicio   = item.folio;
                            }
                            else
                            {
                                list.Status  = RODHE.Facturacion.OBJ.Status.failed;
                                list.Message = "El ticket ya fue facturado.";
                            }
                        }
                    }
                }
                else
                {
                    list.Status  = RODHE.Facturacion.OBJ.Status.failed;
                    list.Message = "El ticket no existe." + numberTicket.ToString() + "" + store.ToString() + "" + dateTicket.ToString() + "" + totalTicket.ToString();
                }
            }
            catch (Exception ex)
            {
                list.Status  = RODHE.Facturacion.OBJ.Status.error;
                list.Message = ex.Message;
            }
            return(list);
        }
 public static RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.InformationTicket> > GetInformationTicket(string numberTicket, string store, string dateTicket, string totalTicket, string rfc)
 {
     RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.InformationTicket> > result = new RODHE.Facturacion.OBJ.Control <List <RODHE.Facturacion.OBJ.InformationTicket> >();
     try
     {
         return(BLL.Ticket.GetInformationTicket(numberTicket, store, dateTicket, totalTicket, rfc));
     }
     catch (Exception ex)
     {
         result.Status  = RODHE.Facturacion.OBJ.Status.error;
         result.Message = ex.Message;
     }
     return(result);
 }
        public static RODHE.Facturacion.OBJ.Control <List <string> > Facturar(string cliente, string rfc, string razon, string pais, string estado
                                                                              , string municipio, string colonia, string calle, string cp, string noexterno, string correo, string tickets)
        {
            RODHE.Facturacion.OBJ.Control <List <string> > result = new RODHE.Facturacion.OBJ.Control <List <string> >();
            result.Object = new List <string>();
            try
            {
                List <RODHE.Facturacion.OBJ.Ticket> listTickets = new List <RODHE.Facturacion.OBJ.Ticket>();
                List <RODHE.Facturacion.OBJ.Client> listClient  = new List <RODHE.Facturacion.OBJ.Client>();
                listTickets = RODHE.Tools.DataTabletoClass.ToClassInstanceCollection <RODHE.Facturacion.OBJ.Ticket>(DAL.Ticket.GetTickets(tickets)).ToList();
                listClient  = RODHE.Tools.DataTabletoClass.ToClassInstanceCollection <RODHE.Facturacion.OBJ.Client>(DAL.Client.GetClient(rfc)).ToList();

                Object[] seguridad           = new Object[2];
                Object[] comprobanteProducto = new Object[9];
                Object[] comprobanteServicio = new Object[9];
                Object[] emisor               = new Object[1];
                Object[] receptor             = new Object[12];
                Object[] impuestostrasladados = new Object[1];
                Object[] impuestosretenidos   = new Object[1];
                Object[] impuestot1           = new Object[3];
                Object[] impuestor1           = new Object[2];

                /********** Comienza Object Seguridad **********/
                seguridad[0] = ConfigurationManager.AppSettings["userTimbrado"].ToString();
                seguridad[1] = RODHE.Tools.MD5pass.encrypt(ConfigurationManager.AppSettings["cipherpass"].ToString());

                /********** Comienza Object Comprobante **********/
                double descuentoProducto = 0;
                double descuentoServicio = 0;
                String formaPagoProducto = String.Empty;
                String formaPagoServicio = String.Empty;
                listTickets.ForEach(x =>
                {
                    if (x.isService == 0)
                    {
                        descuentoProducto += x.descuentoQuantity;
                    }
                    else
                    {
                        descuentoServicio += x.descuentoQuantity;
                    }
                });



                listTickets.OrderBy(x => x.totalItemsIVA).ToList().ForEach(x =>
                {
                    if (x.isService == 0)
                    {
                        if (!formaPagoProducto.Contains(GetMethodPaySAT(x.formaPago)))
                        {
                            formaPagoProducto += GetMethodPaySAT(x.formaPago) + ",";
                        }
                    }
                    else
                    {
                        if (!formaPagoServicio.Contains(GetMethodPaySAT(x.formaPago)))
                        {
                            formaPagoServicio += GetMethodPaySAT(x.formaPago) + ",";
                        }
                    }
                });


                //Object Comprobante Producto
                comprobanteProducto[0] = DateTime.Now.ToString("yyyy-MM-ddThh:mm:ss");
                comprobanteProducto[1] = "30 dias";
                comprobanteProducto[2] = descuentoProducto;
                if ((double)comprobanteProducto[2] > 0)
                {
                    comprobanteProducto[3] = "Descuento producto";
                }
                else
                {
                    comprobanteProducto[3] = "";
                }
                comprobanteProducto[4] = formaPagoProducto.TrimEnd(',');
                comprobanteProducto[5] = "1";
                comprobanteProducto[6] = "MXN";
                comprobanteProducto[7] = "CDMX";
                comprobanteProducto[8] = "";
                //Object Comprobante Servicio
                comprobanteServicio[0] = DateTime.Now.ToString("yyyy-MM-ddThh:mm:ss");
                comprobanteServicio[1] = "30 dias";
                comprobanteServicio[2] = descuentoServicio;
                if ((double)comprobanteServicio[2] > 0)
                {
                    comprobanteServicio[3] = "Descuento servicio";
                }
                else
                {
                    comprobanteServicio[3] = "";
                }
                comprobanteServicio[4] = formaPagoServicio.TrimEnd(',');
                comprobanteServicio[5] = "1";
                comprobanteServicio[6] = "MXN";
                comprobanteServicio[7] = "CDMX";
                comprobanteServicio[8] = "";

                /********** Comienza Object Receptor **********/
                foreach (var element in listClient)
                {
                    receptor[0]  = element.rfc;
                    receptor[1]  = element.razonsocial;
                    receptor[2]  = element.calle;
                    receptor[3]  = element.noexterno;
                    receptor[4]  = element.nointerno;
                    receptor[5]  = element.colonia;
                    receptor[6]  = element.municipio;
                    receptor[7]  = element.municipio;
                    receptor[8]  = "";
                    receptor[9]  = element.estado;
                    receptor[10] = element.pais;
                    receptor[11] = element.cp;
                }

                /********** Comienza Object Emisor **********/
                listTickets.ForEach(x => emisor[0] = x.idsucursal);

                /********** Comienza Object Conceptos **********/
                int      tamanoProducto        = listTickets.Where(x => x.isService == 0).ToList().Count();
                int      tamanoServicio        = listTickets.Where(x => x.isService == 1).ToList().Count();
                Object[] conceptoFinalProducto = new Object[tamanoProducto];
                Object[] conceptoFinalServicio = new Object[tamanoServicio];
                int      counP  = 0;
                int      countS = 0;
                //Object Conceptos Producto
                var productos = listTickets.Where(x => x.isService == 0);
                foreach (var ticketsList in productos)
                {
                    Object[] conceptosProducto = new Object[6];
                    conceptosProducto[0]         = ticketsList.cantidad;
                    conceptosProducto[1]         = "Producto";
                    conceptosProducto[2]         = ticketsList.item_id;
                    conceptosProducto[3]         = ticketsList.nombre;
                    conceptosProducto[4]         = ticketsList.totalitem;
                    conceptosProducto[5]         = ticketsList.totalSinIVA;
                    conceptoFinalProducto[counP] = conceptosProducto;
                    counP = counP + 1;
                }
                //Object Conceptos Servicio
                var servicios = listTickets.Where(x => x.isService == 1);
                foreach (var ticketsList in servicios)
                {
                    Object[] conceptosServicio = new Object[6];
                    conceptosServicio[0]          = ticketsList.cantidad;
                    conceptosServicio[1]          = "Servicio";
                    conceptosServicio[2]          = ticketsList.item_id;
                    conceptosServicio[3]          = ticketsList.nombre;
                    conceptosServicio[4]          = ticketsList.totalitem;
                    conceptosServicio[5]          = ticketsList.totalSinIVA;
                    conceptoFinalServicio[countS] = conceptosServicio;
                    countS = countS + 1;
                }

                /********** Comienza Object Impuestos **********/
                Object[] impuestoFinalProducto = new Object[tamanoProducto];
                Object[] impuestoFinalServicio = new Object[tamanoServicio];
                counP  = 0;
                countS = 0;
                //Object Impuestos Producto
                foreach (var impuestosList in productos)
                {
                    Object[] impuestosProducto = new Object[3];
                    impuestosProducto[0]         = "IVA";
                    impuestosProducto[1]         = impuestosList.IVA;
                    impuestosProducto[2]         = impuestosList.totalItemsIVA;
                    impuestoFinalProducto[counP] = impuestosProducto;
                    counP = counP + 1;
                }
                //Object Impuestos Servicio
                foreach (var impuestosList in servicios)
                {
                    Object[] impuestosServicio = new Object[3];
                    impuestosServicio[0]          = "IVA";
                    impuestosServicio[1]          = impuestosList.IVA;
                    impuestosServicio[2]          = impuestosList.totalItemsIVA;
                    impuestoFinalServicio[countS] = impuestosServicio;
                    countS = countS + 1;
                }

                /********** Comienzan Peticiones al Web Service **********/
                //Si hay productos hacemos factura de otro modo vamos al caso de facturar un servicio
                if (conceptoFinalProducto.Length > 0)
                {
                    ServiceFacturacion.WebServiceCFDI servicio = new ServiceFacturacion.WebServiceCFDI();
                    servicio.Url     = ConfigurationManager.AppSettings["UrlCFDI"].ToString();
                    servicio.Timeout = Convert.ToInt32(ConfigurationManager.AppSettings["UrlCFDItimeout"].ToString());
                    //Solicita Factura PRODUCTO
                    Object[] respuestaProducto = servicio.timbrarv1(seguridad, comprobanteProducto, emisor, receptor, conceptoFinalProducto, impuestoFinalProducto, null);
                    if ((int)respuestaProducto[0] == 1)
                    {
                        byte[]      xml = Convert.FromBase64String(respuestaProducto[1].ToString());
                        XmlDocument doc = new XmlDocument();
                        doc.LoadXml(System.Text.UTF8Encoding.UTF8.GetString(xml));
                        var nsManager = new XmlNamespaceManager(doc.NameTable);
                        nsManager.AddNamespace("cfdi", "http://www.sat.gob.mx/cfd/3");
                        nsManager.AddNamespace("tfd", "http://www.sat.gob.mx/TimbreFiscalDigital");
                        String   UUIDProducto         = doc.SelectSingleNode("/cfdi:Comprobante/cfdi:Complemento/tfd:TimbreFiscalDigital/@UUID", nsManager).Value;
                        String   folioProducto        = doc.SelectSingleNode("/cfdi:Comprobante/@folio", nsManager).Value;
                        DateTime fechaFacturaProducto = Convert.ToDateTime(doc.SelectSingleNode("/cfdi:Comprobante/@fecha", nsManager).Value);
                        //Insertar información de factura
                        List <string> listcve = listTickets.Select(x => x.cve_ticket).ToList();
                        foreach (var item in listcve.GroupBy(x => x))
                        {
                            DAL.Ticket.AddTicketFacturado(folioProducto, item.Key, fechaFacturaProducto, UUIDProducto, rfc, "productos");
                        }
                        //Guardar archivo de facturas en Azure
                        string clientestorage = ConfigurationManager.AppSettings["clientestorage"].ToString();
                        BLL.AzureStorage.StoreXml(doc, clientestorage + UUIDProducto);
                        BLL.AzureStorage.StorePdf(respuestaProducto[2].ToString(), clientestorage + UUIDProducto);

                        result.Status       = RODHE.Facturacion.OBJ.Status.sucess;
                        result.Message      = "Facturación realizada correctamente.";
                        result.BodyProducto = UUIDProducto;
                        result.IDProducto   = UUIDProducto;
                    }
                    else
                    {
                        result.Status       = RODHE.Facturacion.OBJ.Status.error;
                        result.Message      = respuestaProducto[2].ToString();
                        result.BodyProducto = null;
                        result.IDProducto   = null;
                    }
                }
                else
                {
                    result.BodyProducto = null;
                    result.IDProducto   = null;
                }
                //Si existe algún servicio hacemos la factura de otra forma no se realiza ninguna acción
                if (conceptoFinalServicio.Length > 0)
                {
                    ServiceFacturacion.WebServiceCFDI servicio = new ServiceFacturacion.WebServiceCFDI();
                    servicio.Url     = ConfigurationManager.AppSettings["UrlCFDI"].ToString();
                    servicio.Timeout = Convert.ToInt32(ConfigurationManager.AppSettings["UrlCFDItimeout"].ToString());
                    //Solicita Factura PRODUCTO
                    Object[] respuestaServicio = servicio.timbrarv1(seguridad, comprobanteServicio, emisor, receptor, conceptoFinalServicio, impuestoFinalServicio, null);
                    if ((int)respuestaServicio[0] == 1)
                    {
                        byte[]      xml = Convert.FromBase64String(respuestaServicio[1].ToString());
                        XmlDocument doc = new XmlDocument();
                        doc.LoadXml(System.Text.UTF8Encoding.UTF8.GetString(xml));
                        var nsManager = new XmlNamespaceManager(doc.NameTable);
                        nsManager.AddNamespace("cfdi", "http://www.sat.gob.mx/cfd/3");
                        nsManager.AddNamespace("tfd", "http://www.sat.gob.mx/TimbreFiscalDigital");
                        String   UUIDServicio         = doc.SelectSingleNode("/cfdi:Comprobante/cfdi:Complemento/tfd:TimbreFiscalDigital/@UUID", nsManager).Value;
                        String   folioServicio        = doc.SelectSingleNode("/cfdi:Comprobante/@folio", nsManager).Value;
                        DateTime fechaFacturaServicio = Convert.ToDateTime(doc.SelectSingleNode("/cfdi:Comprobante/@fecha", nsManager).Value);
                        //Insertar información de factura
                        List <string> listcve = listTickets.Select(x => x.cve_ticket).ToList();
                        foreach (var item in listcve.GroupBy(x => x))
                        {
                            DAL.Ticket.AddTicketFacturado(folioServicio, item.Key, fechaFacturaServicio, UUIDServicio, rfc, "servicios");
                        }
                        //Guardar archivo de facturas en Azure
                        string clientestorage = ConfigurationManager.AppSettings["clientestorage"].ToString();
                        BLL.AzureStorage.StoreXml(doc, clientestorage + UUIDServicio);
                        BLL.AzureStorage.StorePdf(respuestaServicio[2].ToString(), clientestorage + UUIDServicio);

                        result.Status       = RODHE.Facturacion.OBJ.Status.sucess;
                        result.Message      = "Facturación realizada correctamente.";
                        result.BodyServicio = UUIDServicio;
                        result.IDServicio   = UUIDServicio;
                    }
                    else
                    {
                        result.Status       = RODHE.Facturacion.OBJ.Status.error;
                        result.Message      = respuestaServicio[2].ToString();
                        result.BodyServicio = null;
                        result.IDServicio   = null;
                    }
                }
                else
                {
                    result.BodyServicio = null;
                    result.IDServicio   = null;
                }
            }
            catch (Exception ex)
            {
                result.Status  = RODHE.Facturacion.OBJ.Status.error;
                result.Message = "No se logro facturar, intente más tarde." + ex.Message;
            }
            return(result);
        }