private static void TestCreateCfdiMultiemisor(FacturamaApiMultiemisor facturama) { var nameId = facturama.Catalogs.NameIds.ElementAt(1); //Nombre en el pdf: "Factura" var currency = facturama.Catalogs.Currencies.First(m => m.Value == "MXN"); var paymentMethod = facturama.Catalogs.PaymentMethods.First(p => p.Name == "Pago en una sola exhibición"); var paymentForm = facturama.Catalogs.PaymentForms.First(p => p.Name == "Efectivo"); var cfdiUse = facturama.Catalogs.CfdiUses("AAA010101AAA").First(); var codeProdServ = facturama.Catalogs.ProductsOrServices("desarrollo").First(); var unitCode = facturama.Catalogs.Units("pieza").First(); var decimals = (int)currency.Decimals; var regimen = facturama.Catalogs.FiscalRegimens.First(); var cfdi = new CfdiMulti { Folio = "10", NameId = nameId.Value, CfdiType = CfdiType.Ingreso, PaymentForm = paymentForm.Value, PaymentMethod = paymentMethod.Value, Currency = currency.Value, Date = DateTime.Now, ExpeditionPlace = "78180", Items = new List <Item>(), Issuer = new Issuer { FiscalRegime = regimen.Value, Name = "Emisor de Ejemplo", Rfc = "AAA010101AAA" }, Receiver = new Receiver { CfdiUse = cfdiUse.Value, Name = "Receptor de Ejemplo", Rfc = "ESO1202108R2" }, }; var price = 100.00m; var quantity = 2m; var discount = 10m; var subtotal = Math.Round(price * quantity, decimals); var item = new Item { ProductCode = codeProdServ.Value, UnitCode = unitCode.Value, Unit = "Libra", Description = "Descripción del Producto", IdentificationNumber = "010101-56", Quantity = quantity, Discount = Math.Round(discount, decimals), UnitPrice = Math.Round(price, decimals), Subtotal = subtotal, Taxes = new List <Tax> { new Tax { Name = "IVA", IsQuota = false, IsRetention = false, Rate = 0.160000m, Base = Math.Round(subtotal - discount, decimals), Total = Math.Round((subtotal - discount) * 0.160000m, decimals) } } }; var retenciones = item.Taxes?.Where(t => t.IsRetention).Sum(t => t.Total) ?? 0; var traslados = item.Taxes?.Where(t => !t.IsRetention).Sum(t => t.Total) ?? 0; item.Total = item.Subtotal - item.Discount + traslados - retenciones; cfdi.Items.Add(item); try { var cfdiCreated = facturama.Cfdis.Create(cfdi); Console.WriteLine( $"Se creó exitosamente el cfdi con el folio fiscal: {cfdiCreated.Complement.TaxStamp.Uuid}"); facturama.Cfdis.SaveXml($"factura{cfdiCreated.Complement.TaxStamp.Uuid}.xml", cfdiCreated.Id); var list = facturama.Cfdis.List("Emisor de Ejemplo"); Console.WriteLine($"Se encontraron: {list.Length} elementos en la busqueda"); list = facturama.Cfdis.List(rfc: "ESO1202108R2"); //Atributo en especifico Console.WriteLine($"Se encontraron: {list.Length} elementos en la busqueda"); facturama.Cfdis.Remove(cfdiCreated.Id); Console.WriteLine( $"Se eliminó exitosamente el cfdi con el folio fiscal: {cfdiCreated.Complement.TaxStamp.Uuid}"); } catch (FacturamaException ex) { Console.WriteLine(ex.Message); foreach (var messageDetail in ex.Model.Details) { Console.WriteLine($"{messageDetail.Key}: {string.Join(",", messageDetail.Value)}"); } } catch (Exception ex) { Console.WriteLine($"Error inesperado: ", ex.Message); } }
private static void TestCreatePaymentCfdi(FacturamaApiMultiemisor facturama) { var nameId = facturama.Catalogs.NameIds[14]; //Nombre en el pdf: "Factura" var paymentForm = facturama.Catalogs.PaymentForms.First(p => p.Name == "Efectivo"); var regimen = facturama.Catalogs.FiscalRegimens.First(); var cfdi = new CfdiMulti { NameId = nameId.Value, CfdiType = CfdiType.Pago, Folio = "100", ExpeditionPlace = "78220", Issuer = new Issuer { Rfc = "AAA010101AAA", Name = "Expresion en Software SAPI de CV", FiscalRegime = regimen.Value }, Receiver = new Receiver { Rfc = "JAR1106038RA", Name = "SinDelantal Mexico", CfdiUse = "P01" }, Complement = new Complement { Payments = new List <Payment> { new Payment { Date = "2018-04-04T00:00:00.000Z", PaymentForm = paymentForm.Value, Currency = "MXN", Amount = 1200.00m, RelatedDocuments = new List <RelatedDocument> { new RelatedDocument { Uuid = "F884C787-EEA6-4720-874D-B5048DB8F960", Folio = "100032007", Currency = "MXN", PaymentMethod = "PUE", PartialityNumber = 1, PreviousBalanceAmount = 1200.00m, AmountPaid = 1200.00m } } } } } }; try { var cfdiCreated = facturama.Cfdis.Create(cfdi); Console.WriteLine( $"Se creó exitosamente el cfdi con el folio fiscal: {cfdiCreated.Complement.TaxStamp.Uuid}"); facturama.Cfdis.SaveXml($"factura{cfdiCreated.Complement.TaxStamp.Uuid}.xml", cfdiCreated.Id); Console.WriteLine($"Se guardo existosamente la factura con el UUID: {cfdiCreated.Complement.TaxStamp.Uuid}."); facturama.Cfdis.Remove(cfdiCreated.Id); Console.WriteLine( $"Se eliminó exitosamente el cfdi con el folio fiscal: {cfdiCreated.Complement.TaxStamp.Uuid}"); } catch (FacturamaException ex) { Console.WriteLine(ex.Message); foreach (var messageDetail in ex.Model.Details) { Console.WriteLine($"{messageDetail.Key}: {string.Join(",", messageDetail.Value)}"); } } catch (Exception ex) { Console.WriteLine($"Error inesperado: ", ex.Message); } }
public void Run() { Console.WriteLine("----- Inicio del ejemplo WaybillComplementExampleMulti -----"); var cfdi = new CfdiMulti { NameId = "1", // Factura Folio = "1342", CfdiType = CfdiType.Ingreso, PaymentForm = "03", // Transferencia electrónica de fondos PaymentMethod = "PUE", // Pago en una exhibición Date = null, // Al especificar null, Facturama asigna la fecha y hora actual, de acuerdo al "ExpeditionPlace" ExpeditionPlace = "78000", // Codigo postal del la sucursal desde donde se expide el CFDI, (este debe pertenecer al catálogo de sucursales) https://apisandbox.facturama.mx/guias/perfil-fiscal#lugares-expedicion-series Items = new List <Item>(), Issuer = new Issuer { Name = "Escuela emisora del CFDI", Rfc = "EKU9003173C9", FiscalRegime = "601" }, Receiver = new Receiver { CfdiUse = "P01", Name = "José Perez Leon", Rfc = "JUFA7608212V6", Address = new Address // El nodo Address es opcional (puedes colocarlo nulo o no colocarlo). En el caso de no colcoarlo, tomará la correspondiente al RFC en el catálogo de clientes { Street = "Avenida de los pinos", ExteriorNumber = "110", InteriorNumber = "A", Neighborhood = "Las villerías", ZipCode = "78000", Municipality = "San Luis Potosí", State = "San Luis Potosí", Country = "México" } }, }; var item = new Item { ProductCode = "78101703", // Reacionado con institucion educativa UnitCode = "E48", // Servicio Unit = "Unidad de servicio", Description = "Colegiatura del mes de marzo", IdentificationNumber = "1234", // Numero de identificación interno del producto (opcional) Quantity = 1, Discount = 0, UnitPrice = 2300, Subtotal = 2300, Taxes = new [] { new Tax { Name = "IVA", IsQuota = false, IsRetention = false, Rate = 0.16m, Base = 2300, Total = 368 } }.ToList() }; var retenciones = item.Taxes?.Where(t => t.IsRetention).Sum(t => t.Total) ?? 0; var traslados = item.Taxes?.Where(t => !t.IsRetention).Sum(t => t.Total) ?? 0; item.Total = item.Subtotal - (item.Discount ?? 0) + traslados - retenciones; cfdi.Items.Add(item); // Complemento Carta Porte cfdi.Complement = new Complement { CartaPorte20 = new ComplementoCartaPorte20 { TranspInternac = TranspInternac.No, Ubicaciones = new[] { new Ubicacion { TipoUbicacion = TipoUbicacion.Origen, RFCRemitenteDestinatario = "EKU9003173C9", FechaHoraSalidaLlegada = DateTime.Now.AddHours(-6), DistanciaRecorrida = 1, Domicilio = new Domicilio { Calle = "Puebla No.1", CodigoPostal = "28239", Colonia = "0342", Estado = "COL", Municipio = "007", Localidad = "02", Pais = "MEX", } }, new Ubicacion { TipoUbicacion = TipoUbicacion.Destino, RFCRemitenteDestinatario = "RIFO990729M66", FechaHoraSalidaLlegada = DateTime.Now.AddHours(+6), DistanciaRecorrida = 100, Domicilio = new Domicilio { Calle = "Morelos No.1", CodigoPostal = "28219", Colonia = "0575", Estado = "COL", Municipio = "007", Localidad = "02", Pais = "MEX", } } }, Mercancias = new Mercancias { UnidadPeso = "KGM", Mercancia = new [] { new Mercancia { Cantidad = 1, BienesTransp = "10101500", Descripcion = "Animales vivos de granja", ClaveUnidad = "KGM", PesoEnKg = 120, } }, Autotransporte = new Autotransporte { PermSCT = "TPAF01", NumPermisoSCT = "123abc", Seguros = new Seguros { AseguraRespCivil = "Seguros SA", PolizaRespCivil = "123123" }, IdentificacionVehicular = new IdentificacionVehicular { AnioModeloVM = 1990, ConfigVehicular = "C2R3", PlacaVM = "XXX000", }, Remolques = new [] { new Remolque { SubTipoRem = "CTR001", Placa = "21132H" } } } }, FiguraTransporte = new[] { new TiposFigura { TipoFigura = "01", RFCFigura = "MISC491214B86", NombreFigura = "Juan", NumLicencia = "000001", }, new TiposFigura { TipoFigura = "02", RFCFigura = "XAMA620210DQ5", NombreFigura = "Juan Manuel Perez Lopez", PartesTransporte = new [] { new PartesTransporte { ParteTransporte = "PT01" } }, Domicilio = new Domicilio { Calle = "Morelos No.1", CodigoPostal = "28219", Colonia = "0575", Estado = "COL", Municipio = "007", Localidad = "02", Pais = "MEX", } } } } }; try { var cfdiCreated = facturama.Cfdis.Create(cfdi); Console.WriteLine( $"Se creó ex la carta porte 2.0 con el folio fiscal: {cfdiCreated.Complement.TaxStamp.Uuid}"); facturama.Cfdis.SavePdf($"factura{cfdiCreated.Complement.TaxStamp.Uuid}.pdf", cfdiCreated.Id); facturama.Cfdis.SaveXml($"factura{cfdiCreated.Complement.TaxStamp.Uuid}.xml", cfdiCreated.Id); if (facturama.Cfdis.SendByMail(cfdiCreated.Id, "*****@*****.**")) { Console.WriteLine("Se envió correctamente la carta porte 2.0"); } var cancelationStatus = facturama.Cfdis.Cancel(cfdiCreated.Id); if (cancelationStatus.Status == "canceled") { Console.WriteLine($"Se canceló exitosamente el CFDI con el folio fiscal: {cfdiCreated.Complement.TaxStamp.Uuid}"); } else if (cancelationStatus.Status == "pending") { Console.WriteLine($"El CFDI está en proceso de cancelacion, require aprobacion por parte del receptor UUID: {cfdiCreated.Complement.TaxStamp.Uuid}"); } else if (cancelationStatus.Status == "active") { Console.WriteLine($"El CFDI no pudo ser cancelado, se deben revisar docuementos relacionados on cancelar directo en el SAT UUID: {cfdiCreated.Complement.TaxStamp.Uuid}"); } else { Console.WriteLine($"Estado de cancelacin del CFDI desconocido UUID: {cfdiCreated.Complement.TaxStamp.Uuid}"); } } catch (FacturamaException ex) { Console.WriteLine(ex.Message); if (ex.Model.Details != null) { foreach (var messageDetail in ex.Model.Details) { Console.WriteLine($"{messageDetail.Key}: {string.Join(",", messageDetail.Value)}"); } } } catch (Exception ex) { Console.WriteLine($"Error inesperado: ", ex.Message); } Console.WriteLine("----- Fin del ejemplo WaybillComplementExampleMulti -----"); }
private static void TestCreatePaymentCfdi(FacturamaApiMultiemisor facturama) { var nameId = facturama.Catalogs.NameIds[14]; //Nombre en el pdf: "Factura" var paymentForm = facturama.Catalogs.PaymentForms.First(p => p.Name == "Efectivo"); var regimen = facturama.Catalogs.FiscalRegimens.First(); var cfdi = new CfdiMulti { NameId = nameId.Value, CfdiType = CfdiType.Pago, Folio = "100", ExpeditionPlace = "78220", LogoUrl = "https://www.ejemplos.co/wp-content/uploads/2015/11/Logo-Chanel.jpg", Issuer = new Issuer { Rfc = "EKU9003173C9", Name = "Kemper Software SAPI de CV", FiscalRegime = regimen.Value }, Receiver = new Receiver { Rfc = "EWE1709045U0", Name = "Escuela Wilson Esquivel", CfdiUse = "P01" }, Complement = new Complement { Payments = new List <Payment> { new Payment { Date = "2018-04-04T00:00:00.000Z", PaymentForm = paymentForm.Value, Currency = "MXN", Amount = 1200.00m, RelatedDocuments = new List <RelatedDocument> { new RelatedDocument { Uuid = "F884C787-EEA6-4720-874D-B5048DB8F960", Folio = "100032007", Currency = "MXN", PaymentMethod = "PUE", PartialityNumber = 1, PreviousBalanceAmount = 1200.00m, AmountPaid = 1200.00m } } } } } }; try { var cfdiCreated = facturama.Cfdis.Create(cfdi); Console.WriteLine( $"Se creó exitosamente el cfdi con el folio fiscal: {cfdiCreated.Complement.TaxStamp.Uuid}"); facturama.Cfdis.SaveXml($"factura{cfdiCreated.Complement.TaxStamp.Uuid}.xml", cfdiCreated.Id); Console.WriteLine($"Se guardo existosamente la factura con el UUID: {cfdiCreated.Complement.TaxStamp.Uuid}."); Console.WriteLine($"Se intenta cancelar la factura con el UUID: {cfdiCreated.Complement.TaxStamp.Uuid}."); var cancelationStatus = facturama.Cfdis.Cancel(cfdiCreated.Id); if (cancelationStatus.Status == "canceled") { Console.WriteLine($"Se canceló exitosamente el CFDI con el folio fiscal: {cfdiCreated.Complement.TaxStamp.Uuid}"); } else if (cancelationStatus.Status == "pending") { Console.WriteLine($"El CFDI está en proceso de cancelacion, require aprobacion por parte del receptor UUID: {cfdiCreated.Complement.TaxStamp.Uuid}"); } else if (cancelationStatus.Status == "active") { Console.WriteLine($"El CFDI no pudo ser cancelado, se deben revisar docuementos relacionados on cancelar directo en el SAT UUID: {cfdiCreated.Complement.TaxStamp.Uuid}"); } else { Console.WriteLine($"Estado de cancelacin del CFDI desconocido UUID: {cfdiCreated.Complement.TaxStamp.Uuid}"); } } catch (FacturamaException ex) { Console.WriteLine(ex.Message); foreach (var messageDetail in ex.Model.Details) { Console.WriteLine($"{messageDetail.Key}: {string.Join(",", messageDetail.Value)}"); } } catch (Exception ex) { Console.WriteLine($"Error inesperado: ", ex.Message); } }
private static void TestCreateCfdiMultiemisor40(FacturamaApiMultiemisor facturama) { var cfdi = new CfdiMulti { Folio = "10", NameId = "1", CfdiType = CfdiType.Ingreso, PaymentForm = "01", PaymentMethod = "PUE", Currency = "MXN", Date = null, ExpeditionPlace = "78140", LogoUrl = "https://www.ejemplos.co/wp-content/uploads/2015/11/Logo-Chanel.jpg", Exportation = "01", GlobalInformation = new GlobalInformation { Periodicity = "04", Months = "04", Year = "2022" }, Items = new List <Item>(), Issuer = new Issuer { FiscalRegime = "601", Name = "ESCUELA KEMPER URGATE", Rfc = "EKU9003173C9" }, Receiver = new Receiver { Rfc = "XAXX010101000", Name = "PUBLICO GENERAL", CfdiUse = "S01", FiscalRegime = "616", TaxZipCode = "78140" }, }; var price = 100.00m; var quantity = 2m; var discount = 10m; var subtotal = Math.Round(price * quantity, 2); var item = new Item { ProductCode = "25173108", UnitCode = "E48", Description = "GPS estandar pruebas", Quantity = 1.0M, UnitPrice = 100.0M, Subtotal = 100.00M, TaxObject = "02", Taxes = new List <Tax> { new Tax { Name = "IVA", IsQuota = false, IsRetention = false, Rate = 0.160000m, Base = Math.Round(subtotal - discount, 2), Total = Math.Round((subtotal - discount) * 0.160000m, 2) } } }; var retenciones = item.Taxes?.Where(t => t.IsRetention).Sum(t => t.Total) ?? 0; var traslados = item.Taxes?.Where(t => !t.IsRetention).Sum(t => t.Total) ?? 0; item.Total = item.Subtotal - (item.Discount ?? 0) + traslados - retenciones; cfdi.Items.Add(item); try { //var cfdiCreated = facturama.Cfdis.Create(cfdi); //Console.WriteLine($"Se creó exitosamente el cfdi con el folio fiscal: {cfdiCreated.Complement.TaxStamp.Uuid}"); var cfdiCreated = facturama.Cfdis.Create3(cfdi);// Prueba CFDI 4.0 Console.WriteLine($"Se creó exitosamente el cfdi con el folio fiscal: {cfdiCreated.Complement.TaxStamp.Uuid}"); //facturama.Cfdis.SaveXml($"factura{cfdiCreated.Complement.TaxStamp.Uuid}.xml", cfdiCreated.Id); //facturama.Cfdis.SavePdf($"factura{cfdiCreated.Complement.TaxStamp.Uuid}.pdf", cfdiCreated.Id); //var list = facturama.Cfdis.List("Emisor de Ejemplo"); //Console.WriteLine($"Se encontraron: {list.Length} elementos en la busqueda"); //list = facturama.Cfdis.List(rfc: "EWE1709045U0"); //RFC receptor en especifico //Console.WriteLine($"Se encontraron: {list.Length} elementos en la busqueda"); //var cancelationStatus = facturama.Cfdis.Cancel(cfdiCreated.Id); /* * if(cancelationStatus.Status == "canceled") * { * Console.WriteLine($"Se canceló exitosamente el CFDI con el folio fiscal: {cfdiCreated.Complement.TaxStamp.Uuid}"); * } * else if (cancelationStatus.Status == "pending") * { * Console.WriteLine($"El CFDI está en proceso de cancelacion, require aprobacion por parte del receptor UUID: {cfdiCreated.Complement.TaxStamp.Uuid}"); * } * else if (cancelationStatus.Status == "active") * { * Console.WriteLine($"El CFDI no pudo ser cancelado, se deben revisar docuementos relacionados on cancelar directo en el SAT UUID: {cfdiCreated.Complement.TaxStamp.Uuid}"); * } * else * { * Console.WriteLine($"Estado de cancelacin del CFDI desconocido UUID: {cfdiCreated.Complement.TaxStamp.Uuid}"); * } */ } catch (FacturamaException ex) { Console.WriteLine(ex.Message); foreach (var messageDetail in ex.Model.Details) { Console.WriteLine($"{messageDetail.Key}: {string.Join(",", messageDetail.Value)}"); } } catch (Exception ex) { Console.WriteLine($"Error inesperado: ", ex.Message); } }
private static void TestCreateCfdiMultiemisor(FacturamaApiMultiemisor facturama) { var nameId = facturama.Catalogs.NameIds.ElementAt(1); //Nombre en el pdf: "Factura" var currency = facturama.Catalogs.Currencies.First(m => m.Value == "MXN"); var paymentMethod = facturama.Catalogs.PaymentMethods.First(p => p.Name == "Pago en una sola exhibición"); var paymentForm = facturama.Catalogs.PaymentForms.First(p => p.Name == "Efectivo"); var cfdiUse = facturama.Catalogs.CfdiUses("EKU9003173C9").First(); var codeProdServ = facturama.Catalogs.ProductsOrServices("desarrollo").First(); var unitCode = facturama.Catalogs.Units("pieza").First(); var decimals = (int)currency.Decimals; var regimen = facturama.Catalogs.FiscalRegimens.First(); var cfdi = new CfdiMulti { Folio = "10", NameId = nameId.Value, CfdiType = CfdiType.Ingreso, PaymentForm = paymentForm.Value, PaymentMethod = paymentMethod.Value, Currency = currency.Value, Date = null, ExpeditionPlace = "78180", LogoUrl = "https://www.ejemplos.co/wp-content/uploads/2015/11/Logo-Chanel.jpg", Items = new List <Item>(), Issuer = new Issuer { FiscalRegime = regimen.Value, Name = "ESCUELA KEMPER URGATE", Rfc = "EKU9003173C9" }, Receiver = new Receiver { CfdiUse = "G03", Name = "UNIVERSIDAD ROBOTICA ESPAÑOLA", Rfc = "URE180429TM6", FiscalRegime = "601", TaxZipCode = "65000" }, }; var price = 100.00m; var quantity = 2m; var discount = 10m; var subtotal = Math.Round(price * quantity, decimals); var item = new Item { ProductCode = "25173108", UnitCode = "E48", Description = "GPS estandar pruebas", Quantity = 1.0M, UnitPrice = 100.0M, Subtotal = 100.00M, TaxObject = "02", Taxes = new List <Tax> { new Tax { Name = "IVA", IsQuota = false, IsRetention = false, Rate = 0.160000m, Base = Math.Round(subtotal - discount, decimals), Total = Math.Round((subtotal - discount) * 0.160000m, decimals) } } }; var retenciones = item.Taxes?.Where(t => t.IsRetention).Sum(t => t.Total) ?? 0; var traslados = item.Taxes?.Where(t => !t.IsRetention).Sum(t => t.Total) ?? 0; item.Total = item.Subtotal - (item.Discount ?? 0) + traslados - retenciones; cfdi.Items.Add(item); try { //var cfdiCreated = facturama.Cfdis.Create(cfdi); //Console.WriteLine($"Se creó exitosamente el cfdi con el folio fiscal: {cfdiCreated.Complement.TaxStamp.Uuid}"); var cfdiCreated = facturama.Cfdis.Create3(cfdi);// Prueba CFDI 4.0 Console.WriteLine($"Se creó exitosamente el cfdi con el folio fiscal: {cfdiCreated.Complement.TaxStamp.Uuid}"); //facturama.Cfdis.SaveXml($"factura{cfdiCreated.Complement.TaxStamp.Uuid}.xml", cfdiCreated.Id); //facturama.Cfdis.SavePdf($"factura{cfdiCreated.Complement.TaxStamp.Uuid}.pdf", cfdiCreated.Id); //var list = facturama.Cfdis.List("Emisor de Ejemplo"); //Console.WriteLine($"Se encontraron: {list.Length} elementos en la busqueda"); //list = facturama.Cfdis.List(rfc: "EWE1709045U0"); //RFC receptor en especifico //Console.WriteLine($"Se encontraron: {list.Length} elementos en la busqueda"); //var cancelationStatus = facturama.Cfdis.Cancel(cfdiCreated.Id); /* * if(cancelationStatus.Status == "canceled") * { * Console.WriteLine($"Se canceló exitosamente el CFDI con el folio fiscal: {cfdiCreated.Complement.TaxStamp.Uuid}"); * } * else if (cancelationStatus.Status == "pending") * { * Console.WriteLine($"El CFDI está en proceso de cancelacion, require aprobacion por parte del receptor UUID: {cfdiCreated.Complement.TaxStamp.Uuid}"); * } * else if (cancelationStatus.Status == "active") * { * Console.WriteLine($"El CFDI no pudo ser cancelado, se deben revisar docuementos relacionados on cancelar directo en el SAT UUID: {cfdiCreated.Complement.TaxStamp.Uuid}"); * } * else * { * Console.WriteLine($"Estado de cancelacin del CFDI desconocido UUID: {cfdiCreated.Complement.TaxStamp.Uuid}"); * } */ } catch (FacturamaException ex) { Console.WriteLine(ex.Message); foreach (var messageDetail in ex.Model.Details) { Console.WriteLine($"{messageDetail.Key}: {string.Join(",", messageDetail.Value)}"); } } catch (Exception ex) { Console.WriteLine($"Error inesperado: ", ex.Message); } }
public void Run() { Console.WriteLine("----- Inicio del ejemplo EducationalInstitutionComplementExampleMultiemisor -----"); var cfdi = new CfdiMulti { NameId = "1", // Factura - Tomado del catálogo de nombres de Facturama https://apisandbox.facturama.mx/guias/catalogos/nombres-cfdi Folio = "1242", CfdiType = CfdiType.Ingreso, LogoUrl = "https://facturama.mx/img/facturama_logo.png", // El logo debe existir en una URL PaymentForm = "03", // Transferencia electrónica de fondos PaymentMethod = "PUE", // Pago en una exhibición Date = null, // Al especificar null, Facturama asigna la fecha y hora actual, de acuerdo al "ExpeditionPlace" ExpeditionPlace = "78000", // Codigo postal del la sucursal desde donde se expide el CFDI, (este debe pertenecer al catálogo de sucursales) https://apisandbox.facturama.mx/guias/perfil-fiscal#lugares-expedicion-series Items = new List <Item>(), Issuer = new Issuer { Name = "Escuela emisora del CFDI", Rfc = "EKU9003173C9", FiscalRegime = "601" }, Receiver = new Receiver { CfdiUse = "P01", Name = "José Perez Leon", Rfc = "JUFA7608212V6", Address = new Address // El nodo Address es opcional (puedes colocarlo nulo o no colocarlo). En el caso de no colcoarlo, tomará la correspondiente al RFC en el catálogo de clientes { Street = "Avenida de los pinos", ExteriorNumber = "110", InteriorNumber = "A", Neighborhood = "Las villerías", ZipCode = "78000", Municipality = "San Luis Potosí", State = "San Luis Potosí", Country = "México" } }, }; // Complemento IEDU var itemComplement = new Facturama.Models.Complements.ItemComplement(); itemComplement.EducationalInstitution = new EducationalInstitution { AutRvoe = "234", Curp = "POAJ890718HSPMLS05", EducationLevel = "Profesional técnico", StudentsName = "Emilio Perez Lopez", PaymentRfc = "XAMA620210DQ5" }; var item = new Item { ProductCode = "86121503", // Reacionado con institucion educativa UnitCode = "E48", // Servicio Unit = "Unidad de servicio", Description = "Colegiatura del mes de marzo", IdentificationNumber = "1234", // Numero de identificación interno del producto (opcional) Quantity = 1, Discount = 0, UnitPrice = 2300, Subtotal = 2300, Taxes = new [] { new Tax { Name = "IVA", IsQuota = false, IsRetention = false, Rate = 0.16m, Base = 2300, Total = 368 } }.ToList(), Complement = itemComplement // Complemento IEDU }; var retenciones = item.Taxes?.Where(t => t.IsRetention).Sum(t => t.Total) ?? 0; var traslados = item.Taxes?.Where(t => !t.IsRetention).Sum(t => t.Total) ?? 0; item.Total = item.Subtotal - (item.Discount ?? 0) + traslados - retenciones; cfdi.Items.Add(item); try { var cfdiCreated = facturama.Cfdis.Create(cfdi); Console.WriteLine( $"Se creó exitosamente el cfdi con el folio fiscal: {cfdiCreated.Complement.TaxStamp.Uuid}"); facturama.Cfdis.SavePdf($"factura{cfdiCreated.Complement.TaxStamp.Uuid}.pdf", cfdiCreated.Id); facturama.Cfdis.SaveXml($"factura{cfdiCreated.Complement.TaxStamp.Uuid}.xml", cfdiCreated.Id); if (facturama.Cfdis.SendByMail(cfdiCreated.Id, "*****@*****.**")) { Console.WriteLine("Se envió correctamente el CFDI"); } var cancelationStatus = facturama.Cfdis.Cancel(cfdiCreated.Id); if (cancelationStatus.Status == "canceled") { Console.WriteLine($"Se canceló exitosamente el CFDI con el folio fiscal: {cfdiCreated.Complement.TaxStamp.Uuid}"); } else if (cancelationStatus.Status == "pending") { Console.WriteLine($"El CFDI está en proceso de cancelacion, require aprobacion por parte del receptor UUID: {cfdiCreated.Complement.TaxStamp.Uuid}"); } else if (cancelationStatus.Status == "active") { Console.WriteLine($"El CFDI no pudo ser cancelado, se deben revisar docuementos relacionados on cancelar directo en el SAT UUID: {cfdiCreated.Complement.TaxStamp.Uuid}"); } else { Console.WriteLine($"Estado de cancelacin del CFDI desconocido UUID: {cfdiCreated.Complement.TaxStamp.Uuid}"); } } catch (FacturamaException ex) { Console.WriteLine(ex.Message); if (ex.Model.Details != null) { foreach (var messageDetail in ex.Model.Details) { Console.WriteLine($"{messageDetail.Key}: {string.Join(",", messageDetail.Value)}"); } } } catch (Exception ex) { Console.WriteLine($"Error inesperado: ", ex.Message); } Console.WriteLine("----- Fin del ejemplo EducationalInstitutionComplementExampleMultiemisor -----"); }