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); }
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); }
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); }
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); }