From d72d6adb413763efe57fddbd52ad784a6dcfb85d Mon Sep 17 00:00:00 2001 From: Jose Antonio Medina Date: Mon, 19 Jan 2026 14:52:38 -0600 Subject: [PATCH 1/2] first commit --- .../CreditNoteInvoiceValueForm.Designer.cs | 39 + .../CreditNoteInvoiceValueForm.cs | 20 + .../DownloadRequestsForm.Designer.cs | 188 ++ .../DownloadRequestsForm.cs | 259 ++ .../DownloadRequestsForm.resx | 120 + .../DownloadRulesForm.Designer.cs | 131 + .../DownloadRulesForm.cs | 183 ++ .../DownloadRulesForm.resx | 120 + .../EgressInvoiceReferenceForm.Designer.cs | 103 + .../EgressInvoiceReferenceForm.cs | 238 ++ .../EgressInvoiceReferenceForm.resx | 120 + .../EgressInvoiceValueForm.Designer.cs | 103 + .../EgressInvoiceValueForm.cs | 355 +++ .../EgressInvoiceValueForm.resx | 120 + .../EmployeeForm.Designer.cs | 103 + .../EmployeeForm.cs | 133 + .../EmployeeForm.resx | 120 + .../EmployerForm.Designer.cs | 103 + .../EmployerForm.cs | 101 + .../EmployerForm.resx | 120 + .../FiscalApi.Samples.NetFramework.csproj | 157 +- .../Form1.Designer.cs | 843 +++--- FiscalApi.Samples.NetFramework/Form1.cs | 246 +- .../IncomeInvoiceReferenceForm.Designer.cs | 355 +++ .../IncomeInvoiceReferenceForm.cs | 1493 ++++++++++ .../IncomeInvoiceReferenceForm.resx | 120 + .../IncomeInvoiceValueForm.Designer.cs | 361 +++ .../IncomeInvoiceValueForm.cs | 2400 ++++++++++++++++ .../IncomeInvoiceValueForm.resx | 120 + .../InvoiceReferenceForm.Designer.cs | 206 ++ .../InvoiceReferenceForm.cs | 187 ++ .../InvoiceReferenceForm.resx | 120 + .../InvoiceValueForm.Designer.cs | 206 ++ .../InvoiceValueForm.cs | 786 +++++ .../InvoiceValueForm.resx | 120 + ...alTaxesComplementReferenceForm.Designer.cs | 100 + .../LocalTaxesComplementReferenceForm.cs | 478 ++++ .../LocalTaxesComplementReferenceForm.resx | 120 + .../LocalTaxesComplementValueForm.Designer.cs | 100 + .../LocalTaxesComplementValueForm.cs | 570 ++++ .../LocalTaxesComplementValueForm.resx | 120 + ...ComplementInvoiceReferenceForm.Designer.cs | 308 ++ .../PaymentComplementInvoiceReferenceForm.cs | 1997 +++++++++++++ ...PaymentComplementInvoiceReferenceForm.resx | 120 + ...mentComplementInvoiceValueForm.Designer.cs | 309 ++ .../PaymentComplementInvoiceValueForm.cs | 2532 +++++++++++++++++ .../PaymentComplementInvoiceValueForm.resx | 120 + ...PayrollComplementReferenceForm.Designer.cs | 231 ++ .../PayrollComplementReferenceForm.cs | 1448 ++++++++++ .../PayrollComplementReferenceForm.resx | 120 + .../PayrollComplementValueForm.Designer.cs | 230 ++ .../PayrollComplementValueForm.cs | 2117 ++++++++++++++ .../PayrollComplementValueForm.resx | 120 + FiscalApi.Samples.NetFramework/StringUtils.cs | 12 + 54 files changed, 21262 insertions(+), 389 deletions(-) create mode 100644 FiscalApi.Samples.NetFramework/CreditNoteInvoiceValueForm.Designer.cs create mode 100644 FiscalApi.Samples.NetFramework/CreditNoteInvoiceValueForm.cs create mode 100644 FiscalApi.Samples.NetFramework/DownloadRequestsForm.Designer.cs create mode 100644 FiscalApi.Samples.NetFramework/DownloadRequestsForm.cs create mode 100644 FiscalApi.Samples.NetFramework/DownloadRequestsForm.resx create mode 100644 FiscalApi.Samples.NetFramework/DownloadRulesForm.Designer.cs create mode 100644 FiscalApi.Samples.NetFramework/DownloadRulesForm.cs create mode 100644 FiscalApi.Samples.NetFramework/DownloadRulesForm.resx create mode 100644 FiscalApi.Samples.NetFramework/EgressInvoiceReferenceForm.Designer.cs create mode 100644 FiscalApi.Samples.NetFramework/EgressInvoiceReferenceForm.cs create mode 100644 FiscalApi.Samples.NetFramework/EgressInvoiceReferenceForm.resx create mode 100644 FiscalApi.Samples.NetFramework/EgressInvoiceValueForm.Designer.cs create mode 100644 FiscalApi.Samples.NetFramework/EgressInvoiceValueForm.cs create mode 100644 FiscalApi.Samples.NetFramework/EgressInvoiceValueForm.resx create mode 100644 FiscalApi.Samples.NetFramework/EmployeeForm.Designer.cs create mode 100644 FiscalApi.Samples.NetFramework/EmployeeForm.cs create mode 100644 FiscalApi.Samples.NetFramework/EmployeeForm.resx create mode 100644 FiscalApi.Samples.NetFramework/EmployerForm.Designer.cs create mode 100644 FiscalApi.Samples.NetFramework/EmployerForm.cs create mode 100644 FiscalApi.Samples.NetFramework/EmployerForm.resx create mode 100644 FiscalApi.Samples.NetFramework/IncomeInvoiceReferenceForm.Designer.cs create mode 100644 FiscalApi.Samples.NetFramework/IncomeInvoiceReferenceForm.cs create mode 100644 FiscalApi.Samples.NetFramework/IncomeInvoiceReferenceForm.resx create mode 100644 FiscalApi.Samples.NetFramework/IncomeInvoiceValueForm.Designer.cs create mode 100644 FiscalApi.Samples.NetFramework/IncomeInvoiceValueForm.cs create mode 100644 FiscalApi.Samples.NetFramework/IncomeInvoiceValueForm.resx create mode 100644 FiscalApi.Samples.NetFramework/InvoiceReferenceForm.Designer.cs create mode 100644 FiscalApi.Samples.NetFramework/InvoiceReferenceForm.cs create mode 100644 FiscalApi.Samples.NetFramework/InvoiceReferenceForm.resx create mode 100644 FiscalApi.Samples.NetFramework/InvoiceValueForm.Designer.cs create mode 100644 FiscalApi.Samples.NetFramework/InvoiceValueForm.cs create mode 100644 FiscalApi.Samples.NetFramework/InvoiceValueForm.resx create mode 100644 FiscalApi.Samples.NetFramework/LocalTaxesComplementReferenceForm.Designer.cs create mode 100644 FiscalApi.Samples.NetFramework/LocalTaxesComplementReferenceForm.cs create mode 100644 FiscalApi.Samples.NetFramework/LocalTaxesComplementReferenceForm.resx create mode 100644 FiscalApi.Samples.NetFramework/LocalTaxesComplementValueForm.Designer.cs create mode 100644 FiscalApi.Samples.NetFramework/LocalTaxesComplementValueForm.cs create mode 100644 FiscalApi.Samples.NetFramework/LocalTaxesComplementValueForm.resx create mode 100644 FiscalApi.Samples.NetFramework/PaymentComplementInvoiceReferenceForm.Designer.cs create mode 100644 FiscalApi.Samples.NetFramework/PaymentComplementInvoiceReferenceForm.cs create mode 100644 FiscalApi.Samples.NetFramework/PaymentComplementInvoiceReferenceForm.resx create mode 100644 FiscalApi.Samples.NetFramework/PaymentComplementInvoiceValueForm.Designer.cs create mode 100644 FiscalApi.Samples.NetFramework/PaymentComplementInvoiceValueForm.cs create mode 100644 FiscalApi.Samples.NetFramework/PaymentComplementInvoiceValueForm.resx create mode 100644 FiscalApi.Samples.NetFramework/PayrollComplementReferenceForm.Designer.cs create mode 100644 FiscalApi.Samples.NetFramework/PayrollComplementReferenceForm.cs create mode 100644 FiscalApi.Samples.NetFramework/PayrollComplementReferenceForm.resx create mode 100644 FiscalApi.Samples.NetFramework/PayrollComplementValueForm.Designer.cs create mode 100644 FiscalApi.Samples.NetFramework/PayrollComplementValueForm.cs create mode 100644 FiscalApi.Samples.NetFramework/PayrollComplementValueForm.resx create mode 100644 FiscalApi.Samples.NetFramework/StringUtils.cs diff --git a/FiscalApi.Samples.NetFramework/CreditNoteInvoiceValueForm.Designer.cs b/FiscalApi.Samples.NetFramework/CreditNoteInvoiceValueForm.Designer.cs new file mode 100644 index 0000000..1d1912a --- /dev/null +++ b/FiscalApi.Samples.NetFramework/CreditNoteInvoiceValueForm.Designer.cs @@ -0,0 +1,39 @@ +namespace FiscalApi.Samples.NetFramework +{ + partial class CreditNoteInvoiceValueForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Text = "CreditNoteInvoiceValueForm"; + } + + #endregion + } +} \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/CreditNoteInvoiceValueForm.cs b/FiscalApi.Samples.NetFramework/CreditNoteInvoiceValueForm.cs new file mode 100644 index 0000000..4e174ec --- /dev/null +++ b/FiscalApi.Samples.NetFramework/CreditNoteInvoiceValueForm.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FiscalApi.Samples.NetFramework +{ + public partial class CreditNoteInvoiceValueForm : Form + { + public CreditNoteInvoiceValueForm() + { + InitializeComponent(); + } + } +} diff --git a/FiscalApi.Samples.NetFramework/DownloadRequestsForm.Designer.cs b/FiscalApi.Samples.NetFramework/DownloadRequestsForm.Designer.cs new file mode 100644 index 0000000..f08a63a --- /dev/null +++ b/FiscalApi.Samples.NetFramework/DownloadRequestsForm.Designer.cs @@ -0,0 +1,188 @@ +namespace FiscalApi.Samples.NetFramework +{ + partial class DownloadRequestsForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.button9 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.button5 = new System.Windows.Forms.Button(); + this.button6 = new System.Windows.Forms.Button(); + this.button7 = new System.Windows.Forms.Button(); + this.button8 = new System.Windows.Forms.Button(); + this.button10 = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // button9 + // + this.button9.Location = new System.Drawing.Point(12, 11); + this.button9.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button9.Name = "button9"; + this.button9.Size = new System.Drawing.Size(189, 60); + this.button9.TabIndex = 9; + this.button9.Text = "Listar solicitudes"; + this.button9.UseVisualStyleBackColor = true; + this.button9.Click += new System.EventHandler(this.button9_Click); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(12, 75); + this.button1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(189, 60); + this.button1.TabIndex = 10; + this.button1.Text = "Buscar solicitudes"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(12, 139); + this.button2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(189, 60); + this.button2.TabIndex = 11; + this.button2.Text = "Obtener solicitud por ID"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(12, 203); + this.button3.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(189, 60); + this.button3.TabIndex = 12; + this.button3.Text = "Listar XMLs por ID de solicitud"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // button4 + // + this.button4.Location = new System.Drawing.Point(12, 267); + this.button4.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button4.Name = "button4"; + this.button4.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.button4.Size = new System.Drawing.Size(189, 60); + this.button4.TabIndex = 13; + this.button4.Text = "Listar meta-items por ID de solicitud"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.button4_Click); + // + // button5 + // + this.button5.Location = new System.Drawing.Point(207, 11); + this.button5.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(189, 60); + this.button5.TabIndex = 14; + this.button5.Text = "Descargar paquete por ID de solicitud"; + this.button5.UseVisualStyleBackColor = true; + this.button5.Click += new System.EventHandler(this.button5_Click); + // + // button6 + // + this.button6.Location = new System.Drawing.Point(207, 75); + this.button6.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button6.Name = "button6"; + this.button6.Size = new System.Drawing.Size(189, 60); + this.button6.TabIndex = 15; + this.button6.Text = "Descargar SAT request por ID de solicitud"; + this.button6.UseVisualStyleBackColor = true; + this.button6.Click += new System.EventHandler(this.button6_Click); + // + // button7 + // + this.button7.Location = new System.Drawing.Point(207, 139); + this.button7.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button7.Name = "button7"; + this.button7.Size = new System.Drawing.Size(189, 60); + this.button7.TabIndex = 16; + this.button7.Text = "Descargar SAT response por ID de solicitud"; + this.button7.UseVisualStyleBackColor = true; + this.button7.Click += new System.EventHandler(this.button7_Click); + // + // button8 + // + this.button8.Location = new System.Drawing.Point(207, 203); + this.button8.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button8.Name = "button8"; + this.button8.Size = new System.Drawing.Size(189, 60); + this.button8.TabIndex = 17; + this.button8.Text = "Crear solicitud"; + this.button8.UseVisualStyleBackColor = true; + this.button8.Click += new System.EventHandler(this.button8_Click); + // + // button10 + // + this.button10.Location = new System.Drawing.Point(207, 267); + this.button10.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button10.Name = "button10"; + this.button10.Size = new System.Drawing.Size(189, 60); + this.button10.TabIndex = 18; + this.button10.Text = "Eliminar solicitud"; + this.button10.UseVisualStyleBackColor = true; + this.button10.Click += new System.EventHandler(this.button10_Click); + // + // DownloadRequestsForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(416, 342); + this.Controls.Add(this.button10); + this.Controls.Add(this.button8); + this.Controls.Add(this.button7); + this.Controls.Add(this.button6); + this.Controls.Add(this.button5); + this.Controls.Add(this.button4); + this.Controls.Add(this.button3); + this.Controls.Add(this.button2); + this.Controls.Add(this.button1); + this.Controls.Add(this.button9); + this.Name = "DownloadRequestsForm"; + this.Text = "DownloadRequestsForm"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button button9; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Button button5; + private System.Windows.Forms.Button button6; + private System.Windows.Forms.Button button7; + private System.Windows.Forms.Button button8; + private System.Windows.Forms.Button button10; + } +} \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/DownloadRequestsForm.cs b/FiscalApi.Samples.NetFramework/DownloadRequestsForm.cs new file mode 100644 index 0000000..3748ab1 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/DownloadRequestsForm.cs @@ -0,0 +1,259 @@ +using Fiscalapi.Common; +using Fiscalapi.Models; +using Fiscalapi.Services; +using FiscalApi.Samples.NetFramework.Properties; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FiscalApi.Samples.NetFramework +{ + public partial class DownloadRequestsForm : Form + { + private FiscalapiSettings _settings; + public DownloadRequestsForm(FiscalapiSettings settings) + { + InitializeComponent(); + _settings = settings; + } + + private async void button9_Click(object sender, EventArgs e) + { + // Obtener lista paginada de solicitudes de descarga masiva + + // Create instance of FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Send request (pageNumber=1, pageSize=2) + var apiResponse = await fiscalApi.DownloadRequests.GetListAsync(1, 2); + + // Check response + if (apiResponse.Succeeded) + { + foreach (var item in apiResponse.Data.Items) + MessageBox.Show($@"RFC solicitante: {item.RequesterTin}"); + } + else + { + MessageBox.Show($@"HttpStatusCode: {apiResponse.HttpStatusCode}"); + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button1_Click(object sender, EventArgs e) + { + // Buscar solicitud de descarga masiva por fecha de creación. + // Create instance of FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + // Send request + var apiResponse = await fiscalApi.DownloadRequests.SearchAsync(DateTime.Now); + + // Check response + if (apiResponse.Succeeded) + { + MessageBox.Show("OK"); + foreach (var item in apiResponse.Data) + MessageBox.Show($@"Solicitud: {item.Id} - {item.SatInvoiceStatus.Description}"); + } + else + { + MessageBox.Show($@"HttpStatusCode: {apiResponse.HttpStatusCode}"); + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button2_Click(object sender, EventArgs e) + { + // Create instance of FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Send request + var apiResponse = await fiscalApi.DownloadRequests.GetByIdAsync("4e376d60-8ab0-47d7-a82d-eb13583aaf22"); + + // Check response + if (apiResponse.Succeeded) + { + var product = apiResponse.Data; + MessageBox.Show("OK"); + MessageBox.Show($@"RFC solicitante: {product.RequesterTin}"); + } + else + { + MessageBox.Show($@"HttpStatusCode: {apiResponse.HttpStatusCode}"); + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button3_Click(object sender, EventArgs e) + { + // Obtener lista paginada de xmls descargados asociados a una solicitud de descarga. + var fiscalApi = FiscalApiClient.Create(_settings); + + // request + var apiResponse = await fiscalApi.DownloadRequests.GetXmlsAsync("4e376d60-8ab0-47d7-a82d-eb13583aaf22"); + + // Check response + if (apiResponse.Succeeded) + { + foreach (var xml in apiResponse.Data.Items) + MessageBox.Show($@"Factura: Serie:{xml.Series} Folio:{xml.Number}"); + } + else + { + MessageBox.Show($@"HttpStatusCode: {apiResponse.HttpStatusCode}"); + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button4_Click(object sender, EventArgs e) + { + // Obtener lista paginada de metadatos descargados asociados a una solicitud de descarga. + var fiscalApi = FiscalApiClient.Create(_settings); + + // request + var apiResponse = + await fiscalApi.DownloadRequests.GetMetadataItemsAsync("4e376d60-8ab0-47d7-a82d-eb13583aaf22"); + + // Check response + if (apiResponse.Succeeded) + { + foreach (var metadataItem in apiResponse.Data.Items) + MessageBox.Show($@" Factura UUID:{metadataItem.InvoiceUuid} Receptor:{metadataItem.RecipientName}"); + } + else + { + MessageBox.Show($@"HttpStatusCode: {apiResponse.HttpStatusCode}"); + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button5_Click(object sender, EventArgs e) + { + // Descargar paquete (.zip file) de una solicitud de descarga masiva. + + var fiscalApi = FiscalApiClient.Create(_settings); + // Send request + var apiResponse = + await fiscalApi.DownloadRequests.DownloadPackageAsync("4e376d60-8ab0-47d7-a82d-eb13583aaf22"); + // Check response + if (apiResponse.Succeeded) + { + Form1.WriteFileToDisk(apiResponse.Data.FirstOrDefault()); + MessageBox.Show(@"Archivo descargado."); + } + else + { + MessageBox.Show($@"HttpStatusCode: {apiResponse.HttpStatusCode}"); + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button6_Click(object sender, EventArgs e) + { + // Descargar SAT request (.xml file) de una solicitud de descarga masiva. (debug/testing) + var fiscalApi = FiscalApiClient.Create(_settings); + // Send request + var apiResponse = + await fiscalApi.DownloadRequests.DownloadSatRequestAsync("4e376d60-8ab0-47d7-a82d-eb13583aaf22"); + // Check response + if (apiResponse.Succeeded) + { + Form1.WriteFileToDisk(apiResponse.Data); + MessageBox.Show(@"Archivo descargado."); + } + else + { + MessageBox.Show($@"HttpStatusCode: {apiResponse.HttpStatusCode}"); + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button7_Click(object sender, EventArgs e) + { + // Descargar SAT response (.xml file) de una solicitud de descarga masiva. (debug/testing) + var fiscalApi = FiscalApiClient.Create(_settings); + // Send request + var apiResponse = await fiscalApi.DownloadRequests + .DownloadSatResponseAsync("4e376d60-8ab0-47d7-a82d-eb13583aaf22"); + + // Check response + if (apiResponse.Succeeded) + { + Form1.WriteFileToDisk(apiResponse.Data); + MessageBox.Show(@"Archivo descargado."); + } + else + { + MessageBox.Show($@"HttpStatusCode: {apiResponse.HttpStatusCode}"); + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button8_Click(object sender, EventArgs e) + { + // Crear solicitud de descarga masiva + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear solicitud para descargar facturas de los últimos 5 días. + var request = new DownloadRequest + { + DownloadRuleId = "89aba371-3f9a-431c-a92d-dcb1e606fcfd", + DownloadRequestTypeId = "Manual", + StartDate = DateTime.Now.AddDays(-5), + EndDate = DateTime.Now, + }; + + // Send request + var apiResponse = await fiscalApi.DownloadRequests.CreateAsync(request); + + // Check response + if (apiResponse.Succeeded) + { + MessageBox.Show(@"Solicitud creada."); + MessageBox.Show($@" {apiResponse.Data.Id}"); + } + else + { + MessageBox.Show($@"HttpStatusCode: {apiResponse.HttpStatusCode}"); + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button10_Click(object sender, EventArgs e) + { + // Eliminar solicitud de descarga masiva. + + // Create instance of FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + // Send request + + var apiResponse = await fiscalApi.DownloadRequests.DeleteAsync("4763983b-f587-4497-8b87-7f3645589ac9"); + // Check response + if (apiResponse.Succeeded) + { + MessageBox.Show($@"Solicitud borrada {apiResponse.Data}"); + } + else + { + MessageBox.Show($@"HttpStatusCode: {apiResponse.HttpStatusCode}"); + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + } +} diff --git a/FiscalApi.Samples.NetFramework/DownloadRequestsForm.resx b/FiscalApi.Samples.NetFramework/DownloadRequestsForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/DownloadRequestsForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/DownloadRulesForm.Designer.cs b/FiscalApi.Samples.NetFramework/DownloadRulesForm.Designer.cs new file mode 100644 index 0000000..b1803b1 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/DownloadRulesForm.Designer.cs @@ -0,0 +1,131 @@ +namespace FiscalApi.Samples.NetFramework +{ + partial class DownloadRulesForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.button11 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.button5 = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // button11 + // + this.button11.Location = new System.Drawing.Point(12, 11); + this.button11.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button11.Name = "button11"; + this.button11.Size = new System.Drawing.Size(189, 60); + this.button11.TabIndex = 11; + this.button11.Text = "Listar reglas"; + this.button11.UseVisualStyleBackColor = true; + this.button11.Click += new System.EventHandler(this.button11_Click); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(12, 75); + this.button1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(189, 60); + this.button1.TabIndex = 12; + this.button1.Text = "Crear regla"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(12, 139); + this.button2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(189, 60); + this.button2.TabIndex = 13; + this.button2.Text = "Listar reglas"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(207, 11); + this.button3.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(189, 60); + this.button3.TabIndex = 14; + this.button3.Text = "Crear regla de prueba"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // button4 + // + this.button4.Location = new System.Drawing.Point(207, 75); + this.button4.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(189, 60); + this.button4.TabIndex = 15; + this.button4.Text = "Actualizar regla"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.button4_Click); + // + // button5 + // + this.button5.Location = new System.Drawing.Point(207, 139); + this.button5.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(189, 60); + this.button5.TabIndex = 16; + this.button5.Text = "Eliminar regla"; + this.button5.UseVisualStyleBackColor = true; + this.button5.Click += new System.EventHandler(this.button5_Click); + // + // DownloadRulesForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(414, 213); + this.Controls.Add(this.button5); + this.Controls.Add(this.button4); + this.Controls.Add(this.button3); + this.Controls.Add(this.button2); + this.Controls.Add(this.button1); + this.Controls.Add(this.button11); + this.Name = "DownloadRulesForm"; + this.Text = "DownloadRulesForm"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button button11; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Button button5; + } +} \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/DownloadRulesForm.cs b/FiscalApi.Samples.NetFramework/DownloadRulesForm.cs new file mode 100644 index 0000000..27f43a1 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/DownloadRulesForm.cs @@ -0,0 +1,183 @@ +using Fiscalapi.Common; +using Fiscalapi.Models; +using Fiscalapi.Services; +using FiscalApi.Samples.NetFramework.Properties; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FiscalApi.Samples.NetFramework +{ + public partial class DownloadRulesForm : Form + { + private FiscalapiSettings _settings; + public DownloadRulesForm(FiscalapiSettings settings) + { + InitializeComponent(); + _settings = settings; + } + + private async void button11_Click(object sender, EventArgs e) + { + // Obtener lista paginada de reglas de descarga masiva + + // Create instance of FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Send request (pageNumber=1, pageSize=2) + var apiResponse = await fiscalApi.DownloadRules.GetListAsync(1, 2); + + // Check response + if (apiResponse.Succeeded) + { + foreach (var item in apiResponse.Data.Items) + MessageBox.Show($@"Producto: {item.Description}"); + } + else + { + MessageBox.Show($@"HttpStatusCode: {apiResponse.HttpStatusCode}"); + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button2_Click(object sender, EventArgs e) + { + // Create instance of FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Send request + var apiResponse = await fiscalApi.DownloadRules.GetByIdAsync("59ccad08-5d3a-48ab-95fa-b7f80f9b00c7"); + + // Check response + if (apiResponse.Succeeded) + { + var product = apiResponse.Data; + MessageBox.Show("OK"); + MessageBox.Show($@"Regla: {product.Description}"); + } + else + { + MessageBox.Show($@"HttpStatusCode: {apiResponse.HttpStatusCode}"); + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button1_Click(object sender, EventArgs e) + { + // Create instance of FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Regla para descargar CFDI recibidos y vigentes. + var request = new DownloadRule + { + PersonId = "b0c1cf6c-153a-464e-99df-5741f45d6695", //Persona que recibió los CFDI + Description = "Regla descarga demo ...", + SatQueryTypeId = "CFDI", + DownloadTypeId = "Recibidos", + SatInvoiceStatusId = "Vigente", + }; + + // Send request + var apiResponse = await fiscalApi.DownloadRules.CreateAsync(request); + + // Check response + + if (apiResponse.Succeeded) + { + MessageBox.Show(@"Regla creada."); + MessageBox.Show($@" {apiResponse.Data.Description}"); + } + else + { + MessageBox.Show($@"HttpStatusCode: {apiResponse.HttpStatusCode}"); + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button3_Click(object sender, EventArgs e) + { + // Create instance of FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Send request + var apiResponse = await fiscalApi.DownloadRules.CreateTestRuleAsync(); + + // Check response + if (apiResponse.Succeeded) + { + MessageBox.Show(@"Regla creada."); + MessageBox.Show($@" {apiResponse.Data.Id}"); + } + else + { + MessageBox.Show($@"HttpStatusCode: {apiResponse.HttpStatusCode}"); + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button4_Click(object sender, EventArgs e) + { + // Actualizar regla de descarga masiva + + // Create instance of FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + var id = "8d5905f3-d7e1-46b7-b0f4-9f3a2528bb56"; + + // Actualizar descripción. + var request = new DownloadRule + { + Id = id, + Description = "Regla descarga actualizada", + }; + + // Send request + var apiResponse = await fiscalApi.DownloadRules.UpdateAsync(id, request); + + // Check response + + if (apiResponse.Succeeded) + { + MessageBox.Show(@"Regla actualizada."); + MessageBox.Show($@" {apiResponse.Data.Description}"); + } + else + { + MessageBox.Show($@"HttpStatusCode: {apiResponse.HttpStatusCode}"); + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button5_Click(object sender, EventArgs e) + { + // Create instance of FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Send request + var apiResponse = await fiscalApi.DownloadRules.DeleteAsync("2029b977-31d5-4911-a7ba-23bda12e97f2"); + + // Check response + if (apiResponse.Succeeded) + { + MessageBox.Show($@"Regla borrada {apiResponse.Data}"); + } + else + { + MessageBox.Show($@"HttpStatusCode: {apiResponse.HttpStatusCode}"); + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + } +} diff --git a/FiscalApi.Samples.NetFramework/DownloadRulesForm.resx b/FiscalApi.Samples.NetFramework/DownloadRulesForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/DownloadRulesForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/EgressInvoiceReferenceForm.Designer.cs b/FiscalApi.Samples.NetFramework/EgressInvoiceReferenceForm.Designer.cs new file mode 100644 index 0000000..100dab9 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/EgressInvoiceReferenceForm.Designer.cs @@ -0,0 +1,103 @@ +namespace FiscalApi.Samples.NetFramework +{ + partial class EgressInvoiceReferenceForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.button3 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox1.Controls.Add(this.button3); + this.groupBox1.Controls.Add(this.button2); + this.groupBox1.Controls.Add(this.button1); + this.groupBox1.Location = new System.Drawing.Point(13, 12); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(207, 234); + this.groupBox1.TabIndex = 1; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "groupBox1"; + // + // button3 + // + this.button3.Location = new System.Drawing.Point(7, 154); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(189, 60); + this.button3.TabIndex = 2; + this.button3.Text = "Factura egreso nota de crédito"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(7, 88); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(189, 60); + this.button2.TabIndex = 1; + this.button2.Text = "Factura egreso importe menor al CFDI de egreso"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(7, 22); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(189, 60); + this.button1.TabIndex = 0; + this.button1.Text = "Factura egreso devolución"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // EgressInvoiceReferenceForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(232, 259); + this.Controls.Add(this.groupBox1); + this.Name = "EgressInvoiceReferenceForm"; + this.Text = "EgressInvoiceReferenceForm"; + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button1; + } +} \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/EgressInvoiceReferenceForm.cs b/FiscalApi.Samples.NetFramework/EgressInvoiceReferenceForm.cs new file mode 100644 index 0000000..3738235 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/EgressInvoiceReferenceForm.cs @@ -0,0 +1,238 @@ +using Fiscalapi.Common; +using Fiscalapi.Models; +using Fiscalapi.Services; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FiscalApi.Samples.NetFramework +{ + public partial class EgressInvoiceReferenceForm : Form + { + private FiscalapiSettings _settings; + + public EgressInvoiceReferenceForm(FiscalapiSettings settings) + { + _settings = settings; + InitializeComponent(); + } + + private async void button1_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + var relatedInvoices = new List() + { + new RelatedInvoice { RelationshipTypeCode = "03", Uuid = "8335e91e-5c43-4cef-9ed0-b4985ddc2ca8" } + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + Id = "2f3c65f3-ed02-452f-944c-97a47010df5c", + Quantity = 1 + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "99", + CurrencyCode = "MXN", + TypeCode = "E", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button2_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + var relatedInvoices = new List() + { + new RelatedInvoice { RelationshipTypeCode = "01", Uuid = "8335e91e-5c43-4cef-9ed0-b4985ddc2ca8" } + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + Id = "2f3c65f3-ed02-452f-944c-97a47010df5c", + Description = "10% del saldo de todos los CFDI relacionados", + Quantity = 1, + UnitPrice = 10 + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "99", + CurrencyCode = "MXN", + TypeCode = "E", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button3_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + var relatedInvoices = new List() + { + new RelatedInvoice + { + RelationshipTypeCode = "01", + Uuid = "8335e91e-5c43-4cef-9ed0-b4985ddc2ca8" + } + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + Id = "2f3c65f3-ed02-452f-944c-97a47010df5c", + Description = "10% del saldo de todos los CFDI relacionados", + Quantity = 0.50m, + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "99", + CurrencyCode = "MXN", + TypeCode = "E", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + } +} diff --git a/FiscalApi.Samples.NetFramework/EgressInvoiceReferenceForm.resx b/FiscalApi.Samples.NetFramework/EgressInvoiceReferenceForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/EgressInvoiceReferenceForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/EgressInvoiceValueForm.Designer.cs b/FiscalApi.Samples.NetFramework/EgressInvoiceValueForm.Designer.cs new file mode 100644 index 0000000..898b34c --- /dev/null +++ b/FiscalApi.Samples.NetFramework/EgressInvoiceValueForm.Designer.cs @@ -0,0 +1,103 @@ +namespace FiscalApi.Samples.NetFramework +{ + partial class EgressInvoiceValueForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.button1 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox1.Controls.Add(this.button3); + this.groupBox1.Controls.Add(this.button2); + this.groupBox1.Controls.Add(this.button1); + this.groupBox1.Location = new System.Drawing.Point(13, 13); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(207, 234); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "groupBox1"; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(7, 22); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(189, 60); + this.button1.TabIndex = 0; + this.button1.Text = "Factura egreso devolución"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(7, 88); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(189, 60); + this.button2.TabIndex = 1; + this.button2.Text = "Factura egreso importe menor al CFDI de egreso"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(7, 154); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(189, 60); + this.button3.TabIndex = 2; + this.button3.Text = "Factura egreso nota de crédito"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // EgressInvoiceValueForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(232, 259); + this.Controls.Add(this.groupBox1); + this.Name = "EgressInvoiceValueForm"; + this.Text = "EgressInvoiceValueForm"; + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button1; + } +} \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/EgressInvoiceValueForm.cs b/FiscalApi.Samples.NetFramework/EgressInvoiceValueForm.cs new file mode 100644 index 0000000..1d1f7fb --- /dev/null +++ b/FiscalApi.Samples.NetFramework/EgressInvoiceValueForm.cs @@ -0,0 +1,355 @@ +using Fiscalapi.Common; +using Fiscalapi.Models; +using Fiscalapi.Services; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FiscalApi.Samples.NetFramework +{ + public partial class EgressInvoiceValueForm : Form + { + private FiscalapiSettings _settings; + + public EgressInvoiceValueForm(FiscalapiSettings settings) + { + InitializeComponent(); + _settings = settings; + } + + private async void button1_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "CACX7605101P8", + LegalName = "XOCHILT CASAS CHAVEZ", + ZipCode = "36257", + TaxRegimeCode = "612", + CfdiUseCode = "G02", + Email = "someone@somewhere.com" + }; + + var relatedInvoices = new List() + { + new RelatedInvoice { RelationshipTypeCode = "03", Uuid = "61b2f6b4-f588-44d3-aec7-85cf146c33bd" } + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "84111506", + Quantity = 3, + UnitOfMeasurementCode = "ACT", + Description = "Leche", + UnitPrice = 1572.0m, + TaxObjectCode = "02", + ItemSku = "84111506", + Discount = 0.0m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.000000m, + TaxFlagCode = "T" + } + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "99", + CurrencyCode = "MXN", + TypeCode = "E", + ExpeditionZipCode = "99039", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button2_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "G02", + Email = "someone@somewhere.com" + }; + + var relatedInvoices = new List() + { + new RelatedInvoice { RelationshipTypeCode = "01", Uuid = "1fac4464-1111-0000-1111-cd37179db12e" }, + new RelatedInvoice { RelationshipTypeCode = "01", Uuid = "628b6113-d831-455a-907e-097821c2f48c" } + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "84111506", + Quantity = 1.0m, + UnitOfMeasurementCode = "ACT", + Description = "10% del saldo de todos los CFDI relacionados", + UnitPrice = 35.0m, + TaxObjectCode = "01", + ItemSku = "84111506", + Discount = 0.0m + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "E", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + ExportCode = "01" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button3_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + ZipCode = "42501", + TaxRegimeCode = "601", + CfdiUseCode = "CP01", + Email = "someone@somewhere.com" + }; + + var relatedInvoices = new List() + { + new RelatedInvoice { RelationshipTypeCode = "01", Uuid = "1fac4464-1111-0000-1111-cd37179db12e" } + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "84111506", + Quantity = 1.0m, + UnitOfMeasurementCode = "ACT", + Description = "NC por devolución", + UnitPrice = 10.0m, + TaxObjectCode = "02", + ItemSku = "84111506", + Discount = 0.0m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "E", + ExpeditionZipCode = "45610", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + } +} diff --git a/FiscalApi.Samples.NetFramework/EgressInvoiceValueForm.resx b/FiscalApi.Samples.NetFramework/EgressInvoiceValueForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/EgressInvoiceValueForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/EmployeeForm.Designer.cs b/FiscalApi.Samples.NetFramework/EmployeeForm.Designer.cs new file mode 100644 index 0000000..1878f61 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/EmployeeForm.Designer.cs @@ -0,0 +1,103 @@ +namespace FiscalApi.Samples.NetFramework +{ + partial class EmployeeForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.button9 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // button9 + // + this.button9.Location = new System.Drawing.Point(12, 203); + this.button9.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button9.Name = "button9"; + this.button9.Size = new System.Drawing.Size(189, 60); + this.button9.TabIndex = 9; + this.button9.Text = "Eliminar datos de empleado"; + this.button9.UseVisualStyleBackColor = true; + this.button9.Click += new System.EventHandler(this.button9_Click); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(12, 139); + this.button1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(189, 60); + this.button1.TabIndex = 10; + this.button1.Text = "Actualizar datos de empleado"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(12, 75); + this.button2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(189, 60); + this.button2.TabIndex = 11; + this.button2.Text = "Crear datos de empleado"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(12, 11); + this.button3.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(189, 60); + this.button3.TabIndex = 12; + this.button3.Text = "Obtener datos de empleado"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // EmployeeForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(215, 282); + this.Controls.Add(this.button3); + this.Controls.Add(this.button2); + this.Controls.Add(this.button1); + this.Controls.Add(this.button9); + this.Name = "EmployeeForm"; + this.Text = "EmployeeForm"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button button9; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button3; + } +} \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/EmployeeForm.cs b/FiscalApi.Samples.NetFramework/EmployeeForm.cs new file mode 100644 index 0000000..1f2bc5e --- /dev/null +++ b/FiscalApi.Samples.NetFramework/EmployeeForm.cs @@ -0,0 +1,133 @@ +using Fiscalapi.Common; +using Fiscalapi.Services; +using FiscalApi.Samples.NetFramework.Properties; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FiscalApi.Samples.NetFramework +{ + public partial class EmployeeForm : Form + { + private FiscalapiSettings _settings; + public EmployeeForm(FiscalapiSettings settings) + { + InitializeComponent(); + _settings = settings; + } + + private async void button3_Click(object sender, EventArgs e) + { + var fiscalApi = FiscalApiClient.Create(_settings); + + var apiResponse = await fiscalApi.Persons.Employer.GetByIdAsync("0e82a655-5f0c-4e07-abab-8f322e4123ef"); + + if (apiResponse.Succeeded) + { + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data)); + } + } + + private async void button2_Click(object sender, EventArgs e) + { + var fiscalApi = FiscalApiClient.Create(_settings); + + string personId = "bd199ed8-02ef-47c0-919c-9479dd8ecae7"; + EmployeeData requestModel = new EmployeeData() + { + EmployerPersonId = "0e82a655-5f0c-4e07-abab-8f322e4123ef", + EmployeePersonId = personId, + EmployeeNumber = "12345", + SatContractTypeId = "01", + SatTaxRegimeTypeId = "02", + SatPaymentPeriodicityId = "04", + SatPayrollStateId = "JAL", + SocialSecurityNumber = "1234567890", + LaborRelationStartDate = DateTime.Parse("2023-01-15T00:00:00"), + SatWorkdayTypeId = "01", + SatJobRiskId = "1", + SatBankId = "002", + SatUnionizedStatusId = "No", + Department = "Recursos humanos", + Position = "Analista de nóminas", + Seniority = "7Y3M1W", + BankAccount = "12345678900987654321", + BaseSalaryForContributions = 490.22m, + IntegratedDailySalary = 146.47m, + SubcontractorRfc = null, + TimePercentage = 0 + }; + var apiResponse = await fiscalApi.Persons.Employee.CreateAsync(requestModel); + + if (apiResponse.Succeeded) + { + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); + } + } + + private async void button1_Click(object sender, EventArgs e) + { + var fiscalapi = FiscalApiClient.Create(_settings); + string personId = "bd199ed8-02ef-47c0-919c-9479dd8ecae7"; + EmployeeData requestModel = new EmployeeData() + { + EmployerPersonId = "0e82a655-5f0c-4e07-abab-8f322e4123ef", + EmployeePersonId = personId, + EmployeeNumber = "09987675", + SatContractTypeId = "01", + SatTaxRegimeTypeId = "05", + SatPaymentPeriodicityId = "01", + SatPayrollStateId = "JAL", + SocialSecurityNumber = "589685956948945", + LaborRelationStartDate = DateTime.Parse("2023-01-15T00:00:00"), + SatWorkdayTypeId = "01", + SatJobRiskId = "1", + SatBankId = "012", + SatUnionizedStatusId = "No", + Department = "RRHH", + Position = "Analista de pagos", + Seniority = "7Y3M1W", + BankAccount = "585887494956848", + BaseSalaryForContributions = 490.22m, + IntegratedDailySalary = 146.47m, + SubcontractorRfc = null, + TimePercentage = 0 + }; + + var apiResponse = await fiscalapi.Persons.Employee.UpdateAsync(requestModel); + + if (apiResponse.Succeeded) + { + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); + } + else + { + MessageBox.Show(apiResponse.Details); + } + } + + private async void button9_Click(object sender, EventArgs e) + { + var fiscalapi = FiscalApiClient.Create(_settings); + string personId = "bd199ed8-02ef-47c0-919c-9479dd8ecae7"; + + var apiResponse = await fiscalapi.Persons.Employee.DeleteAsync(personId); + + if (apiResponse.Succeeded) + { + MessageBox.Show(apiResponse.Data.ToString()); + } + else + { + MessageBox.Show(apiResponse.Details); + } + } + } +} diff --git a/FiscalApi.Samples.NetFramework/EmployeeForm.resx b/FiscalApi.Samples.NetFramework/EmployeeForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/EmployeeForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/EmployerForm.Designer.cs b/FiscalApi.Samples.NetFramework/EmployerForm.Designer.cs new file mode 100644 index 0000000..de19bf5 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/EmployerForm.Designer.cs @@ -0,0 +1,103 @@ +namespace FiscalApi.Samples.NetFramework +{ + partial class EmployerForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.button9 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // button9 + // + this.button9.Location = new System.Drawing.Point(3, 11); + this.button9.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button9.Name = "button9"; + this.button9.Size = new System.Drawing.Size(189, 60); + this.button9.TabIndex = 9; + this.button9.Text = "Obtener datos de empleador"; + this.button9.UseVisualStyleBackColor = true; + this.button9.Click += new System.EventHandler(this.button9_Click); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(3, 75); + this.button1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(189, 60); + this.button1.TabIndex = 10; + this.button1.Text = "Crear datos de empleador"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(3, 139); + this.button2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(189, 60); + this.button2.TabIndex = 11; + this.button2.Text = "Actualizar datos de empleador"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(3, 203); + this.button3.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(189, 60); + this.button3.TabIndex = 12; + this.button3.Text = "Eliminar datos de empleador"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // EmployerForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(198, 272); + this.Controls.Add(this.button3); + this.Controls.Add(this.button2); + this.Controls.Add(this.button1); + this.Controls.Add(this.button9); + this.Name = "EmployerForm"; + this.Text = "EmployerForm"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button button9; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button3; + } +} \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/EmployerForm.cs b/FiscalApi.Samples.NetFramework/EmployerForm.cs new file mode 100644 index 0000000..1977f16 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/EmployerForm.cs @@ -0,0 +1,101 @@ +using Fiscalapi.Common; +using Fiscalapi.Services; +using FiscalApi.Samples.NetFramework.Properties; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Runtime; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FiscalApi.Samples.NetFramework +{ + public partial class EmployerForm : Form + { + private FiscalapiSettings _settings; + public EmployerForm(FiscalapiSettings settings) + { + InitializeComponent(); + _settings = settings; + } + + private async void button9_Click(object sender, EventArgs e) + { + var fiscalApi = FiscalApiClient.Create(_settings); + + var apiResponse = await fiscalApi.Persons.Employer.GetByIdAsync("0e82a655-5f0c-4e07-abab-8f322e4123ef"); + + if (apiResponse.Succeeded) + { + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); + } + } + + private async void button1_Click(object sender, EventArgs e) + { + var fiscalApi = FiscalApiClient.Create(_settings); + + string personId = "bd199ed8-02ef-47c0-919c-9479dd8ecae7"; + EmployerData requestModel = new EmployerData() + { + PersonId = personId, + EmployerRegistration = "abc1234567890", + OriginEmployerTin = "MEQA951024HC9", + OwnResourceAmount = 10000.0M + }; + var apiResponse = await fiscalApi.Persons.Employer.CreateAsync(requestModel); + + if (apiResponse.Succeeded) + { + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); + } + } + + private async void button2_Click(object sender, EventArgs e) + { + var fiscalapi = FiscalApiClient.Create(_settings); + string personId = "bd199ed8-02ef-47c0-919c-9479dd8ecae7"; + EmployerData requestModel = new EmployerData() + { + PersonId = personId, + EmployerRegistration = "xyz0987654321", + OriginEmployerTin = "URE180429TM6", + OwnResourceAmount = 98.5M, + SatFundSourceId = "IF" + }; + + var apiResponse = await fiscalapi.Persons.Employer.UpdateAsync(requestModel); + + if (apiResponse.Succeeded) + { + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); + } + else + { + MessageBox.Show(apiResponse.Details); + } + } + + private async void button3_Click(object sender, EventArgs e) + { + var fiscalapi = FiscalApiClient.Create(_settings); + string personId = "bd199ed8-02ef-47c0-919c-9479dd8ecae7"; + + var apiResponse = await fiscalapi.Persons.Employer.DeleteAsync(personId); + + if (apiResponse.Succeeded) + { + MessageBox.Show(apiResponse.Data.ToString()); + } + else + { + MessageBox.Show(apiResponse.Details); + } + } + } +} diff --git a/FiscalApi.Samples.NetFramework/EmployerForm.resx b/FiscalApi.Samples.NetFramework/EmployerForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/EmployerForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/FiscalApi.Samples.NetFramework.csproj b/FiscalApi.Samples.NetFramework/FiscalApi.Samples.NetFramework.csproj index 9d0099e..5df7e58 100644 --- a/FiscalApi.Samples.NetFramework/FiscalApi.Samples.NetFramework.csproj +++ b/FiscalApi.Samples.NetFramework/FiscalApi.Samples.NetFramework.csproj @@ -33,9 +33,9 @@ 4 - - ..\packages\Fiscalapi.4.0.270\lib\net461\Fiscalapi.dll - + + ..\packages\Fiscalapi.4.0.270\lib\net461\Fiscalapi.dll + ..\packages\Microsoft.Bcl.AsyncInterfaces.8.0.0\lib\netstandard2.0\Microsoft.Bcl.AsyncInterfaces.dll @@ -108,17 +108,168 @@ + + Form + + + CreditNoteInvoiceValueForm.cs + + + Form + + + DownloadRequestsForm.cs + + + Form + + + DownloadRulesForm.cs + + + Form + + + EgressInvoiceReferenceForm.cs + + + Form + + + EgressInvoiceValueForm.cs + + + Form + + + EmployeeForm.cs + + + Form + + + EmployerForm.cs + Form Form1.cs + + Form + + + IncomeInvoiceReferenceForm.cs + + + Form + + + IncomeInvoiceValueForm.cs + + + Form + + + InvoiceReferenceForm.cs + + + Form + + + InvoiceValueForm.cs + + + Form + + + LocalTaxesComplementValueForm.cs + + + Form + + + LocalTaxesComplementReferenceForm.cs + + + Form + + + PaymentComplementInvoiceReferenceForm.cs + + + Form + + + PaymentComplementInvoiceValueForm.cs + + + Form + + + PayrollComplementReferenceForm.cs + + + Form + + + PayrollComplementValueForm.cs + + + + DownloadRequestsForm.cs + + + DownloadRulesForm.cs + + + EgressInvoiceReferenceForm.cs + + + EgressInvoiceValueForm.cs + + + EmployeeForm.cs + + + EmployerForm.cs + Form1.cs + + IncomeInvoiceReferenceForm.cs + + + IncomeInvoiceValueForm.cs + + + InvoiceReferenceForm.cs + + + InvoiceValueForm.cs + + + LocalTaxesComplementReferenceForm.cs + + + LocalTaxesComplementValueForm.cs + + + PaymentComplementInvoiceReferenceForm.cs + + + PaymentComplementInvoiceValueForm.cs + + + PayrollComplementReferenceForm.cs + + + PayrollComplementValueForm.cs + ResXFileCodeGenerator Resources.Designer.cs diff --git a/FiscalApi.Samples.NetFramework/Form1.Designer.cs b/FiscalApi.Samples.NetFramework/Form1.Designer.cs index b610885..957c296 100644 --- a/FiscalApi.Samples.NetFramework/Form1.Designer.cs +++ b/FiscalApi.Samples.NetFramework/Form1.Designer.cs @@ -29,34 +29,19 @@ protected override void Dispose(bool disposing) private void InitializeComponent() { this.ObtenerFacturaById = new System.Windows.Forms.Button(); - this.FacturaIngresoPorValores = new System.Windows.Forms.Button(); - this.FacturaIngresoPorRefs = new System.Windows.Forms.Button(); - this.NotaCreditoValores = new System.Windows.Forms.Button(); - this.NotaCreditoRefs = new System.Windows.Forms.Button(); - this.CfdiPagoRefs = new System.Windows.Forms.Button(); - this.CfdiPagoValores = new System.Windows.Forms.Button(); - this.GenerarPDFValores = new System.Windows.Forms.Button(); - this.CancelByValues = new System.Windows.Forms.Button(); - this.button1 = new System.Windows.Forms.Button(); - this.GenerarPDFRefs = new System.Windows.Forms.Button(); this.ObtenerFacturaXMLById = new System.Windows.Forms.Button(); - this.EnviarPorValores = new System.Windows.Forms.Button(); - this.EnviarPorReferencia = new System.Windows.Forms.Button(); this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.DynamicPriceInvoiceButton = new System.Windows.Forms.Button(); - this.DynamicPriceCreditNoteButton = new System.Windows.Forms.Button(); - this.GlobalInvoiceValbutton = new System.Windows.Forms.Button(); - this.GlobalInvoiceRefButton = new System.Windows.Forms.Button(); - this.ConsultarEstadoRefs = new System.Windows.Forms.Button(); - this.ConsultarEstadoValores = new System.Windows.Forms.Button(); + this.button11 = new System.Windows.Forms.Button(); + this.button12 = new System.Windows.Forms.Button(); this.ObtenerListaPaginadaInvoices = new System.Windows.Forms.Button(); this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.button8 = new System.Windows.Forms.Button(); + this.button7 = new System.Windows.Forms.Button(); this.ObtenerListaPaginada = new System.Windows.Forms.Button(); this.BorrarPersona = new System.Windows.Forms.Button(); this.ActualizarPersona = new System.Windows.Forms.Button(); this.CrearPersona = new System.Windows.Forms.Button(); this.ObtenerPersonaPorID = new System.Windows.Forms.Button(); - this.ObtenerUltimosCertficadosValidos = new System.Windows.Forms.Button(); this.EliEliminaCertificado = new System.Windows.Forms.Button(); this.ObtenerCertificadoById = new System.Windows.Forms.Button(); this.CargarCertificados = new System.Windows.Forms.Button(); @@ -85,8 +70,23 @@ private void InitializeComponent() this.button2 = new System.Windows.Forms.Button(); this.tabControl1 = new System.Windows.Forms.TabControl(); this.tabPage1 = new System.Windows.Forms.TabPage(); + this.groupBox10 = new System.Windows.Forms.GroupBox(); + this.groupBox11 = new System.Windows.Forms.GroupBox(); + this.button6 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.button5 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.groupBox13 = new System.Windows.Forms.GroupBox(); + this.button17 = new System.Windows.Forms.Button(); + this.button16 = new System.Windows.Forms.Button(); + this.button15 = new System.Windows.Forms.Button(); + this.button14 = new System.Windows.Forms.Button(); + this.groupBox12 = new System.Windows.Forms.GroupBox(); + this.button13 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); this.tabPage2 = new System.Windows.Forms.TabPage(); this.groupBox9 = new System.Windows.Forms.GroupBox(); + this.BuscarSolicitud = new System.Windows.Forms.Button(); this.EliminarSolicitud = new System.Windows.Forms.Button(); this.CrearSolicitud = new System.Windows.Forms.Button(); this.ObtenerSATResponsePorSolicitudID = new System.Windows.Forms.Button(); @@ -106,7 +106,6 @@ private void InitializeComponent() this.groupBox7 = new System.Windows.Forms.GroupBox(); this.ListarDownloadCatalogo = new System.Windows.Forms.Button(); this.ListarDownloadCatalogos = new System.Windows.Forms.Button(); - this.BuscarSolicitud = new System.Windows.Forms.Button(); this.groupBox2.SuspendLayout(); this.groupBox1.SuspendLayout(); this.groupBox3.SuspendLayout(); @@ -115,6 +114,10 @@ private void InitializeComponent() this.groupBox6.SuspendLayout(); this.tabControl1.SuspendLayout(); this.tabPage1.SuspendLayout(); + this.groupBox10.SuspendLayout(); + this.groupBox11.SuspendLayout(); + this.groupBox13.SuspendLayout(); + this.groupBox12.SuspendLayout(); this.tabPage2.SuspendLayout(); this.groupBox9.SuspendLayout(); this.groupBox8.SuspendLayout(); @@ -123,239 +126,68 @@ private void InitializeComponent() // // ObtenerFacturaById // - this.ObtenerFacturaById.Location = new System.Drawing.Point(12, 19); + this.ObtenerFacturaById.Location = new System.Drawing.Point(7, 155); + this.ObtenerFacturaById.Margin = new System.Windows.Forms.Padding(4); this.ObtenerFacturaById.Name = "ObtenerFacturaById"; - this.ObtenerFacturaById.Size = new System.Drawing.Size(110, 49); + this.ObtenerFacturaById.Size = new System.Drawing.Size(147, 60); this.ObtenerFacturaById.TabIndex = 0; this.ObtenerFacturaById.Text = "Obtener factura por ID"; this.ObtenerFacturaById.UseVisualStyleBackColor = true; this.ObtenerFacturaById.Click += new System.EventHandler(this.ObtenerFacturaById_Click); // - // FacturaIngresoPorValores - // - this.FacturaIngresoPorValores.Location = new System.Drawing.Point(128, 19); - this.FacturaIngresoPorValores.Name = "FacturaIngresoPorValores"; - this.FacturaIngresoPorValores.Size = new System.Drawing.Size(110, 49); - this.FacturaIngresoPorValores.TabIndex = 1; - this.FacturaIngresoPorValores.Text = "Crear factura de ingreso por valores"; - this.FacturaIngresoPorValores.UseVisualStyleBackColor = true; - this.FacturaIngresoPorValores.Click += new System.EventHandler(this.FacturaIngresoPorValores_Click); - // - // FacturaIngresoPorRefs - // - this.FacturaIngresoPorRefs.Location = new System.Drawing.Point(244, 19); - this.FacturaIngresoPorRefs.Name = "FacturaIngresoPorRefs"; - this.FacturaIngresoPorRefs.Size = new System.Drawing.Size(110, 49); - this.FacturaIngresoPorRefs.TabIndex = 2; - this.FacturaIngresoPorRefs.Text = "Crear factura de ingreso por referencias"; - this.FacturaIngresoPorRefs.UseVisualStyleBackColor = true; - this.FacturaIngresoPorRefs.Click += new System.EventHandler(this.FacturaIngresoPorRefs_Click); - // - // NotaCreditoValores - // - this.NotaCreditoValores.Location = new System.Drawing.Point(128, 74); - this.NotaCreditoValores.Name = "NotaCreditoValores"; - this.NotaCreditoValores.Size = new System.Drawing.Size(110, 49); - this.NotaCreditoValores.TabIndex = 3; - this.NotaCreditoValores.Text = "Crear nota de credito por valores"; - this.NotaCreditoValores.UseVisualStyleBackColor = true; - this.NotaCreditoValores.Click += new System.EventHandler(this.NotaCreditoValores_Click); - // - // NotaCreditoRefs - // - this.NotaCreditoRefs.Location = new System.Drawing.Point(244, 74); - this.NotaCreditoRefs.Name = "NotaCreditoRefs"; - this.NotaCreditoRefs.Size = new System.Drawing.Size(110, 49); - this.NotaCreditoRefs.TabIndex = 4; - this.NotaCreditoRefs.Text = "Crear nota de credito por referencias"; - this.NotaCreditoRefs.UseVisualStyleBackColor = true; - this.NotaCreditoRefs.Click += new System.EventHandler(this.NotaCreditoRefs_Click); - // - // CfdiPagoRefs - // - this.CfdiPagoRefs.Location = new System.Drawing.Point(244, 129); - this.CfdiPagoRefs.Name = "CfdiPagoRefs"; - this.CfdiPagoRefs.Size = new System.Drawing.Size(110, 49); - this.CfdiPagoRefs.TabIndex = 6; - this.CfdiPagoRefs.Text = "Crear complemento de pago por referencias"; - this.CfdiPagoRefs.UseVisualStyleBackColor = true; - this.CfdiPagoRefs.Click += new System.EventHandler(this.FacturaComplementoPagoRefs_Click); - // - // CfdiPagoValores - // - this.CfdiPagoValores.Location = new System.Drawing.Point(128, 129); - this.CfdiPagoValores.Name = "CfdiPagoValores"; - this.CfdiPagoValores.Size = new System.Drawing.Size(110, 49); - this.CfdiPagoValores.TabIndex = 5; - this.CfdiPagoValores.Text = "Crear complemento de pago por valores"; - this.CfdiPagoValores.UseVisualStyleBackColor = true; - this.CfdiPagoValores.Click += new System.EventHandler(this.FacturaComplementoValores_Click); - // - // GenerarPDFValores - // - this.GenerarPDFValores.Location = new System.Drawing.Point(12, 74); - this.GenerarPDFValores.Name = "GenerarPDFValores"; - this.GenerarPDFValores.Size = new System.Drawing.Size(110, 49); - this.GenerarPDFValores.TabIndex = 7; - this.GenerarPDFValores.Text = "Generar PDF por valores"; - this.GenerarPDFValores.UseVisualStyleBackColor = true; - this.GenerarPDFValores.Click += new System.EventHandler(this.GenerarPDFValores_Click); - // - // CancelByValues - // - this.CancelByValues.Location = new System.Drawing.Point(128, 190); - this.CancelByValues.Name = "CancelByValues"; - this.CancelByValues.Size = new System.Drawing.Size(110, 49); - this.CancelByValues.TabIndex = 8; - this.CancelByValues.Text = "Cancelar factua por valores"; - this.CancelByValues.UseVisualStyleBackColor = true; - this.CancelByValues.Click += new System.EventHandler(this.CancelByValues_Click); - // - // button1 - // - this.button1.Location = new System.Drawing.Point(244, 190); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(110, 49); - this.button1.TabIndex = 9; - this.button1.Text = "Cancelar factua por referencias"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.CancelByRefs_Click); - // - // GenerarPDFRefs - // - this.GenerarPDFRefs.Location = new System.Drawing.Point(12, 129); - this.GenerarPDFRefs.Name = "GenerarPDFRefs"; - this.GenerarPDFRefs.Size = new System.Drawing.Size(110, 49); - this.GenerarPDFRefs.TabIndex = 10; - this.GenerarPDFRefs.Text = "Generar PDF por referencia"; - this.GenerarPDFRefs.UseVisualStyleBackColor = true; - this.GenerarPDFRefs.Click += new System.EventHandler(this.GenerarPDFRefs_Click); - // // ObtenerFacturaXMLById // - this.ObtenerFacturaXMLById.Location = new System.Drawing.Point(12, 190); + this.ObtenerFacturaXMLById.Location = new System.Drawing.Point(162, 88); + this.ObtenerFacturaXMLById.Margin = new System.Windows.Forms.Padding(4); this.ObtenerFacturaXMLById.Name = "ObtenerFacturaXMLById"; - this.ObtenerFacturaXMLById.Size = new System.Drawing.Size(110, 49); + this.ObtenerFacturaXMLById.Size = new System.Drawing.Size(147, 60); this.ObtenerFacturaXMLById.TabIndex = 11; this.ObtenerFacturaXMLById.Text = "Obtener Factura XML By Id"; this.ObtenerFacturaXMLById.UseVisualStyleBackColor = true; this.ObtenerFacturaXMLById.Click += new System.EventHandler(this.ObtenerFacturaXMLById_Click); // - // EnviarPorValores - // - this.EnviarPorValores.Location = new System.Drawing.Point(12, 300); - this.EnviarPorValores.Name = "EnviarPorValores"; - this.EnviarPorValores.Size = new System.Drawing.Size(110, 49); - this.EnviarPorValores.TabIndex = 12; - this.EnviarPorValores.Text = "Enviar factura por Email por valores"; - this.EnviarPorValores.UseVisualStyleBackColor = true; - this.EnviarPorValores.Click += new System.EventHandler(this.EnviarPorValores_Click); - // - // EnviarPorReferencia - // - this.EnviarPorReferencia.Location = new System.Drawing.Point(12, 355); - this.EnviarPorReferencia.Name = "EnviarPorReferencia"; - this.EnviarPorReferencia.Size = new System.Drawing.Size(110, 49); - this.EnviarPorReferencia.TabIndex = 13; - this.EnviarPorReferencia.Text = "Enviar factura por Email por referencia"; - this.EnviarPorReferencia.UseVisualStyleBackColor = true; - this.EnviarPorReferencia.Click += new System.EventHandler(this.EnviarPorReferencia_Click); - // // groupBox2 // - this.groupBox2.Controls.Add(this.DynamicPriceInvoiceButton); - this.groupBox2.Controls.Add(this.DynamicPriceCreditNoteButton); - this.groupBox2.Controls.Add(this.GlobalInvoiceValbutton); - this.groupBox2.Controls.Add(this.GlobalInvoiceRefButton); - this.groupBox2.Controls.Add(this.ConsultarEstadoRefs); - this.groupBox2.Controls.Add(this.ConsultarEstadoValores); + this.groupBox2.Controls.Add(this.button11); + this.groupBox2.Controls.Add(this.button12); this.groupBox2.Controls.Add(this.ObtenerListaPaginadaInvoices); - this.groupBox2.Controls.Add(this.FacturaIngresoPorRefs); - this.groupBox2.Controls.Add(this.EnviarPorReferencia); this.groupBox2.Controls.Add(this.ObtenerFacturaById); - this.groupBox2.Controls.Add(this.EnviarPorValores); - this.groupBox2.Controls.Add(this.FacturaIngresoPorValores); this.groupBox2.Controls.Add(this.ObtenerFacturaXMLById); - this.groupBox2.Controls.Add(this.NotaCreditoValores); - this.groupBox2.Controls.Add(this.GenerarPDFRefs); - this.groupBox2.Controls.Add(this.NotaCreditoRefs); - this.groupBox2.Controls.Add(this.button1); - this.groupBox2.Controls.Add(this.CfdiPagoValores); - this.groupBox2.Controls.Add(this.CancelByValues); - this.groupBox2.Controls.Add(this.CfdiPagoRefs); - this.groupBox2.Controls.Add(this.GenerarPDFValores); - this.groupBox2.Location = new System.Drawing.Point(6, 6); + this.groupBox2.Location = new System.Drawing.Point(4, 8); + this.groupBox2.Margin = new System.Windows.Forms.Padding(4); this.groupBox2.Name = "groupBox2"; - this.groupBox2.Size = new System.Drawing.Size(367, 450); + this.groupBox2.Padding = new System.Windows.Forms.Padding(4); + this.groupBox2.Size = new System.Drawing.Size(320, 223); this.groupBox2.TabIndex = 16; this.groupBox2.TabStop = false; this.groupBox2.Text = "FACTURACION"; // - // DynamicPriceInvoiceButton - // - this.DynamicPriceInvoiceButton.Location = new System.Drawing.Point(244, 355); - this.DynamicPriceInvoiceButton.Name = "DynamicPriceInvoiceButton"; - this.DynamicPriceInvoiceButton.Size = new System.Drawing.Size(110, 49); - this.DynamicPriceInvoiceButton.TabIndex = 20; - this.DynamicPriceInvoiceButton.Text = "Factura con precios dinamicos"; - this.DynamicPriceInvoiceButton.UseVisualStyleBackColor = true; - this.DynamicPriceInvoiceButton.Click += new System.EventHandler(this.DynamicPriceInvoiceButton_Click); - // - // DynamicPriceCreditNoteButton - // - this.DynamicPriceCreditNoteButton.Location = new System.Drawing.Point(128, 355); - this.DynamicPriceCreditNoteButton.Name = "DynamicPriceCreditNoteButton"; - this.DynamicPriceCreditNoteButton.Size = new System.Drawing.Size(110, 49); - this.DynamicPriceCreditNoteButton.TabIndex = 19; - this.DynamicPriceCreditNoteButton.Text = "Nota de credito con precios dinamicos"; - this.DynamicPriceCreditNoteButton.UseVisualStyleBackColor = true; - this.DynamicPriceCreditNoteButton.Click += new System.EventHandler(this.DynamicPriceCreditNoteButton_Click); - // - // GlobalInvoiceValbutton - // - this.GlobalInvoiceValbutton.Location = new System.Drawing.Point(128, 245); - this.GlobalInvoiceValbutton.Name = "GlobalInvoiceValbutton"; - this.GlobalInvoiceValbutton.Size = new System.Drawing.Size(110, 49); - this.GlobalInvoiceValbutton.TabIndex = 17; - this.GlobalInvoiceValbutton.Text = "Crear ractura global por valores"; - this.GlobalInvoiceValbutton.UseVisualStyleBackColor = true; - this.GlobalInvoiceValbutton.Click += new System.EventHandler(this.GlobalInvoiceValbutton_Click); - // - // GlobalInvoiceRefButton - // - this.GlobalInvoiceRefButton.Location = new System.Drawing.Point(244, 245); - this.GlobalInvoiceRefButton.Name = "GlobalInvoiceRefButton"; - this.GlobalInvoiceRefButton.Size = new System.Drawing.Size(110, 49); - this.GlobalInvoiceRefButton.TabIndex = 18; - this.GlobalInvoiceRefButton.Text = "Crear ractura global por referencias"; - this.GlobalInvoiceRefButton.UseVisualStyleBackColor = true; - this.GlobalInvoiceRefButton.Click += new System.EventHandler(this.GlobalInvoiceRefButton_Click); - // - // ConsultarEstadoRefs - // - this.ConsultarEstadoRefs.Location = new System.Drawing.Point(244, 300); - this.ConsultarEstadoRefs.Name = "ConsultarEstadoRefs"; - this.ConsultarEstadoRefs.Size = new System.Drawing.Size(110, 49); - this.ConsultarEstadoRefs.TabIndex = 16; - this.ConsultarEstadoRefs.Text = "Consultar estado de factua por referencias"; - this.ConsultarEstadoRefs.UseVisualStyleBackColor = true; - this.ConsultarEstadoRefs.Click += new System.EventHandler(this.ConsultarEstadoRefs_Click); - // - // ConsultarEstadoValores - // - this.ConsultarEstadoValores.Location = new System.Drawing.Point(128, 300); - this.ConsultarEstadoValores.Name = "ConsultarEstadoValores"; - this.ConsultarEstadoValores.Size = new System.Drawing.Size(110, 49); - this.ConsultarEstadoValores.TabIndex = 15; - this.ConsultarEstadoValores.Text = "Consultar estado de factua por valores"; - this.ConsultarEstadoValores.UseVisualStyleBackColor = true; - this.ConsultarEstadoValores.Click += new System.EventHandler(this.ConsultarEstadoValores_Click); + // button11 + // + this.button11.Location = new System.Drawing.Point(7, 88); + this.button11.Name = "button11"; + this.button11.Size = new System.Drawing.Size(147, 60); + this.button11.TabIndex = 22; + this.button11.Text = "Facturación por referencias"; + this.button11.UseVisualStyleBackColor = true; + this.button11.Click += new System.EventHandler(this.button11_Click); + // + // button12 + // + this.button12.Location = new System.Drawing.Point(7, 22); + this.button12.Name = "button12"; + this.button12.Size = new System.Drawing.Size(147, 60); + this.button12.TabIndex = 21; + this.button12.Text = "Facturación por valores"; + this.button12.UseVisualStyleBackColor = true; + this.button12.Click += new System.EventHandler(this.button12_Click); // // ObtenerListaPaginadaInvoices // - this.ObtenerListaPaginadaInvoices.Location = new System.Drawing.Point(12, 245); + this.ObtenerListaPaginadaInvoices.Location = new System.Drawing.Point(162, 23); + this.ObtenerListaPaginadaInvoices.Margin = new System.Windows.Forms.Padding(4); this.ObtenerListaPaginadaInvoices.Name = "ObtenerListaPaginadaInvoices"; - this.ObtenerListaPaginadaInvoices.Size = new System.Drawing.Size(110, 49); + this.ObtenerListaPaginadaInvoices.Size = new System.Drawing.Size(147, 60); this.ObtenerListaPaginadaInvoices.TabIndex = 14; this.ObtenerListaPaginadaInvoices.Text = "Obtener Lista Paginada"; this.ObtenerListaPaginadaInvoices.UseVisualStyleBackColor = true; @@ -363,23 +195,50 @@ private void InitializeComponent() // // groupBox1 // + this.groupBox1.Controls.Add(this.button8); + this.groupBox1.Controls.Add(this.button7); this.groupBox1.Controls.Add(this.ObtenerListaPaginada); this.groupBox1.Controls.Add(this.BorrarPersona); this.groupBox1.Controls.Add(this.ActualizarPersona); this.groupBox1.Controls.Add(this.CrearPersona); this.groupBox1.Controls.Add(this.ObtenerPersonaPorID); - this.groupBox1.Location = new System.Drawing.Point(379, 6); + this.groupBox1.Location = new System.Drawing.Point(4, 324); + this.groupBox1.Margin = new System.Windows.Forms.Padding(4); this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(331, 249); + this.groupBox1.Padding = new System.Windows.Forms.Padding(4); + this.groupBox1.Size = new System.Drawing.Size(320, 314); this.groupBox1.TabIndex = 17; this.groupBox1.TabStop = false; this.groupBox1.Text = "PERSONAS (Emisores, receptores, usuarios, clientes etc)"; // + // button8 + // + this.button8.Location = new System.Drawing.Point(7, 106); + this.button8.Margin = new System.Windows.Forms.Padding(4); + this.button8.Name = "button8"; + this.button8.Size = new System.Drawing.Size(147, 60); + this.button8.TabIndex = 12; + this.button8.Text = "Datos de empleado"; + this.button8.UseVisualStyleBackColor = true; + this.button8.Click += new System.EventHandler(this.button8_Click); + // + // button7 + // + this.button7.Location = new System.Drawing.Point(8, 40); + this.button7.Margin = new System.Windows.Forms.Padding(4); + this.button7.Name = "button7"; + this.button7.Size = new System.Drawing.Size(147, 60); + this.button7.TabIndex = 11; + this.button7.Text = "Datos de empleador"; + this.button7.UseVisualStyleBackColor = true; + this.button7.Click += new System.EventHandler(this.button7_Click); + // // ObtenerListaPaginada // - this.ObtenerListaPaginada.Location = new System.Drawing.Point(6, 142); + this.ObtenerListaPaginada.Location = new System.Drawing.Point(7, 174); + this.ObtenerListaPaginada.Margin = new System.Windows.Forms.Padding(4); this.ObtenerListaPaginada.Name = "ObtenerListaPaginada"; - this.ObtenerListaPaginada.Size = new System.Drawing.Size(144, 50); + this.ObtenerListaPaginada.Size = new System.Drawing.Size(147, 60); this.ObtenerListaPaginada.TabIndex = 5; this.ObtenerListaPaginada.Text = "Obtener lista paginada"; this.ObtenerListaPaginada.UseVisualStyleBackColor = true; @@ -387,9 +246,10 @@ private void InitializeComponent() // // BorrarPersona // - this.BorrarPersona.Location = new System.Drawing.Point(181, 86); + this.BorrarPersona.Location = new System.Drawing.Point(162, 174); + this.BorrarPersona.Margin = new System.Windows.Forms.Padding(4); this.BorrarPersona.Name = "BorrarPersona"; - this.BorrarPersona.Size = new System.Drawing.Size(144, 50); + this.BorrarPersona.Size = new System.Drawing.Size(147, 60); this.BorrarPersona.TabIndex = 4; this.BorrarPersona.Text = "Borrar persona"; this.BorrarPersona.UseVisualStyleBackColor = true; @@ -397,9 +257,10 @@ private void InitializeComponent() // // ActualizarPersona // - this.ActualizarPersona.Location = new System.Drawing.Point(181, 30); + this.ActualizarPersona.Location = new System.Drawing.Point(162, 40); + this.ActualizarPersona.Margin = new System.Windows.Forms.Padding(4); this.ActualizarPersona.Name = "ActualizarPersona"; - this.ActualizarPersona.Size = new System.Drawing.Size(144, 50); + this.ActualizarPersona.Size = new System.Drawing.Size(147, 60); this.ActualizarPersona.TabIndex = 3; this.ActualizarPersona.Text = "Actualizar persona"; this.ActualizarPersona.UseVisualStyleBackColor = true; @@ -407,9 +268,10 @@ private void InitializeComponent() // // CrearPersona // - this.CrearPersona.Location = new System.Drawing.Point(6, 30); + this.CrearPersona.Location = new System.Drawing.Point(162, 106); + this.CrearPersona.Margin = new System.Windows.Forms.Padding(4); this.CrearPersona.Name = "CrearPersona"; - this.CrearPersona.Size = new System.Drawing.Size(144, 50); + this.CrearPersona.Size = new System.Drawing.Size(147, 60); this.CrearPersona.TabIndex = 2; this.CrearPersona.Text = "Crear Persona"; this.CrearPersona.UseVisualStyleBackColor = true; @@ -417,29 +279,21 @@ private void InitializeComponent() // // ObtenerPersonaPorID // - this.ObtenerPersonaPorID.Location = new System.Drawing.Point(6, 86); + this.ObtenerPersonaPorID.Location = new System.Drawing.Point(7, 242); + this.ObtenerPersonaPorID.Margin = new System.Windows.Forms.Padding(4); this.ObtenerPersonaPorID.Name = "ObtenerPersonaPorID"; - this.ObtenerPersonaPorID.Size = new System.Drawing.Size(144, 50); + this.ObtenerPersonaPorID.Size = new System.Drawing.Size(147, 60); this.ObtenerPersonaPorID.TabIndex = 1; this.ObtenerPersonaPorID.Text = "Obtener persona por ID"; this.ObtenerPersonaPorID.UseVisualStyleBackColor = true; this.ObtenerPersonaPorID.Click += new System.EventHandler(this.ObtenerPersonaPorID_Click); // - // ObtenerUltimosCertficadosValidos - // - this.ObtenerUltimosCertficadosValidos.Location = new System.Drawing.Point(181, 19); - this.ObtenerUltimosCertficadosValidos.Name = "ObtenerUltimosCertficadosValidos"; - this.ObtenerUltimosCertficadosValidos.Size = new System.Drawing.Size(144, 50); - this.ObtenerUltimosCertficadosValidos.TabIndex = 9; - this.ObtenerUltimosCertficadosValidos.Text = "Obtener ultimos certficados validos de una persona"; - this.ObtenerUltimosCertficadosValidos.UseVisualStyleBackColor = true; - this.ObtenerUltimosCertficadosValidos.Click += new System.EventHandler(this.CertDefaultValues_Click); - // // EliEliminaCertificado // - this.EliEliminaCertificado.Location = new System.Drawing.Point(181, 131); + this.EliEliminaCertificado.Location = new System.Drawing.Point(194, 91); + this.EliEliminaCertificado.Margin = new System.Windows.Forms.Padding(4); this.EliEliminaCertificado.Name = "EliEliminaCertificado"; - this.EliEliminaCertificado.Size = new System.Drawing.Size(144, 50); + this.EliEliminaCertificado.Size = new System.Drawing.Size(147, 60); this.EliEliminaCertificado.TabIndex = 8; this.EliEliminaCertificado.Text = "Elimina Certificado de una persona"; this.EliEliminaCertificado.UseVisualStyleBackColor = true; @@ -447,9 +301,10 @@ private void InitializeComponent() // // ObtenerCertificadoById // - this.ObtenerCertificadoById.Location = new System.Drawing.Point(6, 75); + this.ObtenerCertificadoById.Location = new System.Drawing.Point(7, 91); + this.ObtenerCertificadoById.Margin = new System.Windows.Forms.Padding(4); this.ObtenerCertificadoById.Name = "ObtenerCertificadoById"; - this.ObtenerCertificadoById.Size = new System.Drawing.Size(144, 50); + this.ObtenerCertificadoById.Size = new System.Drawing.Size(147, 60); this.ObtenerCertificadoById.TabIndex = 7; this.ObtenerCertificadoById.Text = "Obtener Certificado by Id"; this.ObtenerCertificadoById.UseVisualStyleBackColor = true; @@ -457,9 +312,10 @@ private void InitializeComponent() // // CargarCertificados // - this.CargarCertificados.Location = new System.Drawing.Point(6, 19); + this.CargarCertificados.Location = new System.Drawing.Point(194, 23); + this.CargarCertificados.Margin = new System.Windows.Forms.Padding(4); this.CargarCertificados.Name = "CargarCertificados"; - this.CargarCertificados.Size = new System.Drawing.Size(144, 50); + this.CargarCertificados.Size = new System.Drawing.Size(147, 60); this.CargarCertificados.TabIndex = 6; this.CargarCertificados.Text = "Crear certificado (cargar cert a una persona)"; this.CargarCertificados.UseVisualStyleBackColor = true; @@ -467,6 +323,7 @@ private void InitializeComponent() // // groupBox3 // + this.groupBox3.Anchor = System.Windows.Forms.AnchorStyles.None; this.groupBox3.Controls.Add(this.ActualizarImpuestosProducto); this.groupBox3.Controls.Add(this.ObtenerImpuestosProducto); this.groupBox3.Controls.Add(this.ObtenerProductosPagedList); @@ -474,18 +331,22 @@ private void InitializeComponent() this.groupBox3.Controls.Add(this.ActualizarProducto); this.groupBox3.Controls.Add(this.CrearProducto); this.groupBox3.Controls.Add(this.ObtenerProductoById); - this.groupBox3.Location = new System.Drawing.Point(716, 6); + this.groupBox3.Location = new System.Drawing.Point(332, 493); + this.groupBox3.Margin = new System.Windows.Forms.Padding(4); this.groupBox3.Name = "groupBox3"; - this.groupBox3.Size = new System.Drawing.Size(354, 249); + this.groupBox3.Padding = new System.Windows.Forms.Padding(4); + this.groupBox3.Size = new System.Drawing.Size(373, 310); this.groupBox3.TabIndex = 18; this.groupBox3.TabStop = false; this.groupBox3.Text = "Productos"; // // ActualizarImpuestosProducto // - this.ActualizarImpuestosProducto.Location = new System.Drawing.Point(156, 75); + this.ActualizarImpuestosProducto.Anchor = System.Windows.Forms.AnchorStyles.None; + this.ActualizarImpuestosProducto.Location = new System.Drawing.Point(199, 156); + this.ActualizarImpuestosProducto.Margin = new System.Windows.Forms.Padding(4); this.ActualizarImpuestosProducto.Name = "ActualizarImpuestosProducto"; - this.ActualizarImpuestosProducto.Size = new System.Drawing.Size(144, 50); + this.ActualizarImpuestosProducto.Size = new System.Drawing.Size(147, 60); this.ActualizarImpuestosProducto.TabIndex = 12; this.ActualizarImpuestosProducto.Text = "Actualizar impuestos"; this.ActualizarImpuestosProducto.UseVisualStyleBackColor = true; @@ -493,9 +354,11 @@ private void InitializeComponent() // // ObtenerImpuestosProducto // - this.ObtenerImpuestosProducto.Location = new System.Drawing.Point(156, 19); + this.ObtenerImpuestosProducto.Anchor = System.Windows.Forms.AnchorStyles.None; + this.ObtenerImpuestosProducto.Location = new System.Drawing.Point(12, 156); + this.ObtenerImpuestosProducto.Margin = new System.Windows.Forms.Padding(4); this.ObtenerImpuestosProducto.Name = "ObtenerImpuestosProducto"; - this.ObtenerImpuestosProducto.Size = new System.Drawing.Size(144, 50); + this.ObtenerImpuestosProducto.Size = new System.Drawing.Size(147, 60); this.ObtenerImpuestosProducto.TabIndex = 11; this.ObtenerImpuestosProducto.Text = "Obtener impuestos"; this.ObtenerImpuestosProducto.UseVisualStyleBackColor = true; @@ -503,9 +366,11 @@ private void InitializeComponent() // // ObtenerProductosPagedList // - this.ObtenerProductosPagedList.Location = new System.Drawing.Point(6, 75); + this.ObtenerProductosPagedList.Anchor = System.Windows.Forms.AnchorStyles.None; + this.ObtenerProductosPagedList.Location = new System.Drawing.Point(12, 21); + this.ObtenerProductosPagedList.Margin = new System.Windows.Forms.Padding(4); this.ObtenerProductosPagedList.Name = "ObtenerProductosPagedList"; - this.ObtenerProductosPagedList.Size = new System.Drawing.Size(144, 50); + this.ObtenerProductosPagedList.Size = new System.Drawing.Size(147, 60); this.ObtenerProductosPagedList.TabIndex = 10; this.ObtenerProductosPagedList.Text = "Obtener lista paginada"; this.ObtenerProductosPagedList.UseVisualStyleBackColor = true; @@ -513,9 +378,11 @@ private void InitializeComponent() // // BorrarProducto // - this.BorrarProducto.Location = new System.Drawing.Point(156, 131); + this.BorrarProducto.Anchor = System.Windows.Forms.AnchorStyles.None; + this.BorrarProducto.Location = new System.Drawing.Point(199, 88); + this.BorrarProducto.Margin = new System.Windows.Forms.Padding(4); this.BorrarProducto.Name = "BorrarProducto"; - this.BorrarProducto.Size = new System.Drawing.Size(144, 50); + this.BorrarProducto.Size = new System.Drawing.Size(147, 60); this.BorrarProducto.TabIndex = 9; this.BorrarProducto.Text = "Borrar producto"; this.BorrarProducto.UseVisualStyleBackColor = true; @@ -523,9 +390,11 @@ private void InitializeComponent() // // ActualizarProducto // - this.ActualizarProducto.Location = new System.Drawing.Point(6, 184); + this.ActualizarProducto.Anchor = System.Windows.Forms.AnchorStyles.None; + this.ActualizarProducto.Location = new System.Drawing.Point(199, 22); + this.ActualizarProducto.Margin = new System.Windows.Forms.Padding(4); this.ActualizarProducto.Name = "ActualizarProducto"; - this.ActualizarProducto.Size = new System.Drawing.Size(144, 50); + this.ActualizarProducto.Size = new System.Drawing.Size(147, 60); this.ActualizarProducto.TabIndex = 8; this.ActualizarProducto.Text = "Actualizar producto"; this.ActualizarProducto.UseVisualStyleBackColor = true; @@ -533,9 +402,11 @@ private void InitializeComponent() // // CrearProducto // - this.CrearProducto.Location = new System.Drawing.Point(6, 128); + this.CrearProducto.Anchor = System.Windows.Forms.AnchorStyles.None; + this.CrearProducto.Location = new System.Drawing.Point(13, 224); + this.CrearProducto.Margin = new System.Windows.Forms.Padding(4); this.CrearProducto.Name = "CrearProducto"; - this.CrearProducto.Size = new System.Drawing.Size(144, 50); + this.CrearProducto.Size = new System.Drawing.Size(147, 60); this.CrearProducto.TabIndex = 7; this.CrearProducto.Text = "Crear producto"; this.CrearProducto.UseVisualStyleBackColor = true; @@ -543,9 +414,11 @@ private void InitializeComponent() // // ObtenerProductoById // - this.ObtenerProductoById.Location = new System.Drawing.Point(6, 19); + this.ObtenerProductoById.Anchor = System.Windows.Forms.AnchorStyles.None; + this.ObtenerProductoById.Location = new System.Drawing.Point(12, 88); + this.ObtenerProductoById.Margin = new System.Windows.Forms.Padding(4); this.ObtenerProductoById.Name = "ObtenerProductoById"; - this.ObtenerProductoById.Size = new System.Drawing.Size(144, 50); + this.ObtenerProductoById.Size = new System.Drawing.Size(147, 60); this.ObtenerProductoById.TabIndex = 6; this.ObtenerProductoById.Text = "Obtener producto por ID"; this.ObtenerProductoById.UseVisualStyleBackColor = true; @@ -558,18 +431,21 @@ private void InitializeComponent() this.groupBox4.Controls.Add(this.RevocaApikey); this.groupBox4.Controls.Add(this.CrearApikey); this.groupBox4.Controls.Add(this.ObtenerApikeyByID); - this.groupBox4.Location = new System.Drawing.Point(6, 462); + this.groupBox4.Location = new System.Drawing.Point(712, 341); + this.groupBox4.Margin = new System.Windows.Forms.Padding(4); this.groupBox4.Name = "groupBox4"; - this.groupBox4.Size = new System.Drawing.Size(1059, 97); + this.groupBox4.Padding = new System.Windows.Forms.Padding(4); + this.groupBox4.Size = new System.Drawing.Size(181, 462); this.groupBox4.TabIndex = 19; this.groupBox4.TabStop = false; this.groupBox4.Text = "Api Keys"; // // UpdateApiKey // - this.UpdateApiKey.Location = new System.Drawing.Point(461, 19); + this.UpdateApiKey.Location = new System.Drawing.Point(7, 295); + this.UpdateApiKey.Margin = new System.Windows.Forms.Padding(4); this.UpdateApiKey.Name = "UpdateApiKey"; - this.UpdateApiKey.Size = new System.Drawing.Size(144, 50); + this.UpdateApiKey.Size = new System.Drawing.Size(147, 60); this.UpdateApiKey.TabIndex = 18; this.UpdateApiKey.Text = "Obtener api-key por ID"; this.UpdateApiKey.UseVisualStyleBackColor = true; @@ -577,9 +453,10 @@ private void InitializeComponent() // // ObtenerPagedListApikeys // - this.ObtenerPagedListApikeys.Location = new System.Drawing.Point(311, 19); + this.ObtenerPagedListApikeys.Location = new System.Drawing.Point(7, 227); + this.ObtenerPagedListApikeys.Margin = new System.Windows.Forms.Padding(4); this.ObtenerPagedListApikeys.Name = "ObtenerPagedListApikeys"; - this.ObtenerPagedListApikeys.Size = new System.Drawing.Size(144, 50); + this.ObtenerPagedListApikeys.Size = new System.Drawing.Size(147, 60); this.ObtenerPagedListApikeys.TabIndex = 17; this.ObtenerPagedListApikeys.Text = "Obtener lista paginada"; this.ObtenerPagedListApikeys.UseVisualStyleBackColor = true; @@ -587,9 +464,10 @@ private void InitializeComponent() // // RevocaApikey // - this.RevocaApikey.Location = new System.Drawing.Point(611, 19); + this.RevocaApikey.Location = new System.Drawing.Point(7, 159); + this.RevocaApikey.Margin = new System.Windows.Forms.Padding(4); this.RevocaApikey.Name = "RevocaApikey"; - this.RevocaApikey.Size = new System.Drawing.Size(144, 50); + this.RevocaApikey.Size = new System.Drawing.Size(147, 60); this.RevocaApikey.TabIndex = 15; this.RevocaApikey.Text = "Revocar ApiKey"; this.RevocaApikey.UseVisualStyleBackColor = true; @@ -597,9 +475,10 @@ private void InitializeComponent() // // CrearApikey // - this.CrearApikey.Location = new System.Drawing.Point(161, 19); + this.CrearApikey.Location = new System.Drawing.Point(7, 91); + this.CrearApikey.Margin = new System.Windows.Forms.Padding(4); this.CrearApikey.Name = "CrearApikey"; - this.CrearApikey.Size = new System.Drawing.Size(144, 50); + this.CrearApikey.Size = new System.Drawing.Size(147, 60); this.CrearApikey.TabIndex = 14; this.CrearApikey.Text = "Crear ApiKey"; this.CrearApikey.UseVisualStyleBackColor = true; @@ -607,9 +486,10 @@ private void InitializeComponent() // // ObtenerApikeyByID // - this.ObtenerApikeyByID.Location = new System.Drawing.Point(11, 19); + this.ObtenerApikeyByID.Location = new System.Drawing.Point(7, 23); + this.ObtenerApikeyByID.Margin = new System.Windows.Forms.Padding(4); this.ObtenerApikeyByID.Name = "ObtenerApikeyByID"; - this.ObtenerApikeyByID.Size = new System.Drawing.Size(144, 50); + this.ObtenerApikeyByID.Size = new System.Drawing.Size(147, 60); this.ObtenerApikeyByID.TabIndex = 13; this.ObtenerApikeyByID.Text = "Obtener api-key por ID"; this.ObtenerApikeyByID.UseVisualStyleBackColor = true; @@ -622,18 +502,21 @@ private void InitializeComponent() this.groupBox5.Controls.Add(this.BuscarCatalogo); this.groupBox5.Controls.Add(this.BuscarCodigoUnidad); this.groupBox5.Controls.Add(this.BuscarCodigoProductoServicio); - this.groupBox5.Location = new System.Drawing.Point(716, 264); + this.groupBox5.Location = new System.Drawing.Point(332, 8); + this.groupBox5.Margin = new System.Windows.Forms.Padding(4); this.groupBox5.Name = "groupBox5"; - this.groupBox5.Size = new System.Drawing.Size(354, 192); + this.groupBox5.Padding = new System.Windows.Forms.Padding(4); + this.groupBox5.Size = new System.Drawing.Size(373, 223); this.groupBox5.TabIndex = 20; this.groupBox5.TabStop = false; - this.groupBox5.Text = "Catalogos"; + this.groupBox5.Text = "CATALOGOS"; // // ObtenerCatalogRecordPorId // - this.ObtenerCatalogRecordPorId.Location = new System.Drawing.Point(11, 76); + this.ObtenerCatalogRecordPorId.Location = new System.Drawing.Point(194, 88); + this.ObtenerCatalogRecordPorId.Margin = new System.Windows.Forms.Padding(4); this.ObtenerCatalogRecordPorId.Name = "ObtenerCatalogRecordPorId"; - this.ObtenerCatalogRecordPorId.Size = new System.Drawing.Size(144, 50); + this.ObtenerCatalogRecordPorId.Size = new System.Drawing.Size(147, 60); this.ObtenerCatalogRecordPorId.TabIndex = 19; this.ObtenerCatalogRecordPorId.Text = "Obtener registro por Id"; this.ObtenerCatalogRecordPorId.UseVisualStyleBackColor = true; @@ -641,9 +524,10 @@ private void InitializeComponent() // // ObtenerCatalogosDisponibles // - this.ObtenerCatalogosDisponibles.Location = new System.Drawing.Point(11, 19); + this.ObtenerCatalogosDisponibles.Location = new System.Drawing.Point(7, 156); + this.ObtenerCatalogosDisponibles.Margin = new System.Windows.Forms.Padding(4); this.ObtenerCatalogosDisponibles.Name = "ObtenerCatalogosDisponibles"; - this.ObtenerCatalogosDisponibles.Size = new System.Drawing.Size(144, 50); + this.ObtenerCatalogosDisponibles.Size = new System.Drawing.Size(147, 60); this.ObtenerCatalogosDisponibles.TabIndex = 18; this.ObtenerCatalogosDisponibles.Text = "Obtener Catalogos disponibles"; this.ObtenerCatalogosDisponibles.UseVisualStyleBackColor = true; @@ -651,9 +535,10 @@ private void InitializeComponent() // // BuscarCatalogo // - this.BuscarCatalogo.Location = new System.Drawing.Point(161, 131); + this.BuscarCatalogo.Location = new System.Drawing.Point(194, 21); + this.BuscarCatalogo.Margin = new System.Windows.Forms.Padding(4); this.BuscarCatalogo.Name = "BuscarCatalogo"; - this.BuscarCatalogo.Size = new System.Drawing.Size(144, 50); + this.BuscarCatalogo.Size = new System.Drawing.Size(147, 60); this.BuscarCatalogo.TabIndex = 17; this.BuscarCatalogo.Text = "Buscar en cualquier catalogo SAT"; this.BuscarCatalogo.UseVisualStyleBackColor = true; @@ -661,9 +546,10 @@ private void InitializeComponent() // // BuscarCodigoUnidad // - this.BuscarCodigoUnidad.Location = new System.Drawing.Point(161, 75); + this.BuscarCodigoUnidad.Location = new System.Drawing.Point(7, 88); + this.BuscarCodigoUnidad.Margin = new System.Windows.Forms.Padding(4); this.BuscarCodigoUnidad.Name = "BuscarCodigoUnidad"; - this.BuscarCodigoUnidad.Size = new System.Drawing.Size(144, 50); + this.BuscarCodigoUnidad.Size = new System.Drawing.Size(147, 60); this.BuscarCodigoUnidad.TabIndex = 14; this.BuscarCodigoUnidad.Text = "Buscar Codigo Unidad"; this.BuscarCodigoUnidad.UseVisualStyleBackColor = true; @@ -671,9 +557,10 @@ private void InitializeComponent() // // BuscarCodigoProductoServicio // - this.BuscarCodigoProductoServicio.Location = new System.Drawing.Point(161, 19); + this.BuscarCodigoProductoServicio.Location = new System.Drawing.Point(7, 21); + this.BuscarCodigoProductoServicio.Margin = new System.Windows.Forms.Padding(4); this.BuscarCodigoProductoServicio.Name = "BuscarCodigoProductoServicio"; - this.BuscarCodigoProductoServicio.Size = new System.Drawing.Size(144, 50); + this.BuscarCodigoProductoServicio.Size = new System.Drawing.Size(147, 60); this.BuscarCodigoProductoServicio.TabIndex = 13; this.BuscarCodigoProductoServicio.Text = "Buscar Codigo Producto Servicio"; this.BuscarCodigoProductoServicio.UseVisualStyleBackColor = true; @@ -686,19 +573,21 @@ private void InitializeComponent() this.groupBox6.Controls.Add(this.CargarCertificados); this.groupBox6.Controls.Add(this.ObtenerCertificadoById); this.groupBox6.Controls.Add(this.EliEliminaCertificado); - this.groupBox6.Controls.Add(this.ObtenerUltimosCertficadosValidos); - this.groupBox6.Location = new System.Drawing.Point(379, 264); + this.groupBox6.Location = new System.Drawing.Point(332, 240); + this.groupBox6.Margin = new System.Windows.Forms.Padding(4); this.groupBox6.Name = "groupBox6"; - this.groupBox6.Size = new System.Drawing.Size(331, 192); + this.groupBox6.Padding = new System.Windows.Forms.Padding(4); + this.groupBox6.Size = new System.Drawing.Size(373, 245); this.groupBox6.TabIndex = 21; this.groupBox6.TabStop = false; this.groupBox6.Text = "Certificados (sellos)"; // // CertDefaultRefs // - this.CertDefaultRefs.Location = new System.Drawing.Point(181, 75); + this.CertDefaultRefs.Location = new System.Drawing.Point(8, 163); + this.CertDefaultRefs.Margin = new System.Windows.Forms.Padding(4); this.CertDefaultRefs.Name = "CertDefaultRefs"; - this.CertDefaultRefs.Size = new System.Drawing.Size(144, 50); + this.CertDefaultRefs.Size = new System.Drawing.Size(147, 60); this.CertDefaultRefs.TabIndex = 11; this.CertDefaultRefs.Text = "Obtener ultimos id de certficados validos de una persona"; this.CertDefaultRefs.UseVisualStyleBackColor = true; @@ -706,9 +595,10 @@ private void InitializeComponent() // // button2 // - this.button2.Location = new System.Drawing.Point(6, 131); + this.button2.Location = new System.Drawing.Point(7, 23); + this.button2.Margin = new System.Windows.Forms.Padding(4); this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(144, 50); + this.button2.Size = new System.Drawing.Size(147, 60); this.button2.TabIndex = 10; this.button2.Text = "Obtener lista paginada"; this.button2.UseVisualStyleBackColor = true; @@ -720,40 +610,201 @@ private void InitializeComponent() this.tabControl1.Controls.Add(this.tabPage2); this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; this.tabControl1.Location = new System.Drawing.Point(0, 0); + this.tabControl1.Margin = new System.Windows.Forms.Padding(4); this.tabControl1.Name = "tabControl1"; this.tabControl1.SelectedIndex = 0; - this.tabControl1.Size = new System.Drawing.Size(1143, 637); + this.tabControl1.Size = new System.Drawing.Size(906, 848); this.tabControl1.TabIndex = 0; // // tabPage1 // + this.tabPage1.Controls.Add(this.groupBox10); + this.tabPage1.Controls.Add(this.groupBox13); + this.tabPage1.Controls.Add(this.groupBox12); this.tabPage1.Controls.Add(this.groupBox2); this.tabPage1.Controls.Add(this.groupBox6); - this.tabPage1.Controls.Add(this.groupBox1); - this.tabPage1.Controls.Add(this.groupBox5); this.tabPage1.Controls.Add(this.groupBox3); this.tabPage1.Controls.Add(this.groupBox4); - this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Controls.Add(this.groupBox1); + this.tabPage1.Controls.Add(this.groupBox5); + this.tabPage1.Location = new System.Drawing.Point(4, 25); + this.tabPage1.Margin = new System.Windows.Forms.Padding(4); this.tabPage1.Name = "tabPage1"; - this.tabPage1.Padding = new System.Windows.Forms.Padding(3); - this.tabPage1.Size = new System.Drawing.Size(1135, 611); + this.tabPage1.Padding = new System.Windows.Forms.Padding(4); + this.tabPage1.Size = new System.Drawing.Size(898, 819); this.tabPage1.TabIndex = 0; this.tabPage1.Text = "FACTURACION"; this.tabPage1.UseVisualStyleBackColor = true; // + // groupBox10 + // + this.groupBox10.Controls.Add(this.groupBox11); + this.groupBox10.Controls.Add(this.button5); + this.groupBox10.Controls.Add(this.button4); + this.groupBox10.Location = new System.Drawing.Point(712, 8); + this.groupBox10.Name = "groupBox10"; + this.groupBox10.Size = new System.Drawing.Size(181, 326); + this.groupBox10.TabIndex = 24; + this.groupBox10.TabStop = false; + this.groupBox10.Text = "Descarga masiva"; + // + // groupBox11 + // + this.groupBox11.Controls.Add(this.button6); + this.groupBox11.Controls.Add(this.button3); + this.groupBox11.Location = new System.Drawing.Point(7, 22); + this.groupBox11.Name = "groupBox11"; + this.groupBox11.Size = new System.Drawing.Size(162, 159); + this.groupBox11.TabIndex = 21; + this.groupBox11.TabStop = false; + this.groupBox11.Text = "Catálogos"; + // + // button6 + // + this.button6.Location = new System.Drawing.Point(7, 90); + this.button6.Margin = new System.Windows.Forms.Padding(4); + this.button6.Name = "button6"; + this.button6.Size = new System.Drawing.Size(147, 60); + this.button6.TabIndex = 19; + this.button6.Text = "Listar catálogo"; + this.button6.UseVisualStyleBackColor = true; + this.button6.Click += new System.EventHandler(this.button6_Click_1); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(7, 22); + this.button3.Margin = new System.Windows.Forms.Padding(4); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(147, 60); + this.button3.TabIndex = 18; + this.button3.Text = "Listar catálogos"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click_1); + // + // button5 + // + this.button5.Location = new System.Drawing.Point(14, 256); + this.button5.Margin = new System.Windows.Forms.Padding(4); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(147, 60); + this.button5.TabIndex = 20; + this.button5.Text = "Solicitudes de descarga"; + this.button5.UseVisualStyleBackColor = true; + this.button5.Click += new System.EventHandler(this.button5_Click_1); + // + // button4 + // + this.button4.Location = new System.Drawing.Point(14, 188); + this.button4.Margin = new System.Windows.Forms.Padding(4); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(147, 60); + this.button4.TabIndex = 19; + this.button4.Text = "Reglas de descarga"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.button4_Click_1); + // + // groupBox13 + // + this.groupBox13.Controls.Add(this.button17); + this.groupBox13.Controls.Add(this.button16); + this.groupBox13.Controls.Add(this.button15); + this.groupBox13.Controls.Add(this.button14); + this.groupBox13.Location = new System.Drawing.Point(4, 645); + this.groupBox13.Name = "groupBox13"; + this.groupBox13.Size = new System.Drawing.Size(320, 158); + this.groupBox13.TabIndex = 23; + this.groupBox13.TabStop = false; + this.groupBox13.Text = "TIMBRES"; + // + // button17 + // + this.button17.Location = new System.Drawing.Point(162, 90); + this.button17.Margin = new System.Windows.Forms.Padding(4); + this.button17.Name = "button17"; + this.button17.Size = new System.Drawing.Size(147, 60); + this.button17.TabIndex = 17; + this.button17.Text = "Retirar timbres"; + this.button17.UseVisualStyleBackColor = true; + this.button17.Click += new System.EventHandler(this.button17_Click); + // + // button16 + // + this.button16.Location = new System.Drawing.Point(162, 22); + this.button16.Margin = new System.Windows.Forms.Padding(4); + this.button16.Name = "button16"; + this.button16.Size = new System.Drawing.Size(147, 60); + this.button16.TabIndex = 16; + this.button16.Text = "Transferir timbres"; + this.button16.UseVisualStyleBackColor = true; + this.button16.Click += new System.EventHandler(this.button16_Click); + // + // button15 + // + this.button15.Location = new System.Drawing.Point(7, 90); + this.button15.Margin = new System.Windows.Forms.Padding(4); + this.button15.Name = "button15"; + this.button15.Size = new System.Drawing.Size(147, 60); + this.button15.TabIndex = 15; + this.button15.Text = "Obtener movimiento por ID"; + this.button15.UseVisualStyleBackColor = true; + this.button15.Click += new System.EventHandler(this.button15_Click); + // + // button14 + // + this.button14.Location = new System.Drawing.Point(7, 22); + this.button14.Margin = new System.Windows.Forms.Padding(4); + this.button14.Name = "button14"; + this.button14.Size = new System.Drawing.Size(147, 60); + this.button14.TabIndex = 14; + this.button14.Text = "Listar movimientos"; + this.button14.UseVisualStyleBackColor = true; + this.button14.Click += new System.EventHandler(this.button14_Click); + // + // groupBox12 + // + this.groupBox12.Controls.Add(this.button13); + this.groupBox12.Controls.Add(this.button1); + this.groupBox12.Location = new System.Drawing.Point(4, 238); + this.groupBox12.Name = "groupBox12"; + this.groupBox12.Size = new System.Drawing.Size(320, 80); + this.groupBox12.TabIndex = 22; + this.groupBox12.TabStop = false; + this.groupBox12.Text = "CUENTA"; + // + // button13 + // + this.button13.Location = new System.Drawing.Point(7, 15); + this.button13.Margin = new System.Windows.Forms.Padding(4); + this.button13.Name = "button13"; + this.button13.Size = new System.Drawing.Size(147, 60); + this.button13.TabIndex = 13; + this.button13.Text = "Crear cuenta"; + this.button13.UseVisualStyleBackColor = true; + this.button13.Click += new System.EventHandler(this.button13_Click); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(162, 15); + this.button1.Margin = new System.Windows.Forms.Padding(4); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(147, 60); + this.button1.TabIndex = 12; + this.button1.Text = "Iniciar sesión"; + this.button1.UseVisualStyleBackColor = true; + // // tabPage2 // this.tabPage2.Controls.Add(this.groupBox9); this.tabPage2.Controls.Add(this.groupBox8); this.tabPage2.Controls.Add(this.groupBox7); - this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Location = new System.Drawing.Point(4, 25); + this.tabPage2.Margin = new System.Windows.Forms.Padding(4); this.tabPage2.Name = "tabPage2"; - this.tabPage2.Padding = new System.Windows.Forms.Padding(3); - this.tabPage2.Size = new System.Drawing.Size(1135, 611); + this.tabPage2.Padding = new System.Windows.Forms.Padding(4); + this.tabPage2.Size = new System.Drawing.Size(898, 819); this.tabPage2.TabIndex = 1; this.tabPage2.Text = "DESCARGA MASIVA XML"; this.tabPage2.UseVisualStyleBackColor = true; - // // groupBox9 // @@ -767,18 +818,32 @@ private void InitializeComponent() this.groupBox9.Controls.Add(this.ListarXmlsPorSolicitudID); this.groupBox9.Controls.Add(this.ObtenerSolicitudporID); this.groupBox9.Controls.Add(this.ListarSolicitudes); - this.groupBox9.Location = new System.Drawing.Point(3, 138); + this.groupBox9.Location = new System.Drawing.Point(4, 170); + this.groupBox9.Margin = new System.Windows.Forms.Padding(4); this.groupBox9.Name = "groupBox9"; - this.groupBox9.Size = new System.Drawing.Size(587, 164); + this.groupBox9.Padding = new System.Windows.Forms.Padding(4); + this.groupBox9.Size = new System.Drawing.Size(783, 202); this.groupBox9.TabIndex = 2; this.groupBox9.TabStop = false; this.groupBox9.Text = "Solicitudes de descarga"; // + // BuscarSolicitud + // + this.BuscarSolicitud.Location = new System.Drawing.Point(595, 85); + this.BuscarSolicitud.Margin = new System.Windows.Forms.Padding(4); + this.BuscarSolicitud.Name = "BuscarSolicitud"; + this.BuscarSolicitud.Size = new System.Drawing.Size(139, 54); + this.BuscarSolicitud.TabIndex = 11; + this.BuscarSolicitud.Text = "Buscar Solicitud"; + this.BuscarSolicitud.UseVisualStyleBackColor = true; + this.BuscarSolicitud.Click += new System.EventHandler(this.BuscarSolicitud_Click); + // // EliminarSolicitud // - this.EliminarSolicitud.Location = new System.Drawing.Point(336, 69); + this.EliminarSolicitud.Location = new System.Drawing.Point(448, 85); + this.EliminarSolicitud.Margin = new System.Windows.Forms.Padding(4); this.EliminarSolicitud.Name = "EliminarSolicitud"; - this.EliminarSolicitud.Size = new System.Drawing.Size(104, 44); + this.EliminarSolicitud.Size = new System.Drawing.Size(139, 54); this.EliminarSolicitud.TabIndex = 10; this.EliminarSolicitud.Text = "Eliminar Solicitud"; this.EliminarSolicitud.UseVisualStyleBackColor = true; @@ -786,9 +851,10 @@ private void InitializeComponent() // // CrearSolicitud // - this.CrearSolicitud.Location = new System.Drawing.Point(226, 69); + this.CrearSolicitud.Location = new System.Drawing.Point(301, 85); + this.CrearSolicitud.Margin = new System.Windows.Forms.Padding(4); this.CrearSolicitud.Name = "CrearSolicitud"; - this.CrearSolicitud.Size = new System.Drawing.Size(104, 44); + this.CrearSolicitud.Size = new System.Drawing.Size(139, 54); this.CrearSolicitud.TabIndex = 9; this.CrearSolicitud.Text = "Crear Solicitud"; this.CrearSolicitud.UseVisualStyleBackColor = true; @@ -796,9 +862,10 @@ private void InitializeComponent() // // ObtenerSATResponsePorSolicitudID // - this.ObtenerSATResponsePorSolicitudID.Location = new System.Drawing.Point(116, 69); + this.ObtenerSATResponsePorSolicitudID.Location = new System.Drawing.Point(155, 85); + this.ObtenerSATResponsePorSolicitudID.Margin = new System.Windows.Forms.Padding(4); this.ObtenerSATResponsePorSolicitudID.Name = "ObtenerSATResponsePorSolicitudID"; - this.ObtenerSATResponsePorSolicitudID.Size = new System.Drawing.Size(104, 44); + this.ObtenerSATResponsePorSolicitudID.Size = new System.Drawing.Size(139, 54); this.ObtenerSATResponsePorSolicitudID.TabIndex = 8; this.ObtenerSATResponsePorSolicitudID.Text = "Obtener SAT response por solicitud ID"; this.ObtenerSATResponsePorSolicitudID.UseVisualStyleBackColor = true; @@ -806,9 +873,10 @@ private void InitializeComponent() // // ObtenerSATRequestPorSolicitudID // - this.ObtenerSATRequestPorSolicitudID.Location = new System.Drawing.Point(6, 69); + this.ObtenerSATRequestPorSolicitudID.Location = new System.Drawing.Point(8, 85); + this.ObtenerSATRequestPorSolicitudID.Margin = new System.Windows.Forms.Padding(4); this.ObtenerSATRequestPorSolicitudID.Name = "ObtenerSATRequestPorSolicitudID"; - this.ObtenerSATRequestPorSolicitudID.Size = new System.Drawing.Size(104, 44); + this.ObtenerSATRequestPorSolicitudID.Size = new System.Drawing.Size(139, 54); this.ObtenerSATRequestPorSolicitudID.TabIndex = 7; this.ObtenerSATRequestPorSolicitudID.Text = "Obtener SAT request por solicitud ID"; this.ObtenerSATRequestPorSolicitudID.UseVisualStyleBackColor = true; @@ -816,9 +884,10 @@ private void InitializeComponent() // // DescargarPaquetePorSolicitudID // - this.DescargarPaquetePorSolicitudID.Location = new System.Drawing.Point(446, 19); + this.DescargarPaquetePorSolicitudID.Location = new System.Drawing.Point(595, 23); + this.DescargarPaquetePorSolicitudID.Margin = new System.Windows.Forms.Padding(4); this.DescargarPaquetePorSolicitudID.Name = "DescargarPaquetePorSolicitudID"; - this.DescargarPaquetePorSolicitudID.Size = new System.Drawing.Size(104, 44); + this.DescargarPaquetePorSolicitudID.Size = new System.Drawing.Size(139, 54); this.DescargarPaquetePorSolicitudID.TabIndex = 6; this.DescargarPaquetePorSolicitudID.Text = "Descargar paquete por solicitud ID"; this.DescargarPaquetePorSolicitudID.UseVisualStyleBackColor = true; @@ -826,9 +895,10 @@ private void InitializeComponent() // // ListarMetaItemsPorSolicitudID // - this.ListarMetaItemsPorSolicitudID.Location = new System.Drawing.Point(336, 19); + this.ListarMetaItemsPorSolicitudID.Location = new System.Drawing.Point(448, 23); + this.ListarMetaItemsPorSolicitudID.Margin = new System.Windows.Forms.Padding(4); this.ListarMetaItemsPorSolicitudID.Name = "ListarMetaItemsPorSolicitudID"; - this.ListarMetaItemsPorSolicitudID.Size = new System.Drawing.Size(104, 44); + this.ListarMetaItemsPorSolicitudID.Size = new System.Drawing.Size(139, 54); this.ListarMetaItemsPorSolicitudID.TabIndex = 5; this.ListarMetaItemsPorSolicitudID.Text = "Listar meta-items por solicitud ID"; this.ListarMetaItemsPorSolicitudID.UseVisualStyleBackColor = true; @@ -836,9 +906,10 @@ private void InitializeComponent() // // ListarXmlsPorSolicitudID // - this.ListarXmlsPorSolicitudID.Location = new System.Drawing.Point(226, 19); + this.ListarXmlsPorSolicitudID.Location = new System.Drawing.Point(301, 23); + this.ListarXmlsPorSolicitudID.Margin = new System.Windows.Forms.Padding(4); this.ListarXmlsPorSolicitudID.Name = "ListarXmlsPorSolicitudID"; - this.ListarXmlsPorSolicitudID.Size = new System.Drawing.Size(104, 44); + this.ListarXmlsPorSolicitudID.Size = new System.Drawing.Size(139, 54); this.ListarXmlsPorSolicitudID.TabIndex = 4; this.ListarXmlsPorSolicitudID.Text = "Listar xmls por solicitud ID"; this.ListarXmlsPorSolicitudID.UseVisualStyleBackColor = true; @@ -846,9 +917,10 @@ private void InitializeComponent() // // ObtenerSolicitudporID // - this.ObtenerSolicitudporID.Location = new System.Drawing.Point(116, 19); + this.ObtenerSolicitudporID.Location = new System.Drawing.Point(155, 23); + this.ObtenerSolicitudporID.Margin = new System.Windows.Forms.Padding(4); this.ObtenerSolicitudporID.Name = "ObtenerSolicitudporID"; - this.ObtenerSolicitudporID.Size = new System.Drawing.Size(104, 44); + this.ObtenerSolicitudporID.Size = new System.Drawing.Size(139, 54); this.ObtenerSolicitudporID.TabIndex = 3; this.ObtenerSolicitudporID.Text = "Obtener solicitud por ID"; this.ObtenerSolicitudporID.UseVisualStyleBackColor = true; @@ -856,9 +928,10 @@ private void InitializeComponent() // // ListarSolicitudes // - this.ListarSolicitudes.Location = new System.Drawing.Point(6, 19); + this.ListarSolicitudes.Location = new System.Drawing.Point(8, 23); + this.ListarSolicitudes.Margin = new System.Windows.Forms.Padding(4); this.ListarSolicitudes.Name = "ListarSolicitudes"; - this.ListarSolicitudes.Size = new System.Drawing.Size(104, 44); + this.ListarSolicitudes.Size = new System.Drawing.Size(139, 54); this.ListarSolicitudes.TabIndex = 2; this.ListarSolicitudes.Text = "Listar solicitudes"; this.ListarSolicitudes.UseVisualStyleBackColor = true; @@ -872,18 +945,21 @@ private void InitializeComponent() this.groupBox8.Controls.Add(this.CrearRegla); this.groupBox8.Controls.Add(this.ObtenerReglaporID); this.groupBox8.Controls.Add(this.ListarReglas); - this.groupBox8.Location = new System.Drawing.Point(252, 6); + this.groupBox8.Location = new System.Drawing.Point(336, 7); + this.groupBox8.Margin = new System.Windows.Forms.Padding(4); this.groupBox8.Name = "groupBox8"; - this.groupBox8.Size = new System.Drawing.Size(343, 126); + this.groupBox8.Padding = new System.Windows.Forms.Padding(4); + this.groupBox8.Size = new System.Drawing.Size(457, 155); this.groupBox8.TabIndex = 1; this.groupBox8.TabStop = false; this.groupBox8.Text = "Reglas de descarga"; // // EliminarRegla // - this.EliminarRegla.Location = new System.Drawing.Point(226, 69); + this.EliminarRegla.Location = new System.Drawing.Point(301, 85); + this.EliminarRegla.Margin = new System.Windows.Forms.Padding(4); this.EliminarRegla.Name = "EliminarRegla"; - this.EliminarRegla.Size = new System.Drawing.Size(104, 44); + this.EliminarRegla.Size = new System.Drawing.Size(139, 54); this.EliminarRegla.TabIndex = 6; this.EliminarRegla.Text = "Eliminar Regla"; this.EliminarRegla.UseVisualStyleBackColor = true; @@ -891,9 +967,10 @@ private void InitializeComponent() // // ActualizarRegla // - this.ActualizarRegla.Location = new System.Drawing.Point(116, 69); + this.ActualizarRegla.Location = new System.Drawing.Point(155, 85); + this.ActualizarRegla.Margin = new System.Windows.Forms.Padding(4); this.ActualizarRegla.Name = "ActualizarRegla"; - this.ActualizarRegla.Size = new System.Drawing.Size(104, 44); + this.ActualizarRegla.Size = new System.Drawing.Size(139, 54); this.ActualizarRegla.TabIndex = 5; this.ActualizarRegla.Text = "Actualizar Regla"; this.ActualizarRegla.UseVisualStyleBackColor = true; @@ -901,9 +978,10 @@ private void InitializeComponent() // // CrearReglaSolicituddePrueba // - this.CrearReglaSolicituddePrueba.Location = new System.Drawing.Point(6, 69); + this.CrearReglaSolicituddePrueba.Location = new System.Drawing.Point(8, 85); + this.CrearReglaSolicituddePrueba.Margin = new System.Windows.Forms.Padding(4); this.CrearReglaSolicituddePrueba.Name = "CrearReglaSolicituddePrueba"; - this.CrearReglaSolicituddePrueba.Size = new System.Drawing.Size(104, 44); + this.CrearReglaSolicituddePrueba.Size = new System.Drawing.Size(139, 54); this.CrearReglaSolicituddePrueba.TabIndex = 4; this.CrearReglaSolicituddePrueba.Text = "Crear regla y solicitud de prueba"; this.CrearReglaSolicituddePrueba.UseVisualStyleBackColor = true; @@ -911,9 +989,10 @@ private void InitializeComponent() // // CrearRegla // - this.CrearRegla.Location = new System.Drawing.Point(226, 19); + this.CrearRegla.Location = new System.Drawing.Point(301, 23); + this.CrearRegla.Margin = new System.Windows.Forms.Padding(4); this.CrearRegla.Name = "CrearRegla"; - this.CrearRegla.Size = new System.Drawing.Size(104, 44); + this.CrearRegla.Size = new System.Drawing.Size(139, 54); this.CrearRegla.TabIndex = 3; this.CrearRegla.Text = "Crear Regla"; this.CrearRegla.UseVisualStyleBackColor = true; @@ -921,9 +1000,10 @@ private void InitializeComponent() // // ObtenerReglaporID // - this.ObtenerReglaporID.Location = new System.Drawing.Point(116, 19); + this.ObtenerReglaporID.Location = new System.Drawing.Point(155, 23); + this.ObtenerReglaporID.Margin = new System.Windows.Forms.Padding(4); this.ObtenerReglaporID.Name = "ObtenerReglaporID"; - this.ObtenerReglaporID.Size = new System.Drawing.Size(104, 44); + this.ObtenerReglaporID.Size = new System.Drawing.Size(139, 54); this.ObtenerReglaporID.TabIndex = 2; this.ObtenerReglaporID.Text = "Obtener Regla por ID"; this.ObtenerReglaporID.UseVisualStyleBackColor = true; @@ -931,9 +1011,10 @@ private void InitializeComponent() // // ListarReglas // - this.ListarReglas.Location = new System.Drawing.Point(6, 19); + this.ListarReglas.Location = new System.Drawing.Point(8, 23); + this.ListarReglas.Margin = new System.Windows.Forms.Padding(4); this.ListarReglas.Name = "ListarReglas"; - this.ListarReglas.Size = new System.Drawing.Size(104, 44); + this.ListarReglas.Size = new System.Drawing.Size(139, 54); this.ListarReglas.TabIndex = 1; this.ListarReglas.Text = "Listar Reglas"; this.ListarReglas.UseVisualStyleBackColor = true; @@ -943,18 +1024,21 @@ private void InitializeComponent() // this.groupBox7.Controls.Add(this.ListarDownloadCatalogo); this.groupBox7.Controls.Add(this.ListarDownloadCatalogos); - this.groupBox7.Location = new System.Drawing.Point(8, 6); + this.groupBox7.Location = new System.Drawing.Point(11, 7); + this.groupBox7.Margin = new System.Windows.Forms.Padding(4); this.groupBox7.Name = "groupBox7"; - this.groupBox7.Size = new System.Drawing.Size(238, 126); + this.groupBox7.Padding = new System.Windows.Forms.Padding(4); + this.groupBox7.Size = new System.Drawing.Size(317, 155); this.groupBox7.TabIndex = 0; this.groupBox7.TabStop = false; this.groupBox7.Text = "Catalogos descarga masiva"; // // ListarDownloadCatalogo // - this.ListarDownloadCatalogo.Location = new System.Drawing.Point(116, 19); + this.ListarDownloadCatalogo.Location = new System.Drawing.Point(155, 23); + this.ListarDownloadCatalogo.Margin = new System.Windows.Forms.Padding(4); this.ListarDownloadCatalogo.Name = "ListarDownloadCatalogo"; - this.ListarDownloadCatalogo.Size = new System.Drawing.Size(104, 44); + this.ListarDownloadCatalogo.Size = new System.Drawing.Size(139, 54); this.ListarDownloadCatalogo.TabIndex = 1; this.ListarDownloadCatalogo.Text = "Listar catálogo"; this.ListarDownloadCatalogo.UseVisualStyleBackColor = true; @@ -962,30 +1046,22 @@ private void InitializeComponent() // // ListarDownloadCatalogos // - this.ListarDownloadCatalogos.Location = new System.Drawing.Point(6, 19); + this.ListarDownloadCatalogos.Location = new System.Drawing.Point(8, 23); + this.ListarDownloadCatalogos.Margin = new System.Windows.Forms.Padding(4); this.ListarDownloadCatalogos.Name = "ListarDownloadCatalogos"; - this.ListarDownloadCatalogos.Size = new System.Drawing.Size(104, 44); + this.ListarDownloadCatalogos.Size = new System.Drawing.Size(139, 54); this.ListarDownloadCatalogos.TabIndex = 0; this.ListarDownloadCatalogos.Text = "Listar catálogos"; this.ListarDownloadCatalogos.UseVisualStyleBackColor = true; this.ListarDownloadCatalogos.Click += new System.EventHandler(this.ListarDownloadCatalogos_Click); // - // BuscarSolicitud - // - this.BuscarSolicitud.Location = new System.Drawing.Point(446, 69); - this.BuscarSolicitud.Name = "BuscarSolicitud"; - this.BuscarSolicitud.Size = new System.Drawing.Size(104, 44); - this.BuscarSolicitud.TabIndex = 11; - this.BuscarSolicitud.Text = "Buscar Solicitud"; - this.BuscarSolicitud.UseVisualStyleBackColor = true; - this.BuscarSolicitud.Click += new System.EventHandler(this.BuscarSolicitud_Click); - // // Form1 // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1143, 637); + this.ClientSize = new System.Drawing.Size(906, 848); this.Controls.Add(this.tabControl1); + this.Margin = new System.Windows.Forms.Padding(4); this.Name = "Form1"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "Form1"; @@ -997,6 +1073,10 @@ private void InitializeComponent() this.groupBox6.ResumeLayout(false); this.tabControl1.ResumeLayout(false); this.tabPage1.ResumeLayout(false); + this.groupBox10.ResumeLayout(false); + this.groupBox11.ResumeLayout(false); + this.groupBox13.ResumeLayout(false); + this.groupBox12.ResumeLayout(false); this.tabPage2.ResumeLayout(false); this.groupBox9.ResumeLayout(false); this.groupBox8.ResumeLayout(false); @@ -1008,19 +1088,7 @@ private void InitializeComponent() #endregion private System.Windows.Forms.Button ObtenerFacturaById; - private System.Windows.Forms.Button FacturaIngresoPorValores; - private System.Windows.Forms.Button FacturaIngresoPorRefs; - private System.Windows.Forms.Button NotaCreditoValores; - private System.Windows.Forms.Button NotaCreditoRefs; - private System.Windows.Forms.Button CfdiPagoRefs; - private System.Windows.Forms.Button CfdiPagoValores; - private System.Windows.Forms.Button GenerarPDFValores; - private System.Windows.Forms.Button CancelByValues; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Button GenerarPDFRefs; private System.Windows.Forms.Button ObtenerFacturaXMLById; - private System.Windows.Forms.Button EnviarPorValores; - private System.Windows.Forms.Button EnviarPorReferencia; private System.Windows.Forms.GroupBox groupBox2; private System.Windows.Forms.GroupBox groupBox1; private System.Windows.Forms.Button ObtenerPersonaPorID; @@ -1032,7 +1100,6 @@ private void InitializeComponent() private System.Windows.Forms.Button CargarCertificados; private System.Windows.Forms.Button ObtenerCertificadoById; private System.Windows.Forms.Button EliEliminaCertificado; - private System.Windows.Forms.Button ObtenerUltimosCertficadosValidos; private System.Windows.Forms.GroupBox groupBox3; private System.Windows.Forms.Button ActualizarImpuestosProducto; private System.Windows.Forms.Button ObtenerImpuestosProducto; @@ -1056,10 +1123,6 @@ private void InitializeComponent() private System.Windows.Forms.Button CertDefaultRefs; private System.Windows.Forms.Button UpdateApiKey; private System.Windows.Forms.Button ObtenerCatalogRecordPorId; - private System.Windows.Forms.Button ConsultarEstadoRefs; - private System.Windows.Forms.Button ConsultarEstadoValores; - private System.Windows.Forms.Button GlobalInvoiceValbutton; - private System.Windows.Forms.Button GlobalInvoiceRefButton; private System.Windows.Forms.TabControl tabControl1; private System.Windows.Forms.TabPage tabPage1; private System.Windows.Forms.TabPage tabPage2; @@ -1083,9 +1146,25 @@ private void InitializeComponent() private System.Windows.Forms.Button ListarReglas; private System.Windows.Forms.Button ListarDownloadCatalogo; private System.Windows.Forms.Button ListarDownloadCatalogos; - private System.Windows.Forms.Button DynamicPriceCreditNoteButton; - private System.Windows.Forms.Button DynamicPriceInvoiceButton; private System.Windows.Forms.Button BuscarSolicitud; + private System.Windows.Forms.Button button12; + private System.Windows.Forms.Button button11; + private System.Windows.Forms.GroupBox groupBox13; + private System.Windows.Forms.Button button14; + private System.Windows.Forms.GroupBox groupBox12; + private System.Windows.Forms.Button button13; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button16; + private System.Windows.Forms.Button button15; + private System.Windows.Forms.Button button17; + private System.Windows.Forms.Button button8; + private System.Windows.Forms.Button button7; + private System.Windows.Forms.GroupBox groupBox10; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button5; + private System.Windows.Forms.GroupBox groupBox11; + private System.Windows.Forms.Button button6; } } diff --git a/FiscalApi.Samples.NetFramework/Form1.cs b/FiscalApi.Samples.NetFramework/Form1.cs index 65af9de..6221df3 100644 --- a/FiscalApi.Samples.NetFramework/Form1.cs +++ b/FiscalApi.Samples.NetFramework/Form1.cs @@ -2,10 +2,12 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using System.Threading.Tasks; using System.Windows.Forms; using Fiscalapi.Common; using Fiscalapi.Models; using Fiscalapi.Services; +using Newtonsoft.Json; namespace FiscalApi.Samples.NetFramework @@ -20,9 +22,9 @@ public Form1() Settings = new FiscalapiSettings { - //ApiUrl = "https://test.fiscalapi.com", - //ApiKey = "", - //Tenant = "", + ApiUrl = "https://test.fiscalapi.com", + ApiKey = "sk_test_b4f8cc00_d02a_4ecc_a68a_f87ae970958c", + Tenant = "275510ee-f64d-435a-9e92-1553d8f10a7e", }; // Create directory if not exists @@ -2798,6 +2800,242 @@ public static void WriteFileToDisk(FileResponse fileResponse) File.WriteAllBytes(filePath, fileBytes); } - + private async void button3_Click(object sender, EventArgs e) + { + var fiscalApi = FiscalApiClient.Create(Settings); + + var apiResponse = await fiscalApi.Persons.Employer.GetByIdAsync("0e82a655-5f0c-4e07-abab-8f322e4123ef"); + + if (apiResponse.Succeeded) + { + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data)); + } + } + + private async void button4_Click(object sender, EventArgs e) + { + var fiscalApi = FiscalApiClient.Create(Settings); + + string personId = "bd199ed8-02ef-47c0-919c-9479dd8ecae7"; + EmployerData requestModel = new EmployerData() + { + PersonId = personId, + EmployerRegistration = "abc1234567890", + OriginEmployerTin = "MEQA951024HC9", + OwnResourceAmount = 10000.0M + }; + var apiResponse = await fiscalApi.Persons.Employer.CreateAsync(requestModel); + + if (apiResponse.Succeeded) + { + MessageBox.Show(""); + } + } + + private async void button5_Click(object sender, EventArgs e) + { + var fiscalapi = FiscalApiClient.Create(Settings); + string personId = "bd199ed8-02ef-47c0-919c-9479dd8ecae7"; + EmployerData requestModel = new EmployerData() + { + PersonId = personId, + EmployerRegistration = "xyz0987654321", + OriginEmployerTin = "URE180429TM6", + OwnResourceAmount = 98.5M, + SatFundSourceId = "IF" + }; + + var apiResponse = await fiscalapi.Persons.Employer.UpdateAsync(requestModel); + + if (apiResponse.Succeeded) + { + MessageBox.Show(apiResponse.Data.OriginEmployerTin); + } + else + { + MessageBox.Show(apiResponse.Details); + } + } + + private async void button6_Click(object sender, EventArgs e) + { + var fiscalapi = FiscalApiClient.Create(Settings); + string personId = "bd199ed8-02ef-47c0-919c-9479dd8ecae7"; + + } + + private void button12_Click(object sender, EventArgs e) + { + InvoiceValueForm ivf = new InvoiceValueForm(Settings); + ivf.Show(); + } + + private void button11_Click(object sender, EventArgs e) + { + InvoiceReferenceForm irf = new InvoiceReferenceForm(Settings); + irf.Show(); + } + + private async void button3_Click_1(object sender, EventArgs e) + { + // Obtener todos los catálogos disponibles + + // Create instance of FiscalApiClient + + var fiscalApi = FiscalApiClient.Create(Settings); + + // Send request + var apiResponse = await fiscalApi.Catalogs.GetListAsync(); + + // Check response + + if (apiResponse.Succeeded) + { + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); + } + else + { + MessageBox.Show($@"HttpStatusCode: {apiResponse.HttpStatusCode}"); + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private void button4_Click_1(object sender, EventArgs e) + { + DownloadRulesForm downloadRulesForm = new DownloadRulesForm(Settings); + downloadRulesForm.Show(); + } + + private void button13_Click(object sender, EventArgs e) + { + var fiscalapi = FiscalApiClient.Create(Settings); + + } + + private void button7_Click(object sender, EventArgs e) + { + EmployerForm employerForm = new EmployerForm(Settings); + employerForm.Show(); + } + + private async void button14_Click(object sender, EventArgs e) + { + var fiscalapi = FiscalApiClient.Create(Settings); + + var apiResponse = await fiscalapi.Stamps.GetListAsync(1, 2); + + + if (apiResponse.Succeeded) + { + MessageBox.Show(apiResponse.Data.TotalPages.ToString()); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button15_Click(object sender, EventArgs e) + { + var fiscalapi = FiscalApiClient.Create(Settings); + + var apiResponse = await fiscalapi.Stamps.GetByIdAsync(""); + + if (apiResponse.Succeeded) + { + MessageBox.Show(apiResponse.Data.Id); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button16_Click(object sender, EventArgs e) + { + var fiscalapi = FiscalApiClient.Create(Settings); + + var requestModel = new StampTransactionParams + { + FromPersonId = "", + ToPersonId = "", + Amount = 1, + Comments = "" + }; + + var apiResponse = await fiscalapi.Stamps.TransferStamps(requestModel); + + if (apiResponse.Succeeded) + { + MessageBox.Show(apiResponse.Data.ToString()); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button6_Click_1(object sender, EventArgs e) + { + // Obtener catalog registro de un catalogo por nombre del catalogo y id del registro + + // Create instance of FiscalApiClient + var fiscalApi = FiscalApiClient.Create(Settings); + + // Send request /api/v4/catalogs/SatProductCodes/key/84111500 + var apiResponse = await fiscalApi.Catalogs.GetRecordByIdAsync("SatProductCodes", "84111500"); + + // Check response + if (apiResponse.Succeeded) + { + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); + } + else + { + MessageBox.Show($@"HttpStatusCode: {apiResponse.HttpStatusCode}"); + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private void button5_Click_1(object sender, EventArgs e) + { + DownloadRequestsForm downloadRequestsForm = new DownloadRequestsForm(Settings); + } + + private void button8_Click(object sender, EventArgs e) + { + EmployeeForm employeeForm = new EmployeeForm(Settings); + employeeForm.Show(); + } + + private async void button17_Click(object sender, EventArgs e) + { + var fiscalapi = FiscalApiClient.Create(Settings); + + var requestModel = new StampTransactionParams + { + FromPersonId = "", + ToPersonId = "", + Amount = 1, + Comments = "" + }; + + var apiResponse = await fiscalapi.Stamps.TransferStamps(requestModel); + + if (apiResponse.Succeeded) + { + MessageBox.Show(apiResponse.Data.ToString()); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } } } \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/IncomeInvoiceReferenceForm.Designer.cs b/FiscalApi.Samples.NetFramework/IncomeInvoiceReferenceForm.Designer.cs new file mode 100644 index 0000000..29bc026 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/IncomeInvoiceReferenceForm.Designer.cs @@ -0,0 +1,355 @@ +namespace FiscalApi.Samples.NetFramework +{ + partial class IncomeInvoiceReferenceForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.button21 = new System.Windows.Forms.Button(); + this.button20 = new System.Windows.Forms.Button(); + this.button19 = new System.Windows.Forms.Button(); + this.button18 = new System.Windows.Forms.Button(); + this.button17 = new System.Windows.Forms.Button(); + this.button16 = new System.Windows.Forms.Button(); + this.button15 = new System.Windows.Forms.Button(); + this.button8 = new System.Windows.Forms.Button(); + this.button7 = new System.Windows.Forms.Button(); + this.button6 = new System.Windows.Forms.Button(); + this.button5 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.button14 = new System.Windows.Forms.Button(); + this.button13 = new System.Windows.Forms.Button(); + this.button12 = new System.Windows.Forms.Button(); + this.button11 = new System.Windows.Forms.Button(); + this.button10 = new System.Windows.Forms.Button(); + this.button9 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.button22 = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // button21 + // + this.button21.Location = new System.Drawing.Point(20, 618); + this.button21.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button21.Name = "button21"; + this.button21.Size = new System.Drawing.Size(189, 60); + this.button21.TabIndex = 55; + this.button21.Text = "Factura ingreso impuestos excentos"; + this.button21.UseVisualStyleBackColor = true; + this.button21.Click += new System.EventHandler(this.button21_Click); + // + // button20 + // + this.button20.Location = new System.Drawing.Point(215, 619); + this.button20.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button20.Name = "button20"; + this.button20.Size = new System.Drawing.Size(189, 60); + this.button20.TabIndex = 54; + this.button20.Text = "Factura ingreso tasa cero y retenciones"; + this.button20.UseVisualStyleBackColor = true; + this.button20.Click += new System.EventHandler(this.button20_Click); + // + // button19 + // + this.button19.Location = new System.Drawing.Point(215, 554); + this.button19.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button19.Name = "button19"; + this.button19.Size = new System.Drawing.Size(189, 60); + this.button19.TabIndex = 53; + this.button19.Text = "Factura ingreso RESICO retención ISR 1.25%"; + this.button19.UseVisualStyleBackColor = true; + this.button19.Click += new System.EventHandler(this.button19_Click); + // + // button18 + // + this.button18.Location = new System.Drawing.Point(215, 488); + this.button18.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button18.Name = "button18"; + this.button18.Size = new System.Drawing.Size(189, 60); + this.button18.TabIndex = 52; + this.button18.Text = "Factura ingreso público en general"; + this.button18.UseVisualStyleBackColor = true; + this.button18.Click += new System.EventHandler(this.button18_Click); + // + // button17 + // + this.button17.Location = new System.Drawing.Point(215, 423); + this.button17.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button17.Name = "button17"; + this.button17.Size = new System.Drawing.Size(189, 60); + this.button17.TabIndex = 51; + this.button17.Text = "Factura ingreso objeto impuesto 08"; + this.button17.UseVisualStyleBackColor = true; + this.button17.Click += new System.EventHandler(this.button17_Click); + // + // button16 + // + this.button16.Location = new System.Drawing.Point(215, 356); + this.button16.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button16.Name = "button16"; + this.button16.Size = new System.Drawing.Size(189, 60); + this.button16.TabIndex = 50; + this.button16.Text = "Factura ingreso objeto impuesto 07 003 - IEPS"; + this.button16.UseVisualStyleBackColor = true; + this.button16.Click += new System.EventHandler(this.button16_Click); + // + // button15 + // + this.button15.Location = new System.Drawing.Point(215, 290); + this.button15.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button15.Name = "button15"; + this.button15.Size = new System.Drawing.Size(189, 60); + this.button15.TabIndex = 49; + this.button15.Text = "Factura ingreso objeto impuesto 07 001 y 003 - ISR y IEPS"; + this.button15.UseVisualStyleBackColor = true; + this.button15.Click += new System.EventHandler(this.button15_Click); + // + // button8 + // + this.button8.Location = new System.Drawing.Point(215, 224); + this.button8.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button8.Name = "button8"; + this.button8.Size = new System.Drawing.Size(189, 60); + this.button8.TabIndex = 48; + this.button8.Text = "Factura ingreso objecto impuesto 06 001 - ISR"; + this.button8.UseVisualStyleBackColor = true; + this.button8.Click += new System.EventHandler(this.button8_Click); + // + // button7 + // + this.button7.Location = new System.Drawing.Point(215, 158); + this.button7.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button7.Name = "button7"; + this.button7.Size = new System.Drawing.Size(189, 60); + this.button7.TabIndex = 47; + this.button7.Text = "Factura ingreso nota de débito"; + this.button7.UseVisualStyleBackColor = true; + this.button7.Click += new System.EventHandler(this.button7_Click); + // + // button6 + // + this.button6.Location = new System.Drawing.Point(215, 94); + this.button6.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button6.Name = "button6"; + this.button6.Size = new System.Drawing.Size(189, 60); + this.button6.TabIndex = 46; + this.button6.Text = "Factura ingreso kit (parte concepto)"; + this.button6.UseVisualStyleBackColor = true; + this.button6.Click += new System.EventHandler(this.button6_Click); + // + // button5 + // + this.button5.Location = new System.Drawing.Point(215, 29); + this.button5.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(189, 60); + this.button5.TabIndex = 45; + this.button5.Text = "Factura ingreso-ingreso sin impuestos"; + this.button5.UseVisualStyleBackColor = true; + this.button5.Click += new System.EventHandler(this.button5_Click); + // + // button4 + // + this.button4.Location = new System.Drawing.Point(20, 682); + this.button4.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(189, 60); + this.button4.TabIndex = 44; + this.button4.Text = "Factura ingreso-hidrocarburos-petrolíferos y servicios"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.button4_Click); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(215, 682); + this.button3.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(189, 60); + this.button3.TabIndex = 43; + this.button3.Text = "Factura ingreso tasa cero"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(20, 554); + this.button2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(189, 60); + this.button2.TabIndex = 42; + this.button2.Text = "Factura ingreso global con descuentos"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button14 + // + this.button14.Location = new System.Drawing.Point(20, 488); + this.button14.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button14.Name = "button14"; + this.button14.Size = new System.Drawing.Size(189, 60); + this.button14.TabIndex = 41; + this.button14.Text = "Factura ingreso global"; + this.button14.UseVisualStyleBackColor = true; + this.button14.Click += new System.EventHandler(this.button14_Click); + // + // button13 + // + this.button13.Location = new System.Drawing.Point(20, 423); + this.button13.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button13.Name = "button13"; + this.button13.Size = new System.Drawing.Size(189, 60); + this.button13.TabIndex = 40; + this.button13.Text = "Factura ingreso cuenta predial"; + this.button13.UseVisualStyleBackColor = true; + this.button13.Click += new System.EventHandler(this.button13_Click); + // + // button12 + // + this.button12.Location = new System.Drawing.Point(20, 356); + this.button12.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button12.Name = "button12"; + this.button12.Size = new System.Drawing.Size(189, 60); + this.button12.TabIndex = 39; + this.button12.Text = "Factura ingreso CFDI relacionados"; + this.button12.UseVisualStyleBackColor = true; + this.button12.Click += new System.EventHandler(this.button12_Click); + // + // button11 + // + this.button11.Location = new System.Drawing.Point(20, 290); + this.button11.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button11.Name = "button11"; + this.button11.Size = new System.Drawing.Size(189, 60); + this.button11.TabIndex = 38; + this.button11.Text = "Factura de ingreso anticipos con remanente"; + this.button11.UseVisualStyleBackColor = true; + this.button11.Click += new System.EventHandler(this.button11_Click); + // + // button10 + // + this.button10.Location = new System.Drawing.Point(20, 224); + this.button10.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button10.Name = "button10"; + this.button10.Size = new System.Drawing.Size(189, 60); + this.button10.TabIndex = 37; + this.button10.Text = "Factura de ingreso anticipos con CFDI egreso"; + this.button10.UseVisualStyleBackColor = true; + this.button10.Click += new System.EventHandler(this.button10_Click); + // + // button9 + // + this.button9.Location = new System.Drawing.Point(20, 158); + this.button9.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button9.Name = "button9"; + this.button9.Size = new System.Drawing.Size(189, 60); + this.button9.TabIndex = 36; + this.button9.Text = "Factura de ingreso a cuenta de terceros"; + this.button9.UseVisualStyleBackColor = true; + this.button9.Click += new System.EventHandler(this.button9_Click); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(20, 29); + this.button1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(189, 60); + this.button1.TabIndex = 35; + this.button1.Text = "Crear factura de ingreso"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // button22 + // + this.button22.Location = new System.Drawing.Point(20, 94); + this.button22.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button22.Name = "button22"; + this.button22.Size = new System.Drawing.Size(189, 60); + this.button22.TabIndex = 56; + this.button22.Text = "Crear factura de ingreso precios dinámicos"; + this.button22.UseVisualStyleBackColor = true; + this.button22.Click += new System.EventHandler(this.button22_Click); + // + // IncomeInvoiceReferenceForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(427, 777); + this.Controls.Add(this.button22); + this.Controls.Add(this.button21); + this.Controls.Add(this.button20); + this.Controls.Add(this.button19); + this.Controls.Add(this.button18); + this.Controls.Add(this.button17); + this.Controls.Add(this.button16); + this.Controls.Add(this.button15); + this.Controls.Add(this.button8); + this.Controls.Add(this.button7); + this.Controls.Add(this.button6); + this.Controls.Add(this.button5); + this.Controls.Add(this.button4); + this.Controls.Add(this.button3); + this.Controls.Add(this.button2); + this.Controls.Add(this.button14); + this.Controls.Add(this.button13); + this.Controls.Add(this.button12); + this.Controls.Add(this.button11); + this.Controls.Add(this.button10); + this.Controls.Add(this.button9); + this.Controls.Add(this.button1); + this.Name = "IncomeInvoiceReferenceForm"; + this.Text = "IncomeInvoiceReferenceForm"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button button21; + private System.Windows.Forms.Button button20; + private System.Windows.Forms.Button button19; + private System.Windows.Forms.Button button18; + private System.Windows.Forms.Button button17; + private System.Windows.Forms.Button button16; + private System.Windows.Forms.Button button15; + private System.Windows.Forms.Button button8; + private System.Windows.Forms.Button button7; + private System.Windows.Forms.Button button6; + private System.Windows.Forms.Button button5; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button14; + private System.Windows.Forms.Button button13; + private System.Windows.Forms.Button button12; + private System.Windows.Forms.Button button11; + private System.Windows.Forms.Button button10; + private System.Windows.Forms.Button button9; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button22; + } +} \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/IncomeInvoiceReferenceForm.cs b/FiscalApi.Samples.NetFramework/IncomeInvoiceReferenceForm.cs new file mode 100644 index 0000000..ae3d06c --- /dev/null +++ b/FiscalApi.Samples.NetFramework/IncomeInvoiceReferenceForm.cs @@ -0,0 +1,1493 @@ +using Fiscalapi.Common; +using Fiscalapi.Models; +using Fiscalapi.Services; +using FiscalApi.Samples.NetFramework.Properties; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FiscalApi.Samples.NetFramework +{ + public partial class IncomeInvoiceReferenceForm : Form + { + private FiscalapiSettings _settings; + + public IncomeInvoiceReferenceForm(FiscalapiSettings settings) + { + _settings = settings; + InitializeComponent(); + } + + private async void button1_Click(object sender, EventArgs e) + { + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + Id = "2f3c65f3-ed02-452f-944c-97a47010df5c", + Quantity = 1 + }, + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button9_Click(object sender, EventArgs e) + { + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + Id = "2f3c65f3-ed02-452f-944c-97a47010df5c", + Quantity = 1, + OnBehalfOf = new OnBehalfOf + { + Tin = "CACX7605101P8", + LegalName = "XOCHILT CASAS CHAVEZ", + TaxRegimeCode = "601", + ZipCode = "36257" + + } + }, + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button22_Click(object sender, EventArgs e) + { + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + Id = "2f3c65f3-ed02-452f-944c-97a47010df5c", + Quantity = 1, + UnitPrice = 288.00m + }, + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button10_Click(object sender, EventArgs e) + { + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + Id = "037b5705-a9a2-4422-b842-97c0f9347498", + Quantity = 1 + }, + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button12_Click(object sender, EventArgs e) + { + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + Id = "037b5705-a9a2-4422-b842-97c0f9347498", + Quantity = 1 + }, + }; + + var relatedInvoices = new List() + { + new RelatedInvoice + { + RelationshipTypeCode = "02", + Uuid = "3f88783d-28cb-4695-bbe3-49e86877cc19", + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + RelatedInvoices = relatedInvoices, + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button13_Click(object sender, EventArgs e) + { + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + Id = "2f3c65f3-ed02-452f-944c-97a47010df5c", + Quantity = 1, + PropertyInfo = new List() + { + new PropertyInfo + { + Number = "aB3cD4eF5gH6iJ7kL8mN9oP0" + } + } + }, + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button14_Click(object sender, EventArgs e) + { + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + Id = "037b5705-a9a2-4422-b842-97c0f9347498", + Quantity = 1 + }, + new InvoiceItem + { + Id = "2f3c65f3-ed02-452f-944c-97a47010df5c", + Quantity = 1 + }, + new InvoiceItem + { + Id = "40389443-2aa1-4121-b86a-e8c45fac6b17", + Quantity = 1 + }, + new InvoiceItem + { + Id = "783f1e2a-9c55-429d-9e82-c94b620c419c", + Quantity = 1 + }, + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "99", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + GlobalInformation = new GlobalInformation + { + PeriodicityCode = "01", + MonthCode = "01", + Year = 2026 + } + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button2_Click(object sender, EventArgs e) + { + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + Id = "87d20bd0-da21-4bce-aff4-f113fecfe6df", + Quantity = 1, + Discount = 20, + }, + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button21_Click(object sender, EventArgs e) + { + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + Id = "ec5c5b39-f52d-490e-83d6-437bc1101582", + Quantity = 10.236m, + }, + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button4_Click(object sender, EventArgs e) + { + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + Id = "652cc6ec-690f-40bd-97b1-29de4fedd9ee", + Quantity = 10.236m, + }, + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button5_Click(object sender, EventArgs e) + { + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + Id = "10e2e439-3deb-4e63-9e71-fb35177b8d76", + Quantity = 1 + }, + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button6_Click(object sender, EventArgs e) + { + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + Id = "037b5705-a9a2-4422-b842-97c0f9347498", + Quantity = 1, + Parts = new List() + { + new InvoiceItemPart + { + ItemCode = "51241200", + ItemSku = "IM0071", + Quantity = 1, + Description = "25311FM00239 (LUARIL ETER SULFATO DE SODIO VEHICULO CBP 300ML), ACEITE AJONJOLI 150CC, ACEITE DE ALMENDRAS DULCES 150CC, TALCO 10GR, OXIDO DE ZINC 10GR.", + UnitPrice = 1000.00m + } + } + }, + }; + + var relatedInvoices = new List() + { + new RelatedInvoice + { + RelationshipTypeCode = "01", + Uuid = "3f88783d-28cb-4695-bbe3-49e86877cc19", + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + RelatedInvoices = relatedInvoices, + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button7_Click(object sender, EventArgs e) + { + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + Id = "5d3563d3-7882-4125-8cad-da7b24ffa85c", + Quantity = 1 + }, + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button8_Click(object sender, EventArgs e) + { + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + Id = "19d7810c-4284-4dd3-a886-bfaba96449bd", + Quantity = 1 + }, + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button15_Click(object sender, EventArgs e) + { + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + Id = "24671e0b-1a5e-4d1c-b05a-81ec682901fc", + Quantity = 1 + }, + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button16_Click(object sender, EventArgs e) + { + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + Id = "b8005c9a-6933-4411-b01a-8b17651bfd26", + Quantity = 1 + }, + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button17_Click(object sender, EventArgs e) + { + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + Id = "86f713f8-c67e-4b74-ba31-642d689a9980", + Quantity = 1 + }, + }; + + var globalInfo = new GlobalInformation + { + Year = 2026, + MonthCode = "01", + PeriodicityCode = "01" + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + GlobalInformation = globalInfo + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button18_Click(object sender, EventArgs e) + { + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + var recipient = new InvoiceRecipient + { + Id = "a8903553-7220-4b15-bdb1-e64cd19f5203" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + Id = "86f713f8-c67e-4b74-ba31-642d689a9980", + Quantity = 1 + }, + }; + + var globalInformation = new GlobalInformation + { + MonthCode = "01", + Year = 2026, + PeriodicityCode = "01" + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "45610", + Issuer = issuer, + Recipient = recipient, + Items = items, + GlobalInformation = globalInformation, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button19_Click(object sender, EventArgs e) + { + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + Id = "2b1d05d3-0ca8-4d48-a675-53313be8d217", + Quantity = 1 + }, + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button20_Click(object sender, EventArgs e) + { + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + Id = "4d94412e-4ed9-4ac6-8ae7-67004c470518", + Quantity = 1 + }, + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button3_Click(object sender, EventArgs e) + { + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + Id = "86b63573-5ac2-42ef-b506-c8732f85cfd0", + Quantity = 1 + }, + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button11_Click(object sender, EventArgs e) + { + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + Id = "037b5705-a9a2-4422-b842-97c0f9347498", + Quantity = 1 + }, + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + } +} diff --git a/FiscalApi.Samples.NetFramework/IncomeInvoiceReferenceForm.resx b/FiscalApi.Samples.NetFramework/IncomeInvoiceReferenceForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/IncomeInvoiceReferenceForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/IncomeInvoiceValueForm.Designer.cs b/FiscalApi.Samples.NetFramework/IncomeInvoiceValueForm.Designer.cs new file mode 100644 index 0000000..3a1e399 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/IncomeInvoiceValueForm.Designer.cs @@ -0,0 +1,361 @@ +namespace FiscalApi.Samples.NetFramework +{ + partial class IncomeInvoiceValueForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.button21 = new System.Windows.Forms.Button(); + this.button20 = new System.Windows.Forms.Button(); + this.button19 = new System.Windows.Forms.Button(); + this.button18 = new System.Windows.Forms.Button(); + this.button17 = new System.Windows.Forms.Button(); + this.button16 = new System.Windows.Forms.Button(); + this.button15 = new System.Windows.Forms.Button(); + this.button8 = new System.Windows.Forms.Button(); + this.button7 = new System.Windows.Forms.Button(); + this.button6 = new System.Windows.Forms.Button(); + this.button5 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.button14 = new System.Windows.Forms.Button(); + this.button13 = new System.Windows.Forms.Button(); + this.button12 = new System.Windows.Forms.Button(); + this.button11 = new System.Windows.Forms.Button(); + this.button10 = new System.Windows.Forms.Button(); + this.button9 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox1.Controls.Add(this.button21); + this.groupBox1.Controls.Add(this.button20); + this.groupBox1.Controls.Add(this.button19); + this.groupBox1.Controls.Add(this.button18); + this.groupBox1.Controls.Add(this.button17); + this.groupBox1.Controls.Add(this.button16); + this.groupBox1.Controls.Add(this.button15); + this.groupBox1.Controls.Add(this.button8); + this.groupBox1.Controls.Add(this.button7); + this.groupBox1.Controls.Add(this.button6); + this.groupBox1.Controls.Add(this.button5); + this.groupBox1.Controls.Add(this.button4); + this.groupBox1.Controls.Add(this.button3); + this.groupBox1.Controls.Add(this.button2); + this.groupBox1.Controls.Add(this.button14); + this.groupBox1.Controls.Add(this.button13); + this.groupBox1.Controls.Add(this.button12); + this.groupBox1.Controls.Add(this.button11); + this.groupBox1.Controls.Add(this.button10); + this.groupBox1.Controls.Add(this.button9); + this.groupBox1.Controls.Add(this.button1); + this.groupBox1.Location = new System.Drawing.Point(12, 12); + this.groupBox1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.groupBox1.Size = new System.Drawing.Size(403, 753); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "groupBox1"; + // + // button21 + // + this.button21.Location = new System.Drawing.Point(5, 545); + this.button21.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button21.Name = "button21"; + this.button21.Size = new System.Drawing.Size(189, 60); + this.button21.TabIndex = 34; + this.button21.Text = "Factura ingreso impuestos excentos"; + this.button21.UseVisualStyleBackColor = true; + this.button21.Click += new System.EventHandler(this.button21_Click); + // + // button20 + // + this.button20.Location = new System.Drawing.Point(203, 546); + this.button20.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button20.Name = "button20"; + this.button20.Size = new System.Drawing.Size(189, 60); + this.button20.TabIndex = 33; + this.button20.Text = "Factura ingreso tasa cero y retenciones"; + this.button20.UseVisualStyleBackColor = true; + this.button20.Click += new System.EventHandler(this.button20_Click); + // + // button19 + // + this.button19.Location = new System.Drawing.Point(203, 481); + this.button19.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button19.Name = "button19"; + this.button19.Size = new System.Drawing.Size(189, 60); + this.button19.TabIndex = 32; + this.button19.Text = "Factura ingreso RESICO retención ISR 1.25%"; + this.button19.UseVisualStyleBackColor = true; + this.button19.Click += new System.EventHandler(this.button19_Click); + // + // button18 + // + this.button18.Location = new System.Drawing.Point(203, 415); + this.button18.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button18.Name = "button18"; + this.button18.Size = new System.Drawing.Size(189, 60); + this.button18.TabIndex = 31; + this.button18.Text = "Factura ingreso público en general"; + this.button18.UseVisualStyleBackColor = true; + this.button18.Click += new System.EventHandler(this.button18_Click); + // + // button17 + // + this.button17.Location = new System.Drawing.Point(203, 350); + this.button17.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button17.Name = "button17"; + this.button17.Size = new System.Drawing.Size(189, 60); + this.button17.TabIndex = 30; + this.button17.Text = "Factura ingreso objeto impuesto 08"; + this.button17.UseVisualStyleBackColor = true; + this.button17.Click += new System.EventHandler(this.button17_Click); + // + // button16 + // + this.button16.Location = new System.Drawing.Point(203, 283); + this.button16.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button16.Name = "button16"; + this.button16.Size = new System.Drawing.Size(189, 60); + this.button16.TabIndex = 29; + this.button16.Text = "Factura ingreso objeto impuesto 07 003 - IEPS"; + this.button16.UseVisualStyleBackColor = true; + this.button16.Click += new System.EventHandler(this.button16_Click); + // + // button15 + // + this.button15.Location = new System.Drawing.Point(203, 217); + this.button15.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button15.Name = "button15"; + this.button15.Size = new System.Drawing.Size(189, 60); + this.button15.TabIndex = 28; + this.button15.Text = "Factura ingreso objeto impuesto 07 001 y 003 - ISR y IEPS"; + this.button15.UseVisualStyleBackColor = true; + this.button15.Click += new System.EventHandler(this.button15_Click); + // + // button8 + // + this.button8.Location = new System.Drawing.Point(203, 151); + this.button8.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button8.Name = "button8"; + this.button8.Size = new System.Drawing.Size(189, 60); + this.button8.TabIndex = 27; + this.button8.Text = "Factura ingreso objecto impuesto 06 001 - ISR"; + this.button8.UseVisualStyleBackColor = true; + this.button8.Click += new System.EventHandler(this.button8_Click); + // + // button7 + // + this.button7.Location = new System.Drawing.Point(203, 85); + this.button7.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button7.Name = "button7"; + this.button7.Size = new System.Drawing.Size(189, 60); + this.button7.TabIndex = 26; + this.button7.Text = "Factura ingreso nota de débito"; + this.button7.UseVisualStyleBackColor = true; + this.button7.Click += new System.EventHandler(this.button7_Click); + // + // button6 + // + this.button6.Location = new System.Drawing.Point(203, 21); + this.button6.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button6.Name = "button6"; + this.button6.Size = new System.Drawing.Size(189, 60); + this.button6.TabIndex = 25; + this.button6.Text = "Factura ingreso kit (parte concepto)"; + this.button6.UseVisualStyleBackColor = true; + this.button6.Click += new System.EventHandler(this.button6_Click); + // + // button5 + // + this.button5.Location = new System.Drawing.Point(5, 679); + this.button5.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(189, 60); + this.button5.TabIndex = 24; + this.button5.Text = "Factura ingreso-ingreso sin impuestos"; + this.button5.UseVisualStyleBackColor = true; + this.button5.Click += new System.EventHandler(this.button5_Click); + // + // button4 + // + this.button4.Location = new System.Drawing.Point(5, 609); + this.button4.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(189, 60); + this.button4.TabIndex = 23; + this.button4.Text = "Factura ingreso-hidrocarburos-petrolíferos y servicios"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.button4_Click); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(203, 609); + this.button3.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(189, 60); + this.button3.TabIndex = 22; + this.button3.Text = "Factura ingreso tasa cero"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(5, 481); + this.button2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(189, 60); + this.button2.TabIndex = 21; + this.button2.Text = "Factura ingreso global con descuentos"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button14 + // + this.button14.Location = new System.Drawing.Point(5, 415); + this.button14.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button14.Name = "button14"; + this.button14.Size = new System.Drawing.Size(189, 60); + this.button14.TabIndex = 20; + this.button14.Text = "Factura ingreso global"; + this.button14.UseVisualStyleBackColor = true; + this.button14.Click += new System.EventHandler(this.button14_Click); + // + // button13 + // + this.button13.Location = new System.Drawing.Point(5, 350); + this.button13.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button13.Name = "button13"; + this.button13.Size = new System.Drawing.Size(189, 60); + this.button13.TabIndex = 19; + this.button13.Text = "Factura ingreso cuenta predial"; + this.button13.UseVisualStyleBackColor = true; + this.button13.Click += new System.EventHandler(this.button13_Click); + // + // button12 + // + this.button12.Location = new System.Drawing.Point(5, 283); + this.button12.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button12.Name = "button12"; + this.button12.Size = new System.Drawing.Size(189, 60); + this.button12.TabIndex = 18; + this.button12.Text = "Factura ingreso CFDI relacionados"; + this.button12.UseVisualStyleBackColor = true; + this.button12.Click += new System.EventHandler(this.button12_Click); + // + // button11 + // + this.button11.Location = new System.Drawing.Point(5, 217); + this.button11.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button11.Name = "button11"; + this.button11.Size = new System.Drawing.Size(189, 60); + this.button11.TabIndex = 17; + this.button11.Text = "Factura de ingreso anticipos con remanente"; + this.button11.UseVisualStyleBackColor = true; + this.button11.Click += new System.EventHandler(this.button11_Click); + // + // button10 + // + this.button10.Location = new System.Drawing.Point(5, 151); + this.button10.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button10.Name = "button10"; + this.button10.Size = new System.Drawing.Size(189, 60); + this.button10.TabIndex = 16; + this.button10.Text = "Factura de ingreso anticipos con CFDI egreso"; + this.button10.UseVisualStyleBackColor = true; + this.button10.Click += new System.EventHandler(this.button10_Click); + // + // button9 + // + this.button9.Location = new System.Drawing.Point(5, 85); + this.button9.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button9.Name = "button9"; + this.button9.Size = new System.Drawing.Size(189, 60); + this.button9.TabIndex = 15; + this.button9.Text = "Factura de ingreso a cuenta de terceros"; + this.button9.UseVisualStyleBackColor = true; + this.button9.Click += new System.EventHandler(this.button9_Click); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(5, 21); + this.button1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(189, 60); + this.button1.TabIndex = 14; + this.button1.Text = "Crear factura de ingreso"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // IncomeInvoiceValueForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(427, 777); + this.Controls.Add(this.groupBox1); + this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.Name = "IncomeInvoiceValueForm"; + this.Text = "IncomeInvoiceValueForm"; + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Button button14; + private System.Windows.Forms.Button button13; + private System.Windows.Forms.Button button12; + private System.Windows.Forms.Button button11; + private System.Windows.Forms.Button button10; + private System.Windows.Forms.Button button9; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Button button6; + private System.Windows.Forms.Button button5; + private System.Windows.Forms.Button button17; + private System.Windows.Forms.Button button16; + private System.Windows.Forms.Button button15; + private System.Windows.Forms.Button button8; + private System.Windows.Forms.Button button7; + private System.Windows.Forms.Button button21; + private System.Windows.Forms.Button button20; + private System.Windows.Forms.Button button19; + private System.Windows.Forms.Button button18; + } +} \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/IncomeInvoiceValueForm.cs b/FiscalApi.Samples.NetFramework/IncomeInvoiceValueForm.cs new file mode 100644 index 0000000..2e2ed14 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/IncomeInvoiceValueForm.cs @@ -0,0 +1,2400 @@ +using Fiscalapi.Common; +using Fiscalapi.Models; +using Fiscalapi.Services; +using FiscalApi.Samples.NetFramework.Properties; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FiscalApi.Samples.NetFramework +{ + public partial class IncomeInvoiceValueForm : Form + { + private FiscalapiSettings _settings; + + public IncomeInvoiceValueForm(FiscalapiSettings settings) + { + InitializeComponent(); + _settings = settings; + } + + private async void button1_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + ZipCode = "42501", + TaxRegimeCode = "601", + CfdiUseCode = "G01", + Email = "someone@somewhere.com" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "01010101", + Quantity = 9.5m, + UnitOfMeasurementCode = "E48", + UnitOfMeasurement = "Unidad de servicio", + Description = "Invoicing software as a service", + UnitPrice = 3587.75m, + TaxObjectCode = "02", + ItemSku = "7506022301697", + Discount = 255.85m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", // IVA + TaxTypeCode = "Tasa", // Tasa + TaxRate = 0.160000m, // 16% + TaxFlagCode = "T" // Traslado + } + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "42501", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button3_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "603", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "G01", + Email = "someone@somewhere.com" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "50211503", + Quantity = 1.0m, + UnitOfMeasurementCode = "H87", + UnitOfMeasurement = "Unidad de servicio", + Description = "cigarros", + UnitPrice = 200.0m, + TaxObjectCode = "02", + ItemSku = "None", + Discount = 0m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.000000m, + TaxFlagCode = "T" + }, + new InvoiceItemTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.000000m, + TaxFlagCode = "R" + } + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "99", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PPD", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button9_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "603", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "G03", + Email = "someone@somewhere.com" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "50211503", + Quantity = 1.0m, + UnitOfMeasurementCode = "H87", + UnitOfMeasurement = "Unidad de servicio", + Description = "cigarros", + UnitPrice = 200.0m, + TaxObjectCode = "02", + ItemSku = "None", + Discount = 0m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "001", // IVA + TaxTypeCode = "Tasa", // Tasa + TaxRate = 0.100000m, // 16% + TaxFlagCode = "R" // Retencion + } + }, + OnBehalfOf = new OnBehalfOf + { + Tin = "CACX7605101P8", + LegalName = "XOCHILT CASAS CHAVEZ", + TaxRegimeCode = "601", + ZipCode = "36257" + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "45610", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button10_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "603", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "G01", + Email = "someone@somewhere.com" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "84111506", + Quantity = 1.0m, + UnitOfMeasurementCode = "ACT", + UnitOfMeasurement = "Unidad de servicio", + Description = "Valot total de la operación", + UnitPrice = 400.0m, + TaxObjectCode = "02", + ItemSku = "84111506", + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", // IVA + TaxTypeCode = "Tasa", // Tasa + TaxRate = 0.160000m, // 16% + TaxFlagCode = "T" // Traslado + } + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button11_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "603", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "G01", + Email = "someone@somewhere.com" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "84111506", + Quantity = 1.0m, + UnitOfMeasurementCode = "ACT", + UnitOfMeasurement = "Unidad de servicio", + Description = "Anticipo del bien o servicio", + UnitPrice = 200.0m, + TaxObjectCode = "02", + ItemSku = "84111506", + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", // IVA + TaxTypeCode = "Tasa", // Tasa + TaxRate = 0.160000m, // 16% + TaxFlagCode = "T" // Traslado + } + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button12_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "603", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "XIA190128J61", + LegalName = "XENON INDUSTRIAL ARTICLES", + ZipCode = "76343", + TaxRegimeCode = "601", + CfdiUseCode = "G03", + Email = "someone@somewhere.com" + }; + + var relatedInvoices = new List() + { + new RelatedInvoice { RelationshipTypeCode = "02", Uuid = "6c76a910-2115-4a2c-bf15-e67c1505dd21" }, + new RelatedInvoice { RelationshipTypeCode = "02", Uuid = "6c76a910-2115-4a2c-bf15-e67c1505bb22" } + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "84111506", + Quantity = 1.0m, + UnitOfMeasurementCode = "ACT", + UnitOfMeasurement = "Unidad de servicio", + Description = "84111506 Descuentos y bonificaciones gas natural", + UnitPrice = 1308.35m, + TaxObjectCode = "02", + ItemSku = "84111506", + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", // IVA + TaxTypeCode = "Tasa", // Tasa + TaxRate = 0.160000m, // 16% + TaxFlagCode = "T" // Traslado + } + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "44520", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + RelatedInvoices = relatedInvoices + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button13_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "603", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "G01", + Email = "someone@somewhere.com" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "50211503", + Quantity = 1.0m, + UnitOfMeasurementCode = "H87", + Description = "Cigarros", + UnitPrice = 200.0m, + TaxObjectCode = "02", + ItemSku = "50211503", + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.100000m, + TaxFlagCode = "R" + } + }, + PropertyInfo = new List() + { + new PropertyInfo { Number = "aB3cD4eF5gH6iJ7kL8mN9oP0" } + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "45610", + ExchangeRate = 1, + ExportCode = "01", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button14_Click(object sender, EventArgs e) + { + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFgDCCA2igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0NDYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTQzNTM3WhcNMjcwNTE4MTQzNTM3WjCBpzEdMBsGA1UEAxMUS0FSTEEgRlVFTlRFIE5PTEFTQ08xHTAbBgNVBCkTFEtBUkxBIEZVRU5URSBOT0xBU0NPMR0wGwYDVQQKExRLQVJMQSBGVUVOVEUgTk9MQVNDTzEWMBQGA1UELRMNRlVOSzY3MTIyOFBINjEbMBkGA1UEBRMSRlVOSzY3MTIyOE1DTE5MUjA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhNXbTSqGX6+/3Urpemyy5vVG2IdP2v7v001+c4BoMxEDFDQ32cOFdDiRxy0Fq9aR+Ojrofq8VeftvN586iyA1A6a0QnA68i7JnQKI4uJy+u0qiixuHu6u3b3BhSpoaVHcUtqFWLLlzr0yBxfVLOqVna/1/tHbQJg9hx57mp97P0JmXO1WeIqi+Zqob/mVZh2lsPGdJ8iqgjYFaFn9QVOQ1Pq74o1PTqwfzqgJSfV0zOOlESDPWggaDAYE4VNyTBisOUjlNd0x7ppcTxSi3yenrJHqkq/pqJsRLKf6VJ/s9p6bsd2bj07hSDpjlDC2lB25eEfkEkeMkXoE7ErXQ5QCwIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAHwYpgbClHULXYhK4GNTgonvXh81oqfXwCSWAyDPiTYFDWVfWM9C4ApxMLyc0XvJte75Rla+bPC08oYN3OlhbbvP3twBL/w9SsfxvkbpFn2ZfGSTXZhyiq4vjmQHW1pnFvGelwgU4v3eeRE/MjoCnE7M/Q5thpuog6WGf7CbKERnWZn8QsUaJsZSEkg6Bv2jm69ye57ab5rrOUaeMlstTfdlaHAEkUgLX/NXq7RbGwv82hkHY5b2vYcXeh34tUMBL6os3OdRlooN9ZQGkVIISvxVZpSHkYC20DFNh1Bb0ovjfujlTcka81GnbUhFGZtRuoVQ1RVpMO8xtx3YKBLp4do3hPmnRCV5hCm43OIjYx9Ov2dqICV3AaNXSLV1dW39Bak/RBiIDGHzOIW2+VMPjvvypBjmPv/tmbqNHWPSAWOxTyMx6E1gFCZvi+5F+BgkdC3Lm7U0BU0NfvsXajZd8sXnIllvEMrikCLoI/yurvexNDcF1RW/FhMsoua0eerwczcNm66pGjHm05p9DR6lFeJZrtqeqZuojdxBWy4vH6ghyJaupergoX+nmdG3JYeRttCFF/ITI68TeCES5V3Y0C3psYAg1XxcGRLGd4chPo/4xwiLkijWtgt0/to5ljGBwfK7r62PHZfL1Dp+i7V3w7hmOlhbXzP+zhMZn1GCk7KY=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS9AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucRBAKNQXH8t8gVCl/ItHMI2hMJ76QOECOqEi1Y89cDpegDvh/INXyMsXbzi87tfFzgq1O+9ID6aPWGg+bNGADXyXxDVdy7Nq/SCdoXvo66MTYwq8jyJeUHDHEGMVBcmZpD44VJCvLBxDcvByuevP4Wo2NKqJCwK+ecAdZc/8Rvd947SjbMHuS8BppfQWARVUqA5BLOkTAHNv6tEk/hncC7O2YOGSShart8fM8dokgGSyewHVFe08POuQ+WDHeVpvApH/SP29rwktSoiHRoL6dK+F2YeEB5SuFW9LQgYCutjapmUP/9TC3Byro9Li6UrvQHxNmgMFGQJSYjFdqlGjLibfuguLp7pueutbROoZaSxU8HqlfYxLkpJUxUwNI1ja/1t3wcivtWknVXBd13R06iVfU1HGe8Kb4u5il4a4yP4p7VT4RE3b1SBLJeG+BxHiE8gFaaKcX/Cl6JV14RPTvk/6VnAtEQ66qHJex21KKuiJo2JoOmDXVHmvGQlWXNjYgoPx28Xd5WsofL+n7HDR2Ku8XgwJw6IXBJGuoday9qWN9v/k7DGlNGB6Sm4gdVUmycMP6EGhB1vFTiDfOGQO42ywmcpKoMETPVQ5InYKE0xAOckgcminDgxWjtUHjBDPEKifEjYudPwKmR6Cf4ZdGvUWwY/zq9pPAC9bu423KeBCnSL8AQ4r5SVsW6XG0njamwfNjpegwh/YG7sS7sDtZ8gi7r6tZYjsOqZlCYU0j7QTBpuQn81Yof2nQRCFxhRJCeydmIA8+z0nXrcElk7NDPk4kYQS0VitJ2qeQYNENzGBglROkCl2y6GlxAG80IBtReCUp/xOSdlwDR0eim+SNkdStvmQM5IcWBuDKwGZc1A4v/UoLl7niV9fpl4X6bUX8lZzY4gidJOafoJ30VoY/lYGkrkEuz3GpbbT5v8fF3iXVRlEqhlpe8JSGu7Rd2cPcJSkQ1Cuj/QRhHPhFMF2KhTEf95c9ZBKI8H7SvBi7eLXfSW2Y0ve6vXBZKyjK9whgCU9iVOsJjqRXpAccaWOKi420CjmS0+uwj/Xr2wLZhPEjBA/G6Od30+eG9mICmbp/5wAGhK/ZxCT17ZETyFmOMo49jl9pxdKocJNuzMrLpSz7/g5Jwp8+y8Ck5YP7AX0R/dVA0t37DO7nAbQT5XVSYpMVh/yvpYJ9WR+tb8Yg1h2lERLR2fbuhQRcwmisZR2W3Sr2b7hX9MCMkMQw8y2fDJrzLrqKqkHcjvnI/TdzZW2MzeQDoBBb3fmgvjYg07l4kThS73wGX992w2Y+a1A2iirSmrYEm9dSh16JmXa8boGQAONQzQkHh7vpw0IBs9cnvqO1QLB1GtbBztUBXonA4TxMKLYZkVrrd2RhrYWMsDp7MpC4M0p/DA3E/qscYwq1OpwriewNdx6XXqMZbdUNqMP2viBY2VSGmNdHtVfbN/rnaeJetFGX7XgTVYD7wDq8TW9yseCK944jcT+y/o0YiT9j3OLQ2Ts0LDTQskpJSxRmXEQGy3NBDOYFTvRkcGJEQJItuol8NivJN1H9LoLIUAlAHBZxfHpUYx66YnP4PdTdMIWH+nxyekKPFfAT7olQ=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "FUNK671228PH6", + LegalName = "KARLA FUENTE NOLASCO", + TaxRegimeCode = "621", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "XAXX010101000", + LegalName = "PUBLICO EN GENERAL", + ZipCode = "01160", + TaxRegimeCode = "616", + CfdiUseCode = "S01", + Email = "someone@somewhere.com" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "01010101", + Quantity = 1, + UnitOfMeasurementCode = "ACT", + Description = "Venta", + UnitPrice = 1230.00m, + TaxObjectCode = "02", + ItemSku = "venta0001", + Discount = 255.85m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", // IVA + TaxTypeCode = "Tasa", // Tasa + TaxRate = 0.160000m, // 16% + TaxFlagCode = "T" // Traslado + } + } + } + }; + + + // Información global + + var globalInfo = new GlobalInformation + { + PeriodicityCode = "01", + MonthCode = "05", + Year = 2025 + }; + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + TypeCode = "I", + Series = "F", + Date = DateTime.Now, + CurrencyCode = "MXN", + PaymentFormCode = "01", + PaymentMethodCode = "PUE", + ExpeditionZipCode = "01160", + GlobalInformation = globalInfo, // Información global + Issuer = issuer, // Emisor + Recipient = recipient, // Receptor + Items = items, // Ventas + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button2_Click(object sender, EventArgs e) + { + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFgDCCA2igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0NDYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTQzNTM3WhcNMjcwNTE4MTQzNTM3WjCBpzEdMBsGA1UEAxMUS0FSTEEgRlVFTlRFIE5PTEFTQ08xHTAbBgNVBCkTFEtBUkxBIEZVRU5URSBOT0xBU0NPMR0wGwYDVQQKExRLQVJMQSBGVUVOVEUgTk9MQVNDTzEWMBQGA1UELRMNRlVOSzY3MTIyOFBINjEbMBkGA1UEBRMSRlVOSzY3MTIyOE1DTE5MUjA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhNXbTSqGX6+/3Urpemyy5vVG2IdP2v7v001+c4BoMxEDFDQ32cOFdDiRxy0Fq9aR+Ojrofq8VeftvN586iyA1A6a0QnA68i7JnQKI4uJy+u0qiixuHu6u3b3BhSpoaVHcUtqFWLLlzr0yBxfVLOqVna/1/tHbQJg9hx57mp97P0JmXO1WeIqi+Zqob/mVZh2lsPGdJ8iqgjYFaFn9QVOQ1Pq74o1PTqwfzqgJSfV0zOOlESDPWggaDAYE4VNyTBisOUjlNd0x7ppcTxSi3yenrJHqkq/pqJsRLKf6VJ/s9p6bsd2bj07hSDpjlDC2lB25eEfkEkeMkXoE7ErXQ5QCwIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAHwYpgbClHULXYhK4GNTgonvXh81oqfXwCSWAyDPiTYFDWVfWM9C4ApxMLyc0XvJte75Rla+bPC08oYN3OlhbbvP3twBL/w9SsfxvkbpFn2ZfGSTXZhyiq4vjmQHW1pnFvGelwgU4v3eeRE/MjoCnE7M/Q5thpuog6WGf7CbKERnWZn8QsUaJsZSEkg6Bv2jm69ye57ab5rrOUaeMlstTfdlaHAEkUgLX/NXq7RbGwv82hkHY5b2vYcXeh34tUMBL6os3OdRlooN9ZQGkVIISvxVZpSHkYC20DFNh1Bb0ovjfujlTcka81GnbUhFGZtRuoVQ1RVpMO8xtx3YKBLp4do3hPmnRCV5hCm43OIjYx9Ov2dqICV3AaNXSLV1dW39Bak/RBiIDGHzOIW2+VMPjvvypBjmPv/tmbqNHWPSAWOxTyMx6E1gFCZvi+5F+BgkdC3Lm7U0BU0NfvsXajZd8sXnIllvEMrikCLoI/yurvexNDcF1RW/FhMsoua0eerwczcNm66pGjHm05p9DR6lFeJZrtqeqZuojdxBWy4vH6ghyJaupergoX+nmdG3JYeRttCFF/ITI68TeCES5V3Y0C3psYAg1XxcGRLGd4chPo/4xwiLkijWtgt0/to5ljGBwfK7r62PHZfL1Dp+i7V3w7hmOlhbXzP+zhMZn1GCk7KY=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS9AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucRBAKNQXH8t8gVCl/ItHMI2hMJ76QOECOqEi1Y89cDpegDvh/INXyMsXbzi87tfFzgq1O+9ID6aPWGg+bNGADXyXxDVdy7Nq/SCdoXvo66MTYwq8jyJeUHDHEGMVBcmZpD44VJCvLBxDcvByuevP4Wo2NKqJCwK+ecAdZc/8Rvd947SjbMHuS8BppfQWARVUqA5BLOkTAHNv6tEk/hncC7O2YOGSShart8fM8dokgGSyewHVFe08POuQ+WDHeVpvApH/SP29rwktSoiHRoL6dK+F2YeEB5SuFW9LQgYCutjapmUP/9TC3Byro9Li6UrvQHxNmgMFGQJSYjFdqlGjLibfuguLp7pueutbROoZaSxU8HqlfYxLkpJUxUwNI1ja/1t3wcivtWknVXBd13R06iVfU1HGe8Kb4u5il4a4yP4p7VT4RE3b1SBLJeG+BxHiE8gFaaKcX/Cl6JV14RPTvk/6VnAtEQ66qHJex21KKuiJo2JoOmDXVHmvGQlWXNjYgoPx28Xd5WsofL+n7HDR2Ku8XgwJw6IXBJGuoday9qWN9v/k7DGlNGB6Sm4gdVUmycMP6EGhB1vFTiDfOGQO42ywmcpKoMETPVQ5InYKE0xAOckgcminDgxWjtUHjBDPEKifEjYudPwKmR6Cf4ZdGvUWwY/zq9pPAC9bu423KeBCnSL8AQ4r5SVsW6XG0njamwfNjpegwh/YG7sS7sDtZ8gi7r6tZYjsOqZlCYU0j7QTBpuQn81Yof2nQRCFxhRJCeydmIA8+z0nXrcElk7NDPk4kYQS0VitJ2qeQYNENzGBglROkCl2y6GlxAG80IBtReCUp/xOSdlwDR0eim+SNkdStvmQM5IcWBuDKwGZc1A4v/UoLl7niV9fpl4X6bUX8lZzY4gidJOafoJ30VoY/lYGkrkEuz3GpbbT5v8fF3iXVRlEqhlpe8JSGu7Rd2cPcJSkQ1Cuj/QRhHPhFMF2KhTEf95c9ZBKI8H7SvBi7eLXfSW2Y0ve6vXBZKyjK9whgCU9iVOsJjqRXpAccaWOKi420CjmS0+uwj/Xr2wLZhPEjBA/G6Od30+eG9mICmbp/5wAGhK/ZxCT17ZETyFmOMo49jl9pxdKocJNuzMrLpSz7/g5Jwp8+y8Ck5YP7AX0R/dVA0t37DO7nAbQT5XVSYpMVh/yvpYJ9WR+tb8Yg1h2lERLR2fbuhQRcwmisZR2W3Sr2b7hX9MCMkMQw8y2fDJrzLrqKqkHcjvnI/TdzZW2MzeQDoBBb3fmgvjYg07l4kThS73wGX992w2Y+a1A2iirSmrYEm9dSh16JmXa8boGQAONQzQkHh7vpw0IBs9cnvqO1QLB1GtbBztUBXonA4TxMKLYZkVrrd2RhrYWMsDp7MpC4M0p/DA3E/qscYwq1OpwriewNdx6XXqMZbdUNqMP2viBY2VSGmNdHtVfbN/rnaeJetFGX7XgTVYD7wDq8TW9yseCK944jcT+y/o0YiT9j3OLQ2Ts0LDTQskpJSxRmXEQGy3NBDOYFTvRkcGJEQJItuol8NivJN1H9LoLIUAlAHBZxfHpUYx66YnP4PdTdMIWH+nxyekKPFfAT7olQ=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "FUNK671228PH6", + LegalName = "KARLA FUENTE NOLASCO", + TaxRegimeCode = "621", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "XAXX010101000", + LegalName = "PUBLICO EN GENERAL", + ZipCode = "01160", + TaxRegimeCode = "616", + CfdiUseCode = "S01", + Email = "someone@somewhere.com" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "50211503", + Quantity = 1, + UnitOfMeasurementCode = "H87", + Description = "Cigarros", + UnitPrice = 100.0m, + TaxObjectCode = "02", + ItemSku = "50211503", + Discount = 10.0m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", // IVA + TaxTypeCode = "Tasa", // Tasa + TaxRate = 0.160000m, // 16% + TaxFlagCode = "T" // Traslado + } + } + }, + new InvoiceItem + { + ItemCode = "12131707", + Quantity = 20, + UnitOfMeasurementCode = "H87", + Description = "Encendedores", + UnitPrice = 9.0m, + TaxObjectCode = "02", + ItemSku = "12131707", + Discount = 20.0m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", // IVA + TaxTypeCode = "Tasa", // Tasa + TaxRate = 0.160000m, // 16% + TaxFlagCode = "T" // Traslado + } + } + } + }; + + + // Información global + + var globalInfo = new GlobalInformation + { + PeriodicityCode = "01", + MonthCode = "05", + Year = 2025 + }; + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + TypeCode = "I", + Series = "F", + Date = DateTime.Now, + CurrencyCode = "MXN", + PaymentFormCode = "01", + PaymentMethodCode = "PUE", + ExpeditionZipCode = "01160", + GlobalInformation = globalInfo, // Información global + Issuer = issuer, // Emisor + Recipient = recipient, // Receptor + Items = items, // Ventas + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button6_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "603", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "CACX7605101P8", + LegalName = "XOCHILT CASAS CHAVEZ", + ZipCode = "36257", + TaxRegimeCode = "612", + CfdiUseCode = "CP01", + Email = "someone@somewhere.com" + }; + + var relatedInvoices = new List() + { + new RelatedInvoice { RelationshipTypeCode = "01", Uuid = "1fac4464-1111-0000-1111-cd37179db12e" } + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "50211503", + Quantity = 1.00m, + UnitOfMeasurementCode = "H87", + Description = "Cigarros", + UnitPrice = 1000.0m, + TaxObjectCode = "01", + ItemSku = "50211503", + Discount = 0.0m, + Parts = new List() + { + new InvoiceItemPart + { + ItemCode = "51241200", + ItemSku = "IM0071", + Quantity = 1, + Description = "25311FM00239 (LUARIL ETER SULFATO DE SODIO VEHICULO CBP 300ML), ACEITE AJONJOLI 150CC, ACEITE DE ALMENDRAS DULCES 150CC, TALCO 10GR, OXIDO DE ZINC 10GR.", + UnitPrice = 1000.00m + } + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "99", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "99039", + Issuer = issuer, + Recipient = recipient, + Items = items, + RelatedInvoices = relatedInvoices, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button7_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "603", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "CACX7605101P8", + LegalName = "XOCHILT CASAS CHAVEZ", + ZipCode = "36257", + TaxRegimeCode = "612", + CfdiUseCode = "S01", + Email = "someone@somewhere.com" + }; + + var relatedInvoices = new List() + { + new RelatedInvoice { RelationshipTypeCode = "02", Uuid = "61b2f6b4-f588-44d3-aec7-85cf146c33bd" } + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "70171600", + Quantity = 3, + UnitOfMeasurementCode = "ACT", + Description = "Vigilancia", + UnitPrice = 95.0m, + TaxObjectCode = "02", + ItemSku = "70171600", + Discount = 0.0m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.000000m, + TaxFlagCode = "T" + } + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "99", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "99039", + Issuer = issuer, + Recipient = recipient, + RelatedInvoices = relatedInvoices, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button8_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "603", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "G01", + Email = "someone@somewhere.com" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "50211503", + Quantity = 3, + UnitOfMeasurementCode = "H87", + Description = "Cigarros", + UnitPrice = 200.0m, + TaxObjectCode = "06", + ItemSku = "50211503", + Discount = 0.0m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.106666m, + TaxFlagCode = "R" + } + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "99", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PPD", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button15_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "603", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "G01", + Email = "someone@somewhere.com" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "50211503", + Quantity = 3, + UnitOfMeasurementCode = "H87", + Description = "Cigarros", + UnitPrice = 200.0m, + TaxObjectCode = "07", + ItemSku = "50211503", + Discount = 0.0m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.100000m, + TaxFlagCode = "R" + }, + new InvoiceItemTax + { + TaxCode = "003", + TaxTypeCode = "Tasa", + TaxRate = 0.060000m, + TaxFlagCode = "T" + } + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "99", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PPD", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button16_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "603", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "G01", + Email = "someone@somewhere.com" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "50211503", + Quantity = 3, + UnitOfMeasurementCode = "H87", + Description = "Cigarros", + UnitPrice = 200.0m, + TaxObjectCode = "07", + ItemSku = "50211503", + Discount = 0.0m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "003", + TaxTypeCode = "Tasa", + TaxRate = 0.060000m, + TaxFlagCode = "T" + }, + new InvoiceItemTax + { + TaxCode = "003", + TaxTypeCode = "Tasa", + TaxRate = 0.060000m, + TaxFlagCode = "R" + } + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "99", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PPD", + ExchangeRate = 1.0m, + ExportCode = "01" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button17_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "603", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "G01", + Email = "someone@somewhere.com" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "50211503", + Quantity = 3, + UnitOfMeasurementCode = "H87", + Description = "Cigarros", + UnitPrice = 200.0m, + TaxObjectCode = "08", + ItemSku = "50211503", + Discount = 0.0m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.106666m, + TaxFlagCode = "R" + } + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "99", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PPD", + ExchangeRate = 1.0m, + ExportCode = "01" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button18_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "603", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "XAXX010101000", + LegalName = "CLIENTE", + ZipCode = "45610", + TaxRegimeCode = "616", + CfdiUseCode = "S01", + Email = "someone@somewhere.com" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "50211503", + Quantity = 3, + UnitOfMeasurementCode = "H87", + Description = "Cigarros", + UnitPrice = 10.0m, + TaxObjectCode = "02", + ItemSku = "50211503", + Discount = 0.0m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + }, + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.040000m, + TaxFlagCode = "R" + } + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "99", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "45610", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PPD", + ExchangeRate = 1.0m, + ExportCode = "01" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button19_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "603", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + ZipCode = "42501", + TaxRegimeCode = "601", + CfdiUseCode = "G03", + Email = "someone@somewhere.com" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "80101508", + Quantity = 1, + UnitOfMeasurementCode = "E48", + Description = "SERVICIOS DE ASESORAMIENTO SOBRE INTELIGENCIA EMPRESARIAL", + UnitPrice = 3499.99m, + TaxObjectCode = "02", + ItemSku = "80101508", + Discount = 0.0m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + }, + new InvoiceItemTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.012500m, + TaxFlagCode = "R" + } + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "99", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "97134", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PPD", + ExchangeRate = 1.0m, + ExportCode = "01" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button20_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "603", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "G01", + Email = "someone@somewhere.com" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "50211503", + Quantity = 1.0m, + UnitOfMeasurementCode = "H87", + UnitOfMeasurement = "Unidad de servicio", + Description = "cigarros", + UnitPrice = 200.0m, + TaxObjectCode = "02", + ItemSku = "None", + Discount = 0m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.000000m, + TaxFlagCode = "T" + }, + new InvoiceItemTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.100000m, + TaxFlagCode = "R" + }, + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.106666m, + TaxFlagCode = "R" + } + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "99", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PPD", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button4_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "603", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "G01", + Email = "someone@somewhere.com" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "15111511", + Quantity = 10.236m, + UnitOfMeasurementCode = "MTQ", + Description = "Gas natural licuado", + UnitPrice = 200.0m, + TaxObjectCode = "02", + ItemSku = "15111511", + Discount = 0m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "99", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PPD", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button21_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "603", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "G01", + Email = "someone@somewhere.com" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "50211503", + Quantity = 1.0m, + UnitOfMeasurementCode = "H87", + Description = "Cigarros", + UnitPrice = 125.0m, + TaxObjectCode = "02", + ItemSku = "50211503", + Discount = 0m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Exento", + TaxFlagCode = "T" + } + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "99", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PPD", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button5_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "603", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "G01", + Email = "someone@somewhere.com" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "50211503", + Quantity = 1.0m, + UnitOfMeasurementCode = "H87", + Description = "Cigarros", + UnitPrice = 10.0m, + TaxObjectCode = "01", + ItemSku = "50211503", + Discount = 0m + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "45610", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + } +} diff --git a/FiscalApi.Samples.NetFramework/IncomeInvoiceValueForm.resx b/FiscalApi.Samples.NetFramework/IncomeInvoiceValueForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/IncomeInvoiceValueForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/InvoiceReferenceForm.Designer.cs b/FiscalApi.Samples.NetFramework/InvoiceReferenceForm.Designer.cs new file mode 100644 index 0000000..69f3485 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/InvoiceReferenceForm.Designer.cs @@ -0,0 +1,206 @@ +namespace FiscalApi.Samples.NetFramework +{ + partial class InvoiceReferenceForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.button5 = new System.Windows.Forms.Button(); + this.button6 = new System.Windows.Forms.Button(); + this.button7 = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.button14 = new System.Windows.Forms.Button(); + this.button13 = new System.Windows.Forms.Button(); + this.button12 = new System.Windows.Forms.Button(); + this.button11 = new System.Windows.Forms.Button(); + this.button10 = new System.Windows.Forms.Button(); + this.button9 = new System.Windows.Forms.Button(); + this.button8 = new System.Windows.Forms.Button(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // button5 + // + this.button5.Location = new System.Drawing.Point(203, 87); + this.button5.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(189, 60); + this.button5.TabIndex = 4; + this.button5.Text = "Consultar estado de factura"; + this.button5.UseVisualStyleBackColor = true; + this.button5.Click += new System.EventHandler(this.button5_Click); + // + // button6 + // + this.button6.Location = new System.Drawing.Point(203, 219); + this.button6.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button6.Name = "button6"; + this.button6.Size = new System.Drawing.Size(189, 60); + this.button6.TabIndex = 5; + this.button6.Text = "Enviar factura por email"; + this.button6.UseVisualStyleBackColor = true; + this.button6.Click += new System.EventHandler(this.button6_Click); + // + // button7 + // + this.button7.Location = new System.Drawing.Point(203, 286); + this.button7.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button7.Name = "button7"; + this.button7.Size = new System.Drawing.Size(189, 60); + this.button7.TabIndex = 6; + this.button7.Text = "Cancelar factura"; + this.button7.UseVisualStyleBackColor = true; + this.button7.Click += new System.EventHandler(this.button7_Click); + // + // groupBox1 + // + this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox1.Controls.Add(this.button14); + this.groupBox1.Controls.Add(this.button13); + this.groupBox1.Controls.Add(this.button12); + this.groupBox1.Controls.Add(this.button11); + this.groupBox1.Controls.Add(this.button10); + this.groupBox1.Controls.Add(this.button9); + this.groupBox1.Controls.Add(this.button8); + this.groupBox1.Controls.Add(this.button7); + this.groupBox1.Controls.Add(this.button6); + this.groupBox1.Controls.Add(this.button5); + this.groupBox1.Location = new System.Drawing.Point(12, 12); + this.groupBox1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.groupBox1.Size = new System.Drawing.Size(401, 359); + this.groupBox1.TabIndex = 7; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Facturación por referencias"; + // + // button14 + // + this.button14.Location = new System.Drawing.Point(203, 21); + this.button14.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button14.Name = "button14"; + this.button14.Size = new System.Drawing.Size(189, 60); + this.button14.TabIndex = 13; + this.button14.Text = "Complemento carta porte"; + this.button14.UseVisualStyleBackColor = true; + this.button14.Click += new System.EventHandler(this.button14_Click); + // + // button13 + // + this.button13.Location = new System.Drawing.Point(5, 286); + this.button13.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button13.Name = "button13"; + this.button13.Size = new System.Drawing.Size(189, 60); + this.button13.TabIndex = 12; + this.button13.Text = "Complemento de impuestos locales"; + this.button13.UseVisualStyleBackColor = true; + this.button13.Click += new System.EventHandler(this.button13_Click); + // + // button12 + // + this.button12.Location = new System.Drawing.Point(5, 219); + this.button12.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button12.Name = "button12"; + this.button12.Size = new System.Drawing.Size(189, 60); + this.button12.TabIndex = 11; + this.button12.Text = "Complemento de nómina"; + this.button12.UseVisualStyleBackColor = true; + this.button12.Click += new System.EventHandler(this.button12_Click); + // + // button11 + // + this.button11.Location = new System.Drawing.Point(5, 153); + this.button11.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button11.Name = "button11"; + this.button11.Size = new System.Drawing.Size(189, 60); + this.button11.TabIndex = 10; + this.button11.Text = "Complemento de pago"; + this.button11.UseVisualStyleBackColor = true; + this.button11.Click += new System.EventHandler(this.button11_Click); + // + // button10 + // + this.button10.Location = new System.Drawing.Point(5, 87); + this.button10.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button10.Name = "button10"; + this.button10.Size = new System.Drawing.Size(189, 60); + this.button10.TabIndex = 9; + this.button10.Text = "Facturas de egreso"; + this.button10.UseVisualStyleBackColor = true; + this.button10.Click += new System.EventHandler(this.button10_Click); + // + // button9 + // + this.button9.Location = new System.Drawing.Point(5, 21); + this.button9.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button9.Name = "button9"; + this.button9.Size = new System.Drawing.Size(189, 60); + this.button9.TabIndex = 8; + this.button9.Text = "Facturas de ingreso"; + this.button9.UseVisualStyleBackColor = true; + this.button9.Click += new System.EventHandler(this.button9_Click); + // + // button8 + // + this.button8.Location = new System.Drawing.Point(203, 153); + this.button8.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.button8.Name = "button8"; + this.button8.Size = new System.Drawing.Size(189, 60); + this.button8.TabIndex = 7; + this.button8.Text = "Generar PDF"; + this.button8.UseVisualStyleBackColor = true; + this.button8.Click += new System.EventHandler(this.button8_Click); + // + // InvoiceReferenceForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(425, 384); + this.Controls.Add(this.groupBox1); + this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.Name = "InvoiceReferenceForm"; + this.Text = "InvoiceReferenceForm"; + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + private System.Windows.Forms.Button button5; + private System.Windows.Forms.Button button6; + private System.Windows.Forms.Button button7; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Button button8; + private System.Windows.Forms.Button button9; + private System.Windows.Forms.Button button13; + private System.Windows.Forms.Button button12; + private System.Windows.Forms.Button button11; + private System.Windows.Forms.Button button10; + private System.Windows.Forms.Button button14; + } +} \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/InvoiceReferenceForm.cs b/FiscalApi.Samples.NetFramework/InvoiceReferenceForm.cs new file mode 100644 index 0000000..51798ea --- /dev/null +++ b/FiscalApi.Samples.NetFramework/InvoiceReferenceForm.cs @@ -0,0 +1,187 @@ +using Fiscalapi.Common; +using Fiscalapi.Models; +using Fiscalapi.Services; +using FiscalApi.Samples.NetFramework.Properties; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FiscalApi.Samples.NetFramework +{ + public partial class InvoiceReferenceForm : Form + { + private FiscalapiSettings _settings; + public InvoiceReferenceForm(FiscalapiSettings settings) + { + InitializeComponent(); + _settings = settings; + } + + private void button9_Click(object sender, EventArgs e) + { + IncomeInvoiceReferenceForm incomeInvoiceReferenceForm = new IncomeInvoiceReferenceForm(_settings); + incomeInvoiceReferenceForm.Show(); + } + + private void button11_Click(object sender, EventArgs e) + { + PaymentComplementInvoiceForm paymentComplementInvoiceForm = new PaymentComplementInvoiceForm(_settings); + paymentComplementInvoiceForm.Show(); + } + + private async void button8_Click(object sender, EventArgs e) + { + /*Generar PDF de factura por referencias*/ + + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + + // request model (utiliza las reglas de reporte https://docs.fiscalapi.com/report-rules-info) + var request = new CreatePdfRequest + { + InvoiceId = "51a3a6d3-b617-4a6b-8a67-cbfd654c7e90", + }; + + // Send request + var apiResponse = await fiscalApi.Invoices.GetPdfAsync(request); + + // Check response + if (apiResponse.Succeeded) + { + var pdfBytes = Convert.FromBase64String(apiResponse.Data.Base64File); + + File.WriteAllBytes(@"C:\facturas\MyFile.PDF", pdfBytes); + MessageBox.Show(@"PDF generado."); + } + else + { + MessageBox.Show($@"HttpStatusCode: {apiResponse.HttpStatusCode}"); + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button5_Click(object sender, EventArgs e) + { + // Consultar estado de una factura por referencias (por id de la factura) + + // Create instance of FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + + // model request + var request = new InvoiceStatusRequest + { + Id = "bda0b31d-e1e0-4644-91ea-c6f0e90fb57c", // Id, No folio fiscal (UUID). + }; + + // Send request + var apiResponse = await fiscalApi.Invoices.GetStatusAsync(request); + + // Check response + if (apiResponse.Succeeded) + { + MessageBox.Show("OK"); + MessageBox.Show($@"Estado: {apiResponse.Data.Status}"); + } + else + { + MessageBox.Show($@"HttpStatusCode: {apiResponse.HttpStatusCode}"); + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button7_Click(object sender, EventArgs e) + { + /*Cancelar factura por referencias */ + + + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // request model + var request = new CancelInvoiceRequest() + { + Id = "630a41d1-00ce-4750-8f8c-7b36786134d0", // Id factura en fiscalapi + CancellationReasonCode = "01", + ReplacementUuid = "de841944-bd4f-4bb8-adfe-2a2282787c62", + }; + + // Cancelar la factura + var apiResponse = await fiscalApi.Invoices.CancelAsync(request); + + if (apiResponse.Succeeded) + { + MessageBox.Show("Factura cancelada exitosamente"); + } + else + { + MessageBox.Show($@"HttpStatusCode: {apiResponse.HttpStatusCode}"); + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button6_Click(object sender, EventArgs e) + { + /* Enviar factura por referencia*/ + + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // request model (personaliza el pdf de la factura) + var request = new SendInvoiceRequest + { + InvoiceId = "51a3a6d3-b617-4a6b-8a67-cbfd654c7e90", + ToEmail = "mendoza.git@gmail.com", // email1@dominio;email2@dominio + }; + + // Send request + var apiResponse = await fiscalApi.Invoices.SendAsync(request); + + // Check response + if (apiResponse.Succeeded) + { + MessageBox.Show(@"Factura enviada."); + } + else + { + MessageBox.Show($@"HttpStatusCode: {apiResponse.HttpStatusCode}"); + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private void button10_Click(object sender, EventArgs e) + { + EgressInvoiceReferenceForm egressInvoiceReferenceForm = new EgressInvoiceReferenceForm(_settings); + egressInvoiceReferenceForm.Show(); + } + + private void button12_Click(object sender, EventArgs e) + { + PayrollComplementReferenceForm payrollComplementReferenceForm = new PayrollComplementReferenceForm(_settings); + payrollComplementReferenceForm.Show(); + } + + private void button13_Click(object sender, EventArgs e) + { + LocalTaxesComplementReferenceForm localTaxesComplementReference = new LocalTaxesComplementReferenceForm(_settings); + localTaxesComplementReference.Show(); + } + + private void button14_Click(object sender, EventArgs e) + { + + } + } +} diff --git a/FiscalApi.Samples.NetFramework/InvoiceReferenceForm.resx b/FiscalApi.Samples.NetFramework/InvoiceReferenceForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/InvoiceReferenceForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/InvoiceValueForm.Designer.cs b/FiscalApi.Samples.NetFramework/InvoiceValueForm.Designer.cs new file mode 100644 index 0000000..f95717f --- /dev/null +++ b/FiscalApi.Samples.NetFramework/InvoiceValueForm.Designer.cs @@ -0,0 +1,206 @@ +namespace FiscalApi.Samples.NetFramework +{ + partial class InvoiceValueForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.button5 = new System.Windows.Forms.Button(); + this.button6 = new System.Windows.Forms.Button(); + this.button7 = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.button13 = new System.Windows.Forms.Button(); + this.button12 = new System.Windows.Forms.Button(); + this.button11 = new System.Windows.Forms.Button(); + this.button10 = new System.Windows.Forms.Button(); + this.button9 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.button8 = new System.Windows.Forms.Button(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // button5 + // + this.button5.Location = new System.Drawing.Point(152, 71); + this.button5.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(142, 49); + this.button5.TabIndex = 4; + this.button5.Text = "Cancelar factura"; + this.button5.UseVisualStyleBackColor = true; + this.button5.Click += new System.EventHandler(this.button5_Click); + // + // button6 + // + this.button6.Location = new System.Drawing.Point(152, 124); + this.button6.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.button6.Name = "button6"; + this.button6.Size = new System.Drawing.Size(142, 49); + this.button6.TabIndex = 5; + this.button6.Text = "Consultar estado de factura"; + this.button6.UseVisualStyleBackColor = true; + this.button6.Click += new System.EventHandler(this.button6_Click); + // + // button7 + // + this.button7.Location = new System.Drawing.Point(152, 232); + this.button7.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.button7.Name = "button7"; + this.button7.Size = new System.Drawing.Size(142, 49); + this.button7.TabIndex = 6; + this.button7.Text = "Enviar factura por Email"; + this.button7.UseVisualStyleBackColor = true; + this.button7.Click += new System.EventHandler(this.button7_Click); + // + // groupBox1 + // + this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox1.Controls.Add(this.button13); + this.groupBox1.Controls.Add(this.button12); + this.groupBox1.Controls.Add(this.button11); + this.groupBox1.Controls.Add(this.button10); + this.groupBox1.Controls.Add(this.button9); + this.groupBox1.Controls.Add(this.button1); + this.groupBox1.Controls.Add(this.button8); + this.groupBox1.Controls.Add(this.button7); + this.groupBox1.Controls.Add(this.button6); + this.groupBox1.Controls.Add(this.button5); + this.groupBox1.Location = new System.Drawing.Point(9, 10); + this.groupBox1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Padding = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.groupBox1.Size = new System.Drawing.Size(300, 288); + this.groupBox1.TabIndex = 7; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Facturación por valores"; + // + // button13 + // + this.button13.Location = new System.Drawing.Point(152, 17); + this.button13.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.button13.Name = "button13"; + this.button13.Size = new System.Drawing.Size(142, 49); + this.button13.TabIndex = 13; + this.button13.Text = "Complemento carta porte"; + this.button13.UseVisualStyleBackColor = true; + this.button13.Click += new System.EventHandler(this.button13_Click_1); + // + // button12 + // + this.button12.Location = new System.Drawing.Point(4, 232); + this.button12.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.button12.Name = "button12"; + this.button12.Size = new System.Drawing.Size(142, 49); + this.button12.TabIndex = 12; + this.button12.Text = "Complemento impuestos locales"; + this.button12.UseVisualStyleBackColor = true; + this.button12.Click += new System.EventHandler(this.button12_Click_1); + // + // button11 + // + this.button11.Location = new System.Drawing.Point(4, 178); + this.button11.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.button11.Name = "button11"; + this.button11.Size = new System.Drawing.Size(142, 49); + this.button11.TabIndex = 11; + this.button11.Text = "Complemento de nómina"; + this.button11.UseVisualStyleBackColor = true; + this.button11.Click += new System.EventHandler(this.button11_Click_1); + // + // button10 + // + this.button10.Location = new System.Drawing.Point(4, 124); + this.button10.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.button10.Name = "button10"; + this.button10.Size = new System.Drawing.Size(142, 49); + this.button10.TabIndex = 10; + this.button10.Text = "Complemento de pago"; + this.button10.UseVisualStyleBackColor = true; + this.button10.Click += new System.EventHandler(this.button10_Click_1); + // + // button9 + // + this.button9.Location = new System.Drawing.Point(4, 71); + this.button9.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.button9.Name = "button9"; + this.button9.Size = new System.Drawing.Size(142, 49); + this.button9.TabIndex = 9; + this.button9.Text = "Facturas de egreso"; + this.button9.UseVisualStyleBackColor = true; + this.button9.Click += new System.EventHandler(this.button9_Click_1); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(4, 17); + this.button1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(142, 49); + this.button1.TabIndex = 8; + this.button1.Text = "Facturas de ingreso"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // button8 + // + this.button8.Location = new System.Drawing.Point(152, 178); + this.button8.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.button8.Name = "button8"; + this.button8.Size = new System.Drawing.Size(142, 49); + this.button8.TabIndex = 7; + this.button8.Text = "Generar PDF"; + this.button8.UseVisualStyleBackColor = true; + this.button8.Click += new System.EventHandler(this.button8_Click); + // + // InvoiceValueForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(318, 307); + this.Controls.Add(this.groupBox1); + this.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.Name = "InvoiceValueForm"; + this.Text = "InvoiceValueForm"; + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + private System.Windows.Forms.Button button5; + private System.Windows.Forms.Button button6; + private System.Windows.Forms.Button button7; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Button button8; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button12; + private System.Windows.Forms.Button button11; + private System.Windows.Forms.Button button10; + private System.Windows.Forms.Button button9; + private System.Windows.Forms.Button button13; + } +} \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/InvoiceValueForm.cs b/FiscalApi.Samples.NetFramework/InvoiceValueForm.cs new file mode 100644 index 0000000..c077e99 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/InvoiceValueForm.cs @@ -0,0 +1,786 @@ +using Fiscalapi.Common; +using Fiscalapi.Models; +using Fiscalapi.Services; +using FiscalApi.Samples.NetFramework.Properties; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + + +namespace FiscalApi.Samples.NetFramework +{ + public partial class InvoiceValueForm : Form + { + private FiscalapiSettings _settings; + public InvoiceValueForm(FiscalapiSettings settings) + { + InitializeComponent(); + _settings = settings; + } + + private async void button4_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos, + EmployerData = new EmployerData + { + EmployerRegistration = "B5510768108" + } + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "FUNK671228PH6", + LegalName = "KARLA FUENTE NOLASCO", + ZipCode = "01160", + TaxRegimeCode = "605", + CfdiUseCode = "CN01", + EmployeeData = new EmployeeData + { + Curp = "XEXX010101MNEXXXA8", + SocialSecurityNumber = "04078873454", + LaborRelationStartDate = DateTime.Parse("2024-08-18"), + Seniority = "P54W", + SatContractTypeId = "01", + SatTaxRegimeTypeId = "02", + EmployeeNumber = "123456789", + Department = "GenAI", + Position = "Sr Software Engineer", + SatJobRiskId = "1", + SatPaymentPeriodicityId = "05", + SatBankId = "012", + BaseSalaryForContributions = 2828.50m, + IntegratedDailySalary = 0.00m, + SatPayrollStateId = "JAL" + }, + Email = "someone@somewhere.com" + }; + + var payroll = new Payroll + { + Version = "1.2", + PayrollTypeCode = "O", + PaymentDate = new DateTime(2025, 08, 30), + InitialPaymentDate = new DateTime(2025, 07, 31), + FinalPaymentDate = new DateTime(2025, 08, 30), + DaysPaid = 30, + Earnings = new PayrollEarnings + { + Earnings = + { + new PayrollEarning + { + EarningTypeCode = "001", + Code = "1003", + Concept = "Sueldo Nominal", + TaxedAmount = 95030.00m, + ExemptAmount = 0.00m + }, + new PayrollEarning + { + EarningTypeCode = "005", + Code = "5913", + Concept = "Fondo de Ahorro Aportación Patrón", + TaxedAmount = 0.00m, + ExemptAmount = 4412.46m + }, + new PayrollEarning + { + EarningTypeCode = "038", + Code = "1885", + Concept = "Bono Ingles", + TaxedAmount = 14254.50m, + ExemptAmount = 0.00m + }, + new PayrollEarning + { + EarningTypeCode = "029", + Code = "1941", + Concept = "Vales Despensa", + TaxedAmount = 0.00m, + ExemptAmount = 3439.00m + }, + new PayrollEarning + { + EarningTypeCode = "038", + Code = "1824", + Concept = "Herramientas Teletrabajo (telecom y prop. electri)", + TaxedAmount = 273.00m, + ExemptAmount = 0.00m + } + }, + OtherPayments = + { + new PayrollEarningOtherPayment + { + OtherPaymentTypeCode = "002", + Code = "5050", + Concept = "Exceso de subsidio al empleo", + Amount = 0.0m, + SubsidyCaused = 0.0m + } + } + }, + Deductions = + { + new PayrollDeduction + { + DeductionTypeCode = "002", + Code = "5003", + Concept = "ISR Causado", + Amount = 27645.52m + }, + new PayrollDeduction + { + DeductionTypeCode = "004", + Code = "5910", + Concept = "Fondo de ahorro Empleado Inversión", + Amount = 4412.46m + }, + new PayrollDeduction + { + DeductionTypeCode = "004", + Code = "5914", + Concept = "Fondo de Ahorro Patrón Inversión", + Amount = 4412.46m + }, + new PayrollDeduction + { + DeductionTypeCode = "004", + Code = "1966", + Concept = "Contribución póliza exceso GMM", + Amount = 519.91m + }, + new PayrollDeduction + { + DeductionTypeCode = "004", + Code = "1934", + Concept = "Descuento Vales Despensa", + Amount = 1.00m + }, + new PayrollDeduction + { + DeductionTypeCode = "004", + Code = "1942", + Concept = "Vales Despensa Electrónico", + Amount = 3439.00m + }, + new PayrollDeduction + { + DeductionTypeCode = "001", + Code = "1895", + Concept = "IMSS", + Amount = 2391.13m + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "N", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Complement = new Complement { Payroll = payroll }, + PaymentMethodCode = "PUE", + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button3_Click(object sender, EventArgs e) + { + /*Crear factura de pago por valores*/ + + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados (usando los mismos del ejemplo anterior) + var taxCredentials = new List() + { + new TaxCredential + { + Base64File = + "MIIFgDCCA2igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0NDYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTQzNTM3WhcNMjcwNTE4MTQzNTM3WjCBpzEdMBsGA1UEAxMUS0FSTEEgRlVFTlRFIE5PTEFTQ08xHTAbBgNVBCkTFEtBUkxBIEZVRU5URSBOT0xBU0NPMR0wGwYDVQQKExRLQVJMQSBGVUVOVEUgTk9MQVNDTzEWMBQGA1UELRMNRlVOSzY3MTIyOFBINjEbMBkGA1UEBRMSRlVOSzY3MTIyOE1DTE5MUjA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhNXbTSqGX6+/3Urpemyy5vVG2IdP2v7v001+c4BoMxEDFDQ32cOFdDiRxy0Fq9aR+Ojrofq8VeftvN586iyA1A6a0QnA68i7JnQKI4uJy+u0qiixuHu6u3b3BhSpoaVHcUtqFWLLlzr0yBxfVLOqVna/1/tHbQJg9hx57mp97P0JmXO1WeIqi+Zqob/mVZh2lsPGdJ8iqgjYFaFn9QVOQ1Pq74o1PTqwfzqgJSfV0zOOlESDPWggaDAYE4VNyTBisOUjlNd0x7ppcTxSi3yenrJHqkq/pqJsRLKf6VJ/s9p6bsd2bj07hSDpjlDC2lB25eEfkEkeMkXoE7ErXQ5QCwIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAHwYpgbClHULXYhK4GNTgonvXh81oqfXwCSWAyDPiTYFDWVfWM9C4ApxMLyc0XvJte75Rla+bPC08oYN3OlhbbvP3twBL/w9SsfxvkbpFn2ZfGSTXZhyiq4vjmQHW1pnFvGelwgU4v3eeRE/MjoCnE7M/Q5thpuog6WGf7CbKERnWZn8QsUaJsZSEkg6Bv2jm69ye57ab5rrOUaeMlstTfdlaHAEkUgLX/NXq7RbGwv82hkHY5b2vYcXeh34tUMBL6os3OdRlooN9ZQGkVIISvxVZpSHkYC20DFNh1Bb0ovjfujlTcka81GnbUhFGZtRuoVQ1RVpMO8xtx3YKBLp4do3hPmnRCV5hCm43OIjYx9Ov2dqICV3AaNXSLV1dW39Bak/RBiIDGHzOIW2+VMPjvvypBjmPv/tmbqNHWPSAWOxTyMx6E1gFCZvi+5F+BgkdC3Lm7U0BU0NfvsXajZd8sXnIllvEMrikCLoI/yurvexNDcF1RW/FhMsoua0eerwczcNm66pGjHm05p9DR6lFeJZrtqeqZuojdxBWy4vH6ghyJaupergoX+nmdG3JYeRttCFF/ITI68TeCES5V3Y0C3psYAg1XxcGRLGd4chPo/4xwiLkijWtgt0/to5ljGBwfK7r62PHZfL1Dp+i7V3w7hmOlhbXzP+zhMZn1GCk7KY=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS9AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucRBAKNQXH8t8gVCl/ItHMI2hMJ76QOECOqEi1Y89cDpegDvh/INXyMsXbzi87tfFzgq1O+9ID6aPWGg+bNGADXyXxDVdy7Nq/SCdoXvo66MTYwq8jyJeUHDHEGMVBcmZpD44VJCvLBxDcvByuevP4Wo2NKqJCwK+ecAdZc/8Rvd947SjbMHuS8BppfQWARVUqA5BLOkTAHNv6tEk/hncC7O2YOGSShart8fM8dokgGSyewHVFe08POuQ+WDHeVpvApH/SP29rwktSoiHRoL6dK+F2YeEB5SuFW9LQgYCutjapmUP/9TC3Byro9Li6UrvQHxNmgMFGQJSYjFdqlGjLibfuguLp7pueutbROoZaSxU8HqlfYxLkpJUxUwNI1ja/1t3wcivtWknVXBd13R06iVfU1HGe8Kb4u5il4a4yP4p7VT4RE3b1SBLJeG+BxHiE8gFaaKcX/Cl6JV14RPTvk/6VnAtEQ66qHJex21KKuiJo2JoOmDXVHmvGQlWXNjYgoPx28Xd5WsofL+n7HDR2Ku8XgwJw6IXBJGuoday9qWN9v/k7DGlNGB6Sm4gdVUmycMP6EGhB1vFTiDfOGQO42ywmcpKoMETPVQ5InYKE0xAOckgcminDgxWjtUHjBDPEKifEjYudPwKmR6Cf4ZdGvUWwY/zq9pPAC9bu423KeBCnSL8AQ4r5SVsW6XG0njamwfNjpegwh/YG7sS7sDtZ8gi7r6tZYjsOqZlCYU0j7QTBpuQn81Yof2nQRCFxhRJCeydmIA8+z0nXrcElk7NDPk4kYQS0VitJ2qeQYNENzGBglROkCl2y6GlxAG80IBtReCUp/xOSdlwDR0eim+SNkdStvmQM5IcWBuDKwGZc1A4v/UoLl7niV9fpl4X6bUX8lZzY4gidJOafoJ30VoY/lYGkrkEuz3GpbbT5v8fF3iXVRlEqhlpe8JSGu7Rd2cPcJSkQ1Cuj/QRhHPhFMF2KhTEf95c9ZBKI8H7SvBi7eLXfSW2Y0ve6vXBZKyjK9whgCU9iVOsJjqRXpAccaWOKi420CjmS0+uwj/Xr2wLZhPEjBA/G6Od30+eG9mICmbp/5wAGhK/ZxCT17ZETyFmOMo49jl9pxdKocJNuzMrLpSz7/g5Jwp8+y8Ck5YP7AX0R/dVA0t37DO7nAbQT5XVSYpMVh/yvpYJ9WR+tb8Yg1h2lERLR2fbuhQRcwmisZR2W3Sr2b7hX9MCMkMQw8y2fDJrzLrqKqkHcjvnI/TdzZW2MzeQDoBBb3fmgvjYg07l4kThS73wGX992w2Y+a1A2iirSmrYEm9dSh16JmXa8boGQAONQzQkHh7vpw0IBs9cnvqO1QLB1GtbBztUBXonA4TxMKLYZkVrrd2RhrYWMsDp7MpC4M0p/DA3E/qscYwq1OpwriewNdx6XXqMZbdUNqMP2viBY2VSGmNdHtVfbN/rnaeJetFGX7XgTVYD7wDq8TW9yseCK944jcT+y/o0YiT9j3OLQ2Ts0LDTQskpJSxRmXEQGy3NBDOYFTvRkcGJEQJItuol8NivJN1H9LoLIUAlAHBZxfHpUYx66YnP4PdTdMIWH+nxyekKPFfAT7olQ=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Crear un nuevo emisor + var issuer = new InvoiceIssuer + { + Tin = "FUNK671228PH6", + LegalName = "KARLA FUENTE NOLASCO", + TaxRegimeCode = "621", + TaxCredentials = taxCredentials + }; + + // Crear un nuevo receptor + var recipient = new InvoiceRecipient + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + ZipCode = "42501", + TaxRegimeCode = "601", + CfdiUseCode = "CP01", + Email = "someone@somewhere.com" + }; + + // Crear una lista de productos o servicios de la factura (para pagos solo se usa un concepto genérico) + var items = new List() + { + new InvoiceItem + { + ItemCode = "84111506", + Quantity = 1m, + UnitOfMeasurementCode = "ACT", + Description = "Pago", + UnitPrice = 0m, + TaxObjectCode = "01" + } + }; + + // Crear la lista de pagos + + + var payments = new List() + { + new InvoicePayment + { + PaymentDate = DateTime.Now, + PaymentFormCode = "28", + CurrencyCode = "MXN", + Amount = 28599.99m, + SourceBankTin = "BSM970519DU8", + SourceBankAccount = "1234567891012131", + TargetBankTin = "BBA830831LJ2", + TargetBankAccount = "1234567890", + PaidInvoices = new List + { + new PaidInvoice + { + Uuid = "5C7B0622-01B4-4EB8-96D0-E0DEBD89FF0F", + Series = "F", + Number = "1501", + CurrencyCode = "MXN", + PartialityNumber = 1, + SubTotal = 10000m, + PreviousBalance = 9533.33m, + PaymentAmount = 9533.33m, + RemainingBalance = 0m, + TaxObjectCode = "02", + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + }, + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.106667m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.100000m, + TaxFlagCode = "R" + } + } + }, + new PaidInvoice + { + Uuid = "0050E143-E9AC-4CBB-B7AA-B1DA79C65CA9", + Series = "F", + Number = "1502", + CurrencyCode = "MXN", + PartialityNumber = 1, + SubTotal = 10000m, + PreviousBalance = 9533.33m, + PaymentAmount = 9533.33m, + RemainingBalance = 0m, + TaxObjectCode = "02", + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + }, + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.106667m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.100000m, + TaxFlagCode = "R" + } + } + }, + new PaidInvoice + { + Uuid = "E20978BC-B677-4AAE-83FC-60791EAFC69A", + Series = "F", + Number = "1502", + CurrencyCode = "MXN", + PartialityNumber = 1, + SubTotal = 10000m, + PreviousBalance = 9533.33m, + PaymentAmount = 9533.33m, + RemainingBalance = 0m, + TaxObjectCode = "02", + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + }, + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.106667m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.100000m, + TaxFlagCode = "R" + } + } + } + } + } + }; + + + // Crear la factura de pago + var paymentInvoice = new Invoice + { + VersionCode = "4.0", + Series = "CP", + Date = DateTime.Now, + ExchangeRate = 1, + CurrencyCode = "XXX", + TypeCode = "P", // P para pagos + ExpeditionZipCode = "01160", + Issuer = issuer, + Recipient = recipient, + Items = items, + Payments = payments + }; + + // Timbrar la factura de pago + var apiResponse = await fiscalApi.Invoices.CreateAsync(paymentInvoice); + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura de Pago {apiResponse.Data.Number} creada exitosamente"); + } + else + { + MessageBox.Show($@"HttpStatusCode: {apiResponse.HttpStatusCode}"); + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button5_Click(object sender, EventArgs e) + { + /*Cancelar factura por valores*/ + + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + + //Certificados ESCUELA KEMPER URGATE + var credentials = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + + var cancelRequest = new CancelInvoiceRequest() + { + InvoiceUuid = "3fd44a11-e419-4bdd-ae5c-7e766879de2d", // Uuid de la factura (no el id de la misma) + Rfc = "EKU9003173C9", + CancellationReasonCode = "01", + ReplacementUuid = "de841944-bd4f-4bb8-adfe-2a2282787c62", + TaxCredentials = credentials + }; + + + // Cancelar la factura + var apiResponse = await fiscalApi.Invoices.CancelAsync(cancelRequest); + if (apiResponse.Succeeded) + { + MessageBox.Show("Factura cancelada exitosamente"); + } + else + { + MessageBox.Show($@"HttpStatusCode: {apiResponse.HttpStatusCode}"); + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button7_Click(object sender, EventArgs e) + { + /* Enviar factura por valores*/ + + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // request model (personaliza el pdf de la factura) + var request = new SendInvoiceRequest + { + InvoiceId = "51a3a6d3-b617-4a6b-8a67-cbfd654c7e90", + BandColor = "#FFA500", + FontColor = "#FFFFFF", + ToEmail = "mendoza.git@gmail.com", // email1@dominio;email2@dominio + Base64Logo = + "iVBORw0KGgoAAAANSUhEUgAAAfUAAACKCAYAAACzS9OxAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAC9FSURBVHhe7Z15tFxFuberz0kgYQrkgDIaQFEmQQJEggSBkOCHhCHEgdEYkBDDoHFd73f/uq511133D7+lCQRNIAIGgcgohMgQQBAJkIASEHEAA0FJ0CQMAibknNNfP5VTuTtt967a3Xv36b3P71mrztC9d9Vb766q961xl9auXVsePny4EUIIIUQ+Wbdunbl03IWmo+9/IYQQQuQcGXUhhBCiIMioCyGEEAWgVJJRF0IIIQqDjLoQQghREGTUhRBCiIIgoy6EEEIUBBl1IYQQogCUyiUZdSGEEKIoyKgLIYQQBUFGXQghhCgIMupCCCFEQZBRF0IIIQqCjLoQQghREDrKfX/0FiDUhhwWKQghhBA1KJVM6eXLzyh3DR1senpzbDC6N5ryxw81O039zhZDD+9teMPcufwCs6FnXSWv+R2U6ClvNLttd7j5/MGzc50PIYQQ2cD71C8ff5EprfzcXuWuQeWK4ej7Jo9s/MB0jzzWDPufW0zFT6l0aMsV41cy76x/1Vz1+EjzXvc601H5OK909xqzz45Hmws//Vgldx2V/rp67EIIITaBvbNGfdzXKhZi8GBjBm+V/zCokg8M+haUTGdHhxlU6dx2Vqx6XgPyd6iHLoQQwoMshRBCCFEAGMmVURdCCCEKgoy6EEIIURBk1IUQQoiCIKMuhBBCFAQZdSGEEKIgyKgLIYQQBUFGXQghhCgIMupCCCFEQZBRF0IIIQqCjLoQQghREGTUhRBCiIIgoy6EEEI0AG9HiwuthhRl1IUQQohAokb7gw8+MG+++aZZtWqVee2112xYvXq1efvtt83GjRv7xbiXVk7Yt9w1yOT/feqHjTHD/uumTS9f3fw+9ZVmzhOHm/e717RcsWnS01s2I4YdY6aMetS+hUfvUxdCiNaCDent7bVG+49//KNZsWKF+fvf/27ee+89a8D5Djo7O81WW21ltt12W9PV1WX22WcfM3r0aLP11ltXTFM2bTey8T71b46bqp66EP0FFTHPzqYQAwHqKMb4hRdeMPPmzTOzZ882d999t/ntb39rjfr69etNT0+PvYbQ3d1tDf0bb7xhnn/+eXPfffeZd999ty+27JFRF6KFRA05lZ/GwH3mPhdCtAfUSYzzddddZ66//nrbQ6fO0hMfPHiw7ZVH668LHR0d9juuIbQSGXURTK3CmyS0I7XkTBKSwPXMvy1evNjMnTvXzJo1ywYai6VLl1qPP2mcQohsoC4uX77c/OAHPzC/+93vrJEeNGhQQ3U0q2H3apBMc+o5oL/n1NEd80gUbDzQpDDXxNzSoYce2rLCHQL5WrlypZ0bI1/I6ZOPe7iW6/DAR44cGTRXxn2//vWvzT333GPeeustG4crky7dvfbay0yaNMn+bic9CTHQoG4+9dRT5o477rD1E4PeCK6duPzyy80uu+ySWb1GXubUZ4ybKqOeB9rBqC9btszMnz+/oaEkKsWwYcPMjBkz7O92MVjkix4zc2V44EkgT9ttt5359re/bXbYYYfYPJHOb37zG3PzzTfb6+o1ECy22XHHHc1FF11kPvzhD7eNnoQYSFBfaRNuuOEGW88b6cg4qMMM1WPUd95558zqNDJvMuoXa/hdhEHBpnA2EoYMGWIXilBR2gUqAdtPXnnlFTN06NCacocE4omD79nesmjRoliDDjhMDM/Tm+daX9xCiHRxxvHOO++0c+fNGPQorazLMuqiJVCo6a3i+baLsUKeDRs2ZC7Pc889ZxuKkCE8DPtLL71k/vrXv/Z9IoRoJaxWD62vDpxwnAAXaOfS6JUnbZtKdixXiBZABaFnzBx2f0NFYcsJW1KSDrs3wquvvhpcObmOAy3+8pe/9H0ihGgF1D1G7nDCQ6cZMdxMm9GjZ3j9Ix/5iNlzzz3tNKOryxj5JHCfC+yQwUFIgoy6aAmugLNYrB1g0d/atWubHl4L8caTrmonzn/+8599/wkhWsWTTz65+SQ4H26+/ZhjjjHTp0833/jGN+zvSy+91Hzzm9+0f59yyilmjz326LujPs6IE2gv/vSnP5mFCxfalfeMGiRpP2TURcugV4wx/cc//pGokKYJ6WI0n3nmmVRkCImDOfskQ3HEuc022/T9J4TIGuoc7RL70EOG3anPtGdf/vKXzRlnnGF75+yCwcgTqL/sYhk7dqxd+Fq9QJj0ouGdd96xIwS33HKLmTlzprnmmmvMww8/bF5//XX11EX7QmFnIdiLL77Y90n/wDQAQ+JJ5sxq4Sqkj3333TfYqHMdjQPDeEKI1sHUIMY1ZPSOYfFx48Zt3qYbFxjKr25rGJLnUJsnnnjCHmzz/e9/3+4uYhsdPXNkYCEu9xFHKFwpoy5aCkaQIXgKaohBzALST2uBXEgchxxyiN2iRkPggymKAw880Oy2226JKrMQojkw6iG9Ygzyrrvuas9zD6G6HtNm3HbbbbZHzm/W9rDGh54/DkCIUxGHjLpoKXie9JLpLbcaKhNDbK1aIAdUaF7sMHHiRDsMX8+wcx0GnWE85uGEEK2Fc9xDnHQM/wEHHGC36jbqeJMW9R0j7jPkSY28jLpoKVQaeslsJ+sP2CvPFECz3nASqPj77befmTJlijXaLMShQvPb/Y1eDjvsMHPBBRfYA2gabSyEEMmhvoWu9eGaRqfHuNfV7dC0Qq5zcKWMumg59JLdkFOSAtsMpIOHndYCuaRQkXkF47Rp08zkyZPNZz/7WTsfxzGzn/vc5+zn5557rgy6EC3GtQ3OufbBaCOnSDYDdTyrdkhGXbQcesksBmn1gjk37N/sArlGoSKzCO6Tn/ykOe2008z5559vzjnnHDN+/HgzYsSIzdcIIVoLRj1kPzn1k/aDetyuyKiLfgEvtdV71umlh+5BzQoahXpBCNE/JKmDdEr6q2MQgoy6SJ2QFaRUCk5v4jjUrI0s8XP+unt9YhwhsgshigVtRGg7hPHvz45BLBWxZNRFqjBfzvYtn3GkUnByUqsWzD3//PPWsMctkEPm3Xff3a5GVc9ZiIFDEqMOrWwfEqVVuVRGXaSG82DHjBljD07wFUYcAIzt+++/n5nnS7zMlTHUH5cGsmLMjz322LYeWksT9JEktAO15CKkSa34Q0I7UEuuuNAf1JLDF1pBknRaZdRJJ2laMuoiVTCgbPdgpbdv4Qm9Zs5f/8Mf/tD3STb8+c9/ti9Iidub7uRmwVoWQ/DVjVRcyIrqdBgp+dvf/mbfCseIyZIlS8yjjz5qw69+9Su7BoFns2rVKrtToTqOUKL3xIV6RK9hOyRlhmkbwpo1axKfrV+LaBo8f7Y3kW+ODY3q5pFHHjG//OUv7clf7ODgwBJGgCg/0ThaSTRddMFJZTw3nt/jjz9u5X3ssce2kPmtt96yZyZE782KaBoE9wyZfsOpX7p0qZUP3aJjdI3OOf+c8umerwuNEo0jGtx3SYjelyRE70lqrKPxVIfNVP4srZywb7mr0tb1tMbxyIaNH5juw8aYYf91k92nV9GWzeg761eaOU8cbt7vXrNlxnNGT2/ZjBh2jJky6lH7Yr2K79b3TWtAdzQQN910k+3N1oNCiuH81re+ZRuOG264IfZ6oGHhIAf2Z2fh/SL7zTffbJ5++ulYWVhAxznOn/jEJ8x3v/td7/YWGv7tt9/ezJgxwx4uEyc78axYscK+U97Fyf3Re9zoAI7O3nvvbc+OTksfLk10zVnSGHEaVBpMZCKvzgFzabp7kAe9IQ9voWKf/Uc/+lHr/Ljz6evJSRzscoium+Ba8s7/0akQPmPqgzSi8XEdz+b3v/+9PRsb5wyZ3SE+lDf0z5TPySefbH8n0ZuTC6cFnaAbdkggN8aEtJENqnXDb9LnEJKddtrJ6obzCDgWeLvttrPXJJElKU4Od/QyDgiOiHumteSOysx55OgcBxyZu7q67Pdpyezko2ytXr3a6pZ6QLnDaXLlzqVXrV/KB6vM0SXPlXKHfvnblZ1QWYmTdHF4+NuVd+od/1OeFi1aZJ2daLmshvS4h22ow4cP7/s0Offee689gMaXFt9zGBXlyz3PWiAT5eCay2bJqOeBvBl13laEweM8Y99BL+6eSy65JPWjUZGbxnnWrFmxvTkqizPQNDTf+973Ujfqc+fOtQ0vefWBLjDszerCyc951vR8nn32Wdvou7y5Bi0un4AcBPJM4D4aGfbZ84aq6pdVOIiXHhhHYfqcO2T64he/aONzcXE/Pc7777/fOol8TlmqLk/IhPH92te+Zg466KCaslTj8oyTsGzZMruIkrJKXC6NJLohcC/Xow8c1U9/+tP2pR7uurRwMuEsMaISfUlSyDOtlhlw0HBKeDnJhz70oabkdWnjKC1fvtxOfSGrO5o5ql8fTk5n/HFG0OmoUaPMwQcfbI1+iKykhSElMDVYC6e7EKLOSCOknRZxod9/LHlDw+8ifVzlYz+261HVg8LIa0YxOFlAo+I7KYpKw3nrGGfXyKUNlRiD7gtclwbkl7UKixcvtk7NXXfdZQ0Yz4ZGDSMb2rByDdcin3vJBD0ajC1DpXFwX0jenTzgZHrooYfMtddeaw26u8Y1htHg4nf3xeHuoed44403mquuuso6HgyhEwf543dS3SAD8nEv5Q298NpMHOHQ40dDIB7qyz333GPjZ0id/5M802qZCThVOJ3I2gzEjXFhGJ1yh0PHCAj1ysnonmEITlbu437q6ssvv2z1Onv27M3tRkh8xMPzqRdCZQJX5hoNaafl9Aoy6iJVKKyuwHLsacj5yBRGhlbTmBt1EA+9N3qorrDXAtmoEJzsVgSc/pmrpNGjZ4KRccY4Lf26BjKt+Kp54IEHzM9//nP7N+mkgSsTOAsYc0afnLEhP2lBXMRJ3Ez78Bx4Tzc0oy/uxRm5+uqr7Ws5cZjTkp24qQfNxEUcrF/54Q9/aJ1IRj6QL81yQjzOiKGLn/zkJzbglPnSSEuGdkdGXWTGHnvsEbRgDmNDD4E5wTRhDo/h5jijjmwMO7oT3fIMjRY9LhpU1jOg07QNVjVZNJQY2wcffDB1Y4CRuf766+3cKb1JdJNlQ0/cpEFP+tZbbzV33nmndSoaSZN7mOufN2+eHbnIWvYkODlYkMd7wBkRQr64epcGxE8ZwXGfM2eO1U+76KQ/kVEXmXLEEUf0/RUPPWYa8zShl+QbTiddeulZGr5WQGPGAineyczQJ/9n3aimDc+APGB0Ia0Gmnhw7jCIDDFn7ehUQ1oYH+a/FyxY4F2vUQ3XslqcHinTHvRS2wVko44tXLjQOpM4yeS1lfA8cWB/9KMf2ZGCtMpNXpFRF5my//772xXNPuNKQ8BcmVud2gzcz0pXev5xDQwysaiJxVV5hvw6g86iqXbrxYXKwnUMK2O40nJIiJOyQA+d4Vp00x8gB2nTq7z99ttt2QvRC9dwLb18DFerDWYcyIZTjEFnOxqy9ZdzTNrUAUaoorstBhrkWkZdZAYVnneIH3LIIUEL5ljYxcK2NGABje8tcPQqcDqiq7fd77xA/uj50QNkuqERo0We0QVDwwTic3/z3JrRSWjjihFnux1GL62eKGlTBtjSyH72pPHW0ovTDZ83oheeD6vtmdcPhdXjboQhBORyMiMnToHLh5Pf52SH4vbto9vQZ+1ABsqXk8sFPmtEPgw760eoCxj4anmaKcd5QkZdZA4L5jDuvkpFw45Rd1tfGoH7uJ94fL09GoHqBXLI2F+Vn3SRP2lvhwVlroeeBBp6GlH0tOuuu9otQkcffbQ5/vjj7amA6Ia1Bix2dI1vVrohzzyzeqcLki7yIocLcQ2/i4NeJG/nS2LQiZe8IhN6wSlFH2PHjrW6YUqJg4rYTsV1yJUEZGFEAicsrpzzHfnkAJm466JwPXIdfvjh9tyFqVOnmosvvthcdNFF5rzzzjOf//znzac+9Sm7x9rls5FnijwcDsOCRupRqHyAjOiM15d+/OMfN0cddZQ54YQTrH4/85nPWEebVxA3Ih+y0FN3iyyjkG7UeYiGpOkQF/fUiiskJEkrNB1kAu1TzwF526d++eWXb7HXlfuZ7wrZp01l/8pXvmINTJKC7yAtVtIzFB2XFumw33X69OnWqJEW9zLEyVYcKlJcmaHBSbJPnflcDlCJk8nJ8PWvf90aDV/+uZYTwsgrf8fJGwXZyT8Gi8af7XwcPFLr2XIt+9zZloRemdLA8HItOjrppJNsqCUr8jzxxBNB+9TB5T+Kk9UdfoOuARlY8UzPjO+BA4zIi4uHXj/b1nxlLgp5wqCgF/bhU47r6YWFdzxTtpVhSEgn9BnQAPOMMbg4Y/X0xxwxZxyExEucHNAyceJEe0BLHOw0YWEZI1ovvPCCfcakceGFF9o99nFlj+tY/MeWOtYqhOqX58S9GG32mXMWgzukpxriRz7WxbCTg+cSmg6yEyZPnrxFeeDMA0ItZx/d4VT6RveA7ykblEX+9l1fC/TuexcFciMrTiTl3+WjOj2XX87kePj7CytG/eQRxTDqIytG/b8XVIxeJcN9mX9n/avmB0tGmve615mO5HpvG7orHZJ9djzaXDDqsVwY9csuu2yLk724n0LMQh9fxaTyUmF417i7Pwmkxd5mGqo4WUnn9NNPtz2wqJx5Mepch2FjaxZzxr5RCQeNF/LSM+JwFHrhjlrpVeuANQ/uCFmGOOn5pWXUq0FWGn16b4z20Lt0jSD6J/8YFRpjDPhZZ51lnUHgO7aS8TxDdIP8GB0aUE4Lw7A7fHqhl4ROWLGPzKEjLZSxSZMmmdGjR9dNgzjpdfpGYZCdw5vomfvKI0TlxxgwGsDeet7v73OouZfzD+IOcqmGvO6yyy7m1FNPtU6DS79eOlH5OIXuZz/7mV1VH1qOeA6MMk2bNs3WOdKJxlkN+qPe+3bLEA/xuY5Lo1A2cZR97QH65TAvnG4fPMd/G/9103nJUQd+Z+sddjTd2+xgerfNaRhSKcQf2c8M/czJplTe9OB4gB90v2teXH2XGVTqNEM6h5mtO3fIZdiqY4jp2mZ/88ndvljJWetnTNAlhR2P2ddA0qBhLKIeOPfTSHI/nnBco8d3eLAcXON6ZaGQDvOyHIri/q8FBgH5aGCYFnBwPcaAnhfX1LsfqHAMc9Ig+xo24mFelHldX4PPtUceeaSd54+D65jLJN7Qho6Gle17jISgX9fYJQG90fth2BQDz8lyHN1ZC2SkIQ555W01yMp2SHpbDH/TUyE+Jy96RO80dsjDYkeGc7kOMFI4HiG6IU6eN8fMTpgwIehshSjoEVkxqoxGYVCQNQQWBTIqUKtxJw7ygZ59+sMo4Yxw3GvSZ4rOOB6ZZ4oOo3W3GmRCZhb7hebTPcspU6ZsPmEvCZQxygB6CNEFUD4YSWFbrW/Ugjzw/Kn3OKq+Osr3ro1LqmvS4h7Ou2d0xJcWeSUt11OvB/EyurH4hkWm9MbKl8s7VyoGhSLXVDLfOXT7TT31PnrL3Wb9xrf4a9MHuaVsOkqDzZDBO1X+Dmss0oQC00xPHYgDzx4P32cE6fnQA2SOLUmlIQ22Q7EIKS4NGhkMJ3OO1TJiePHYkYH/60Ej0F89da6h8UFO3xCegwaYODGSNNxJ9FoLZKARoYGvd7wv1zTSU0dWZ9BDep1AWk5/DC1fccUVwb10ysO4ceOsUYRGdUPaOK4M+TtZfJDXr371q3WPt2WIm55qXLkB7qXc0DttRn7fvVwTOnoA2BV6tBzhi2PfjGyUN6bxfD1cB88VveJMxKVL3DwHykxoT71WGxeC0zE9dc4b8KWFjhkVqH4nQjXE63rqHYO23dF0bDPMDN5+eL5DJQ9Rgw4dpUFm2613qYQP5zzsaoZuxfBL6w16miRdMEelpLCGwHX0spn39VV44qd3VIvQ9Pob8kklDjHoNKz0ds4+++xUDDoQB88y7fP6cZYYpeAc+FCDDtHrmDcNnZKgMaeXilGHZvLCvYyAMF1AvCFwD2W9GsohukhSB7i+GXx5Rw4WoTKVFqJb4sOZO/PMM5sy6MC9lDfOpg9pQ4B2AIcI5y5Eh83I105sbhHIUN5DLWpdl9eQZ5CfhVkf+9jHvA0eDQYeM/vWk8AwL4d0xBk6DJw76S6PuMaeOeTQxp7rGFb2eftJyaJc8nwYoWH+tdG4cXhC7uUaekL00ClzaeXluOOOs9MCIUaWdFkMV2uBFv+HOG1AnWKqI2vYSRA6BI5MjIg1MiVQC+Kg7jIcHeI0oT8cfXYZ+CDutJ5/f7O5xFCc8h5qU+vKvIb8Qw85xBjRIDLkHwLxUSFDridetvTgxee1EtOosto6pGF1Q5DMSbZ7fjHo9PzrjaL4oBwwLcHwbKjRYT4+ZKdBKMTDtAzbAUMMD0abuVWc2CjEw3ehvVKuZZ4WIxZSvxqFKSSekw9kZh6YLZJpg1FPMoqTtHOQdzo+KPeYblM2Gyq/8xo2lnsroedfVoWXDe+sXl+QsOFf8pdHWIzDHJuvYcDosn2KnndII8X2F19jjkGnwWWINM/Q8wh5+Q2NHsOfrPDPA87hCn2dZi1YKBmyAAm4plEHwgdOVOiCO4w/86u1YNokJA7KPY4BB6+wzoGykaZxJy6eTxKHie11jcw7x0FcjOLQ+w9xLnjG6MW3RqZIlA5f8Mdyx/Zdptyb34VyG3uN+dSOZfOjMV2m0275qlB5gD0bVpue584zHRvXVv73F8S2pbfb9A470gw+aE6lv05jlV4lCYHK0OxCOQdxsTqd4FtoQy+TYWOGM+MaBuJkywurwX0L5NiyxNanerLhRMycObNtF8rx/fz58+08rG/xGQ0re4GJj8YtTsYsQNbQhXLIhoy8S54h1kZkJT0WSbJY0le2eH4YTBYh+VYWJwU5MDgshmJI3GcEKZf07NlOFpUjif4cxEW+qDOUdbdlsdn8IQuryakbIQ4lcnzpS1+y+9HT1C0k0Qtpcw3bwupNPxEf8rLw1De1wP2+Ni4O0uKeTBfKPfvWYLPszcHm6RyH5ZXw4jsVZfVlcDOV3u2gd35jBr9NeDrH4VnT+e4LZGhTvnIOvbGQhpRGnkU5GKd6jQifcwAJh7DEGUygAlWfIJcnyCvOBmeYoxsfGC4O+ugPg54UZGUfOr2wZkA39cpKFIzu7rvvnrpBB+KjrOGckC8frkHmvmrZWfuRZOQCA8ZIBWfFX3nlldbRdQfLhOglDmRkBbovHmTFmcAxzQp0S159ekFW6gyjFwMF2zbkPdB55fe/FrXKJ/TQ7TV9F+UxkLESBqu5StkOUAnxcEMXzDGcykKiODDo9CLiDJ1rxBm2yzM00DgxIUYdJ4eeeh6gXNAboWcSasCi0HhzH+UgxHhxLeUhS1gYGgLPkrUArCyPgozEwTC2r65EIT4MHjsAGMGid33HHXdsHuJv1Lij25Ahb+RmlwUjBllB3KEOGTKz9XOg4G8ZckP+Dd5AgqHBEMNEheSAlVrQONET4ntfQ0U8jBCEePftDI1TyNn45JFFVhjKPIC89NSbAb34DjdyoL+QU7qaAcMTakDpTVYbdQdD6ThoScstTjFOEg4DJ96x551pIE5bpN6EyubAoQyRgbjZltjM2ggflO3Qw1+4hnIxUCiQURd5glPIQhbM0TAxF12vB8bCnZC5qSIskIPoWedx0LAy109vJg/wjOJOMguBedF6hrEaDH+z6flA93Hl0kG5pieO/NWgF3rqxxxzTM3vQyCvbgSEPfy8hvbqq6+2L2Qh7VDjHmoYSYeylxXEj5OTZOqEdQADBRl10XKoiHjx9Jx9BooGyc2Z14IFfHFz7sD3rLqnZxbaCLQrSXoczGv61hm0Czw/ykQzYPR8ZQEoAxhbt4gsKxgVQpaQMocTRqgHe+l5J0Ko01ILZKE8kHe2edFrv/XWW2398ukMQhbIOehJZ41vMWSUEEe4KMioi37DvenI1+jRkHDYChXTNSr8ZvFLyLniOAZZbV1qNQzThhgJrsGokPeQ69sBZG0GykecYYxC+QnpRTcD+Qk1glDvOblnybHGrCbHeQnNZz2cs8cq8jlz5thDZXyyJhkpyFq3QBp5Kdutgicooy76BSojw+8Mw/sWAVF5OWyFofYonLPt25NMQ8+BJgxhFoEkPQ50PJAavXbLaxLDSxmOM4TkjZEMtonxalWGnkMdvHpgxOntso2LM9UZmo8z7O2o31CnqVmHMU/IqIt+hR60r8JRcTH89Naj/7NAzncvRrAIC+QcoY0Y19HoJ2n48g5lISSvXINeGp2jDoUyGqp/ZPdNlVB+iYuz5dnPz8lqOALko5myTbpsVeMcCg5xqidvkt43ZS9rkqSRZKi+nWjkucqoi36Fnjrbdnw9UBoUhtrpmQPb3HxHpVIhWAzF6V5FAeckBBpm5kCzNlztBLoJNTwYW45UzRIMJen4oJxidEIND9ezq4Fe+/Tp0+356tzrnLhGQG+skmfrW73dFaFrHrg3y9XmxE97EbJnHrgmLwtG00BGXfQbrjFjbt1n1OnJsJ3LLZh7+umnvffQU8Jp8J3GlCdYgBTakGG0BtJWHspS6DYqjB87KrIEBzTUqGN0kiwU5B4Ch7Aw137ppZeaE0880b4NDUfOVzdqgVPE3PqyZcv6PtmS0PPWKXvkHRlCymojuO2LoXWB3S95pBH9yaiLfifJgjlOmONVipwL7xuuxBEoygI5B/t/fVMOgK7oyXAAyUABoxhqeIDT57KEchoiC9dgjOkth8ru4HoC61NOPvlke6ToF77wBWvscWqTGndkwKhzb7VBoeyFGBnKJ4tYWVWfFTgNIS+vQTc4e1kehJM1ITr/XzYdJC5Ev0Gl42hQ3mlNQxIHRpwT5hYuXOit0DRm7lWvRYLGKUlvdKC8oQp9YEw4wCakd8y1nMueZW+S6aEQBwx5OWWxGcg/AafmqKOOssPy5513njXuSebckRdnB9mrYUtoyPQG+qQXnaXTRNz1pgmikG+m4HBI8kros3PIqIu2IGTBHGD4OYzGdy2NNXPpeOlJK0U7Q+NECDVc6Iq51qwMV7vBToeQ541uWPVNSBt0TU8VwxNSprlmr7326vuvOcg7gaF0RsB4mQ973JEppMxwHU4Aw/DVYNRDXwVLWpS9rOBNhaFyMIrB9EbI9a0kK3lk1EVbQI+aBjlkuNDXUFJZ6LHQqBUJ8oWTEvqiEHpVGBYWGA4UeImIb1oGMF4sJHzuuef6PkkXjI5vuyW4srrnnnv2fZIOxOvKy7hx4+yQPLLwmQ90U2vaBmeS9SmhZe/FF18MGiJPAnExrYR+Q0YNkJWX4rQLTv8hzh4gf4i+o8ioi36Hgk7P4rDDDks8B1gLevM4CXjoIY1Y3uB0vCQ8+uijA6a3zktaeJlISEOI8WdbJKu+09IN8VDmmJcOiZPyjkFnWiWLskqcBEbCcHJ9U1yO6vlw4sAQYSBDHe81a9bYNTBpg5NK3CEOE05N0vrSCkLLG7pOeoqgjLpoGxguZ5Vqs40blb1oC+Si4LAkMVycjf/II4/0fZIu7eQoUG7o9XLQUKjh4f35OD1pwg6NFStWBI0YIHPcOwnS1O+BBx4YFB/X1NPfAQccELytkp40umXXShr5IA4MHK+TDYmPPDCqlfXb+JISqgv3HBLtYMH56vtTiH6Fxo05u5AFc3FQCdxJdXkEPcQ5NXzHSmn0FGK4AOPy8MMP215TGo0rEA+9f1Z4pxVnWnDYkK8X50A3jz32mH1zWbP54H4M2L333hv7DB04ZTxLjG0tqAc4ZMSVho6ZVw7RC+nRw63FiBEjEk2T0aO+++67bV7TyMMvfvELu8AxZOidfIwcOdJeG/I8WkmIwwfoLem6Dxl10VbQww6psPWgsaHHH7pCvJ1wjV6I3JwmRo8p5FripXG45ZZb7P5+/m+0gXX3rlq1ylx77bU2vnYDh85t6fIR1U3St5ZF4R7men/605/aRjikDCMfRodRl+rn6GS47bbbrGwsvGtUNgdxhBhjZMHZqIbPMUYcdhPqUFJGcSbvuusue0+juiUsXbrUGvUQg0hazP/j4LUjoQsOyTfbd93fPrhGRl20FQydMlwW2mhEoZLQGynaArlqyCdzm/TwQkc16DVxLQaCBtbNI7sQR/Q61/O66qqr7EKo0B5xq3CGh1eVhjSaQB5Y0PXjH//YvuDE9Sp9egF3HQvLrrvuOnt+esjwNGkwj86Rr/UgXvLw5JNPmiuvvNKOtiR5bg4Xz/Lly4Pu4Rp64/Vg7Qtb8JIYdt7nfuONNyZyTtx1lNsHH3zQnnZHPkLuRTZ0m+TcglbCosMQuXAO2ZZKXQtFRl20DRRyGmQaDRq9pFD5cQrYn96OFTltxo4daz3+UF1hvGgQmZO84oorbEOJMYoasVoBg8f2pAULFtj7mJ9n21PoEGJ/QA+NshB6TC6NJ9MJt99+u7nmmmvsYiy3D7peAJyc+++/3zo5HF0cOt+M0Tn++ONtj9hXVomThWuLFi0yM2fOtOc0cEY75b2WXNWBtO677z7rcPieGbJQphhmrwXf4zifcMIJieooecCpmD17tnnooYfsWgaoJa8LbncCb5FzUxohTiR62Xvvve1+/XaFsznIow+uQc+US/fCnVoBfaKjUqUodXZO+MZ3ylttw9PqiyZ/IPqe2/SaKfsNrXgpfYqqZLTc/bYpvXaN6eh9z/6fWyoZ7B06wpT2mFzJXevzQaFhuJW3ovmGFal0DA1z4EMjkBZeLC9vSbpim0rPnlyMeiOQFkOo9IxoCOPSJi2G+EePHl13/tFBPKyyDlmxCwxv1hr+rMYN21LZQ6cskIVrySfDeshFL4DDRpgfR0Z+YzSYZ2a+efHixWbJkiX2GtLDMBAPOmLRXr0DfriG+c+Q1+PScDHykNZ+bdKjN4kh8T1LB9fwfNABQ8YYFPZr8/+6detsYIsgi+D4nqFgdIPDQxqhzwBHgwVnEyZMqFsekAWdPPXUU7Z3TtwEDB3OA88NvTLUz7Mkfa7nN0bNHf6CnDgB/OZ+nx64l+d57LHH2mddC+KgJ0+bQAjNt5Of8kr9ZroD+Z1ucTApL+iTEROcJX7Tu8cpCHmG6IBrOTo39HjoqK7Rm6+OptHGkR7PEPl8+eJ7njFlmbJHeWC7JLqn7lIOH3jgAVufe/7yT1MafPWKcs92XRVtJB/ubBcq+jFHdXWbX/2fnUxnxazbx1hRRM/6laa05EjTufFvlf9zPCjR02u6hx9rOkb9ou8QwNY6YBSqZ555xr7FKa4n4hr8yy67zDaoIRWqFqTH3CRzaHHpRaExY6Edx2SGzldVQ7p4vPSGfA4FlZKV+jNmzPAO8RHPvHnzbGMV0lOaNm2a7Wn48kC8NMLz58+3K659zkUtSAPd8ZtAnITo/zTGtRo6dHTSSSfZwLXVcC+NMvPCvueIoTvzzDPN0UcfXTOuRiB9RiWYbggtR1GcoYzqBZxu0EmIoYzC8+LUu6lTp9ryWi+vxMm1s2bNssa52nByH7IhI9fy7Akun+jTvdCHe6vvrwfxTZ482Rx00EF1ZQPSxBDPnTvX1pmkozbE7fRLXE6HfE7g/3rlrh7ch85OO+20WKekGtJCT+jatx6COJtt40iPUSDSw4EOfTak5XTm9OL+Ribq47u/XK3hd9GeJF0wR2Fna1CjBt3hGvE84BqYSZMm2b3ONExJoYEhDoyBMwrV/ydpWNuNMWPG2LlVGrykUP6q9RLVDX87YxQCZZSh67POOivWoIfgjJ6TjXKLEacHR+BvruH70HqEjhgtqbcaPwqy45zQIyZP5C0JrtzV0y2/k5Y7yj/PG4PezqA7RvnQcxK9RXXm9OX+RleuPMmoi7aEhWAYKjxvHxTmIUOG2Ln4IpDEUJB3huHPP/98OyTaiGEvKugGXdJzY34Vo+UavlZDOcb4nXPOObZspy0H+STQuBOSlCFAPhyNU0891d4bIh/XkJezzz7bOtMhdTULkINni/PGlIb7rN1hmi2LhXwy6qLtoJDTu2C7T0iBx9ulcWHVfB4qcz2Q3TXOSeA+5g8vuOACuzisP41Xu4EeKEsM7bvFXUl7lc3C82Bh1JQpU+z5Au32bDDGTCVhnJOOIHDt/vvvb4fs6bmT11bCs0QG1tKcccYZ9lm3m35rgYwM3zPdlLYjLqMu2haG00NeXkIFKUovvVHQAVukMBxu+DHrnhNpttpANgJy0tifcsopdugbA9YKxwfd8AxwTi+++GK7ojzrNJOALOgB44JD2OgIAvfsu+++No/MxWOksi4XTnYcCd5GN378+C2GoPMCjibH2KbpDMmoi7aEyolB9807YfDpXbCaeKCDzpiGOP30061x5+UmNLAYljQbO3ROI8RwMgYhD5B/Agb2kksuMaNGjbIjIugnTd0A+iZedHPuuefaIffQfcnVoGvi8jm2SUAOl29WcWOMmepqRg/ci4Glx84aDxxMykjaxt2VPeaRcV55xSzOP+k3I39/gLzMreNoMsLG4rk08qAtbXmgksH+3tLGdia2oQAVq1ZwFZhtXo1u94hCuszV8XIMGspaaVLBaaA5Ra7ZCkF67MnmoAzXkNYL5JXFPAyfsVglDuIlD+64x1rxEYiT3zS0IVva4mA4HgOGYWGPM4unyBMgDyEU9BqVDwOFjLz5i+1P9fROGhxz6g49cfmsFXiO9PJwRLIGZ+Tggw+2J89RrtgyxZahaD6S6gfdEBf3YSB5Mxpz+fzdKIwucOQxsI2JxW+ujpFOozJSbukdTpw40RrGNE9fRCa2JTJyRhvAsbnITrru+6RyE1z9Z/3IEUccYadTmJNOQ3bkIe7HH3/c1hPii5bNaHD6T6uNAxxxHBPipp2lLoTqKaof+3xfe19b2nJBG2xpY78u+zhpaOpB4eJ7hpQa7ZlEIV0KK4dVUNmiq2GJ2xV8FshgvNJIjwaIk7ucAawHaVEZTzzxRPs7Lm3iZb936J7e4447runV0UC6QGVn3znb3nhlJVuQMBA0UvVwaaNznBacDAwUIyIYcoawwZdvTsNiO6Qv38iIExLnJKSN0w/6YL8vWw7ZPkYZcD1Zd0017jvyhePJ82L4GscEo4bhdNc1g0sf48geZZ4fe7nZTuaMfD05XdpORub10S8GhGN0uadZ+erh5KH3+corr9g99ciP3HyG3BAnN2UPPWLIKXvM3bMmgf8hLdmRAXk4jKm6namGNNEnBz+5cyLSwOmBeso5Gew5jx7rW60n0uUzpx+eKzq6/rLZMuq5oJ+NuqNWBaxFWgXd4Uu31elFCU07iziT4NKnkXjzzTftQR8YMxoORieiRgwjTm+WxoIhVXr9DKfSK3IkkTE071nkO4SofBw+gl4IGCBGOejFO/0w7Ise6KWhE6cfnNhqpzNNojLyDDE+TkaeoZMz+gxZWY0zhsNBjx8ZnXPVKl1H5cZBp+yxNxvZcVQoe26YHtmiZQ/9Ijs6xnF2ZCV7aDmFrGWgHL7++uvWyeQZuzLonGycavdcCTht6Pbfx02XUc8FbWLURf5J0nBV0ypD0J/kQT95fYYqe+E0oiuM//8df4m1EEKIAQKNY6NhIFAr36GhVdRKOzT0J7XkCQ0DjVo6iAuOUnlTt08IIYQQBUBGXQghhCgAlX67jLoQQghRFGTUhRBCiCJQklEXQgghCoOMuhBCCFEItPpdCCGEKATsbpdRF0IIIQqCjLoQQghREGTUhRBCiIIgoy6EEEIUBBl1IYQQoiDIqAshhBAFQUZdCCGEKAgy6kIIIURBKJBR5/00QgghxMClo7fXmLwHY3+X7Gk6W8DL48uVL7H29ndeA/J384NcCSGEEDUp7Tf/D2WzfVfFKvb0fZQ/PqjYvSOHl82C43c2naZjk+krlUzPhtdN76/PMB0b11Q+6OTTfFLeaHqGjTaDD72h4riQDxl3IYQQmyhV7N26devMf4y/1JRWvvFGuWvnnU1PT36NOnRWuulDOzsrmfvfGYVyuafS0X2PvzZ9kGsqeevY1j48IYQQIspmo7527dry8OHD+z4WQgghRN5wRl2r34UQQogCoLe0CSGEEAVCRl0IIYQoCDLqQgghREGQURdCCCEKgoy6EEIIURBk1IUQQogCwLmqMupCCCFEQZBRF0IIIQqCjLoQQghREGTUhRBCiIIgoy6EEEIUhNJLL71U7urqMr32xeRCCCGEyBMdHR1m7dq15v996T/N/wesy8zzK0MARAAAAABJRU5ErkJggg==" + }; + + // Send request + var apiResponse = await fiscalApi.Invoices.SendAsync(request); + + // Check response + if (apiResponse.Succeeded) + { + MessageBox.Show(@"Factura enviada."); + } + else + { + MessageBox.Show($@"HttpStatusCode: {apiResponse.HttpStatusCode}"); + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button2_Click(object sender, EventArgs e) + { + /*Crear factura de egreso (nota de crédito) por valores*/ + + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados + var taxCredentials = new List() + { + new TaxCredential + { + Base64File = + "MIIFgDCCA2igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0NDYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTQzNTM3WhcNMjcwNTE4MTQzNTM3WjCBpzEdMBsGA1UEAxMUS0FSTEEgRlVFTlRFIE5PTEFTQ08xHTAbBgNVBCkTFEtBUkxBIEZVRU5URSBOT0xBU0NPMR0wGwYDVQQKExRLQVJMQSBGVUVOVEUgTk9MQVNDTzEWMBQGA1UELRMNRlVOSzY3MTIyOFBINjEbMBkGA1UEBRMSRlVOSzY3MTIyOE1DTE5MUjA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhNXbTSqGX6+/3Urpemyy5vVG2IdP2v7v001+c4BoMxEDFDQ32cOFdDiRxy0Fq9aR+Ojrofq8VeftvN586iyA1A6a0QnA68i7JnQKI4uJy+u0qiixuHu6u3b3BhSpoaVHcUtqFWLLlzr0yBxfVLOqVna/1/tHbQJg9hx57mp97P0JmXO1WeIqi+Zqob/mVZh2lsPGdJ8iqgjYFaFn9QVOQ1Pq74o1PTqwfzqgJSfV0zOOlESDPWggaDAYE4VNyTBisOUjlNd0x7ppcTxSi3yenrJHqkq/pqJsRLKf6VJ/s9p6bsd2bj07hSDpjlDC2lB25eEfkEkeMkXoE7ErXQ5QCwIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAHwYpgbClHULXYhK4GNTgonvXh81oqfXwCSWAyDPiTYFDWVfWM9C4ApxMLyc0XvJte75Rla+bPC08oYN3OlhbbvP3twBL/w9SsfxvkbpFn2ZfGSTXZhyiq4vjmQHW1pnFvGelwgU4v3eeRE/MjoCnE7M/Q5thpuog6WGf7CbKERnWZn8QsUaJsZSEkg6Bv2jm69ye57ab5rrOUaeMlstTfdlaHAEkUgLX/NXq7RbGwv82hkHY5b2vYcXeh34tUMBL6os3OdRlooN9ZQGkVIISvxVZpSHkYC20DFNh1Bb0ovjfujlTcka81GnbUhFGZtRuoVQ1RVpMO8xtx3YKBLp4do3hPmnRCV5hCm43OIjYx9Ov2dqICV3AaNXSLV1dW39Bak/RBiIDGHzOIW2+VMPjvvypBjmPv/tmbqNHWPSAWOxTyMx6E1gFCZvi+5F+BgkdC3Lm7U0BU0NfvsXajZd8sXnIllvEMrikCLoI/yurvexNDcF1RW/FhMsoua0eerwczcNm66pGjHm05p9DR6lFeJZrtqeqZuojdxBWy4vH6ghyJaupergoX+nmdG3JYeRttCFF/ITI68TeCES5V3Y0C3psYAg1XxcGRLGd4chPo/4xwiLkijWtgt0/to5ljGBwfK7r62PHZfL1Dp+i7V3w7hmOlhbXzP+zhMZn1GCk7KY=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS9AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucRBAKNQXH8t8gVCl/ItHMI2hMJ76QOECOqEi1Y89cDpegDvh/INXyMsXbzi87tfFzgq1O+9ID6aPWGg+bNGADXyXxDVdy7Nq/SCdoXvo66MTYwq8jyJeUHDHEGMVBcmZpD44VJCvLBxDcvByuevP4Wo2NKqJCwK+ecAdZc/8Rvd947SjbMHuS8BppfQWARVUqA5BLOkTAHNv6tEk/hncC7O2YOGSShart8fM8dokgGSyewHVFe08POuQ+WDHeVpvApH/SP29rwktSoiHRoL6dK+F2YeEB5SuFW9LQgYCutjapmUP/9TC3Byro9Li6UrvQHxNmgMFGQJSYjFdqlGjLibfuguLp7pueutbROoZaSxU8HqlfYxLkpJUxUwNI1ja/1t3wcivtWknVXBd13R06iVfU1HGe8Kb4u5il4a4yP4p7VT4RE3b1SBLJeG+BxHiE8gFaaKcX/Cl6JV14RPTvk/6VnAtEQ66qHJex21KKuiJo2JoOmDXVHmvGQlWXNjYgoPx28Xd5WsofL+n7HDR2Ku8XgwJw6IXBJGuoday9qWN9v/k7DGlNGB6Sm4gdVUmycMP6EGhB1vFTiDfOGQO42ywmcpKoMETPVQ5InYKE0xAOckgcminDgxWjtUHjBDPEKifEjYudPwKmR6Cf4ZdGvUWwY/zq9pPAC9bu423KeBCnSL8AQ4r5SVsW6XG0njamwfNjpegwh/YG7sS7sDtZ8gi7r6tZYjsOqZlCYU0j7QTBpuQn81Yof2nQRCFxhRJCeydmIA8+z0nXrcElk7NDPk4kYQS0VitJ2qeQYNENzGBglROkCl2y6GlxAG80IBtReCUp/xOSdlwDR0eim+SNkdStvmQM5IcWBuDKwGZc1A4v/UoLl7niV9fpl4X6bUX8lZzY4gidJOafoJ30VoY/lYGkrkEuz3GpbbT5v8fF3iXVRlEqhlpe8JSGu7Rd2cPcJSkQ1Cuj/QRhHPhFMF2KhTEf95c9ZBKI8H7SvBi7eLXfSW2Y0ve6vXBZKyjK9whgCU9iVOsJjqRXpAccaWOKi420CjmS0+uwj/Xr2wLZhPEjBA/G6Od30+eG9mICmbp/5wAGhK/ZxCT17ZETyFmOMo49jl9pxdKocJNuzMrLpSz7/g5Jwp8+y8Ck5YP7AX0R/dVA0t37DO7nAbQT5XVSYpMVh/yvpYJ9WR+tb8Yg1h2lERLR2fbuhQRcwmisZR2W3Sr2b7hX9MCMkMQw8y2fDJrzLrqKqkHcjvnI/TdzZW2MzeQDoBBb3fmgvjYg07l4kThS73wGX992w2Y+a1A2iirSmrYEm9dSh16JmXa8boGQAONQzQkHh7vpw0IBs9cnvqO1QLB1GtbBztUBXonA4TxMKLYZkVrrd2RhrYWMsDp7MpC4M0p/DA3E/qscYwq1OpwriewNdx6XXqMZbdUNqMP2viBY2VSGmNdHtVfbN/rnaeJetFGX7XgTVYD7wDq8TW9yseCK944jcT+y/o0YiT9j3OLQ2Ts0LDTQskpJSxRmXEQGy3NBDOYFTvRkcGJEQJItuol8NivJN1H9LoLIUAlAHBZxfHpUYx66YnP4PdTdMIWH+nxyekKPFfAT7olQ=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Crear un nuevo emisor + var issuer = new InvoiceIssuer + { + Tin = "FUNK671228PH6", + LegalName = "KARLA FUENTE NOLASCO", + TaxRegimeCode = "621", + TaxCredentials = taxCredentials + }; + + // Crear un nuevo receptor + var recipient = new InvoiceRecipient + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + ZipCode = "42501", + TaxRegimeCode = "601", + CfdiUseCode = "G01", + Email = "someone@somewhere.com" + }; + + // Agregar facturas relacionadas + var relatedInvoices = new List() + { + new RelatedInvoice + { + Uuid = "5FB2822E-396D-4725-8521-CDC4BDD20CCF", + RelationshipTypeCode = "01" + } + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "01010101", + Quantity = 0.5m, + UnitOfMeasurementCode = "E48", + Description = "Invoicing software as a service", + UnitPrice = 3587.75m, + TaxObjectCode = "02", + ItemSku = "7506022301697", + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + } + }; + + // Crear la factura de egreso (nota de crédito) + var creditNote = new Invoice + { + VersionCode = "4.0", + Series = "CN", + Date = DateTime.Now, + PaymentFormCode = "03", + PaymentConditions = "Contado", + CurrencyCode = "MXN", + TypeCode = "E", // E para egreso (nota de crédito) + ExpeditionZipCode = "01160", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + ExchangeRate = 1, + ExportCode = "01", + RelatedInvoices = relatedInvoices + }; + + // Timbrar la factura de egreso + var apiResponse = await fiscalApi.Invoices.CreateAsync(creditNote); + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Nota de Crédito {apiResponse.Data.Number} creada exitosamente"); + } + else + { + MessageBox.Show($@"HttpStatusCode: {apiResponse.HttpStatusCode}"); + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private void button13_Click(object sender, EventArgs e) + { + + } + + private void button12_Click(object sender, EventArgs e) + { + + } + + private void button11_Click(object sender, EventArgs e) + { + + } + + private void button10_Click(object sender, EventArgs e) + { + + } + + private void button9_Click(object sender, EventArgs e) + { + + } + + private void button14_Click(object sender, EventArgs e) + { + + } + + private void button1_Click(object sender, EventArgs e) + { + IncomeInvoiceValueForm incomeInvoiceValueForm = new IncomeInvoiceValueForm(_settings); + incomeInvoiceValueForm.Show(); + } + + private void button9_Click_1(object sender, EventArgs e) + { + EgressInvoiceValueForm egressInvoiceValueForm = new EgressInvoiceValueForm(_settings); + egressInvoiceValueForm.Show(); + } + + private void button13_Click_1(object sender, EventArgs e) + { + + } + + private void button10_Click_1(object sender, EventArgs e) + { + PaymentComplementInvoiceForm paymentComplementInvoiceForm = new PaymentComplementInvoiceForm(_settings); + paymentComplementInvoiceForm.Show(); + } + + private async void button6_Click(object sender, EventArgs e) + { + // Consultar estado de una factura por valores (pasando todos los valores de la petición) + + // Create instance of FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // request model + var request = new InvoiceStatusRequest + { + IssuerTin = "POPJ450924HD6", // RFC del emisor + RecipientTin = "MEJJ940824C61", // RFC del receptor + InvoiceTotal = 430.00m, // Total de la factura + InvoiceUuid = "8e0fdc23-e148-4cf5-b3ce-4459f31c9c45", // UUID de la factura + Last8DigitsIssuerSignature = "oxPKRg==" // Ultimos 8 digitos del sello digital del emisor/cfdi + }; + + // Send request + var apiResponse = await fiscalApi.Invoices.GetStatusAsync(request); + + // Check response + if (apiResponse.Succeeded) + { + MessageBox.Show("OK"); + MessageBox.Show($@"Estado: {apiResponse.Data.Status}"); + } + else + { + MessageBox.Show($@"HttpStatusCode: {apiResponse.HttpStatusCode}"); + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private void button11_Click_1(object sender, EventArgs e) + { + PayrollComplementValueForm payrollComplementForm = new PayrollComplementValueForm(_settings); + payrollComplementForm.Show(); + } + + private void button8_Click(object sender, EventArgs e) + { + + } + + private void button12_Click_1(object sender, EventArgs e) + { + LocalTaxesComplementValueForm localTaxesComplementForm = new LocalTaxesComplementValueForm(_settings); + localTaxesComplementForm.Show(); + } + } +} diff --git a/FiscalApi.Samples.NetFramework/InvoiceValueForm.resx b/FiscalApi.Samples.NetFramework/InvoiceValueForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/InvoiceValueForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/LocalTaxesComplementReferenceForm.Designer.cs b/FiscalApi.Samples.NetFramework/LocalTaxesComplementReferenceForm.Designer.cs new file mode 100644 index 0000000..d156f01 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/LocalTaxesComplementReferenceForm.Designer.cs @@ -0,0 +1,100 @@ +namespace FiscalApi.Samples.NetFramework +{ + partial class LocalTaxesComplementReferenceForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.button3 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.button3); + this.groupBox1.Controls.Add(this.button2); + this.groupBox1.Controls.Add(this.button1); + this.groupBox1.Location = new System.Drawing.Point(12, 12); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(229, 241); + this.groupBox1.TabIndex = 1; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "groupBox1"; + // + // button3 + // + this.button3.Location = new System.Drawing.Point(19, 165); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(189, 60); + this.button3.TabIndex = 2; + this.button3.Text = "Factura ingreso - Impuestos locales ISH"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(19, 99); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(189, 60); + this.button2.TabIndex = 1; + this.button2.Text = "Factura ingreso - Impuestos locales CEDULAR"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(19, 33); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(189, 60); + this.button1.TabIndex = 0; + this.button1.Text = "Factura ingreso - Impuestos locales"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // LocalTaxesComplementReferenceForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(253, 265); + this.Controls.Add(this.groupBox1); + this.Name = "LocalTaxesComplementReferenceForm"; + this.Text = "LocalTaxesComplementReferenceForm"; + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button1; + } +} \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/LocalTaxesComplementReferenceForm.cs b/FiscalApi.Samples.NetFramework/LocalTaxesComplementReferenceForm.cs new file mode 100644 index 0000000..2fdadae --- /dev/null +++ b/FiscalApi.Samples.NetFramework/LocalTaxesComplementReferenceForm.cs @@ -0,0 +1,478 @@ +using Fiscalapi.Common; +using Fiscalapi.Models; +using Fiscalapi.Services; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FiscalApi.Samples.NetFramework +{ + public partial class LocalTaxesComplementReferenceForm : Form + { + private FiscalapiSettings _settings; + + public LocalTaxesComplementReferenceForm(FiscalapiSettings settings) + { + InitializeComponent(); + _settings = settings; + } + + private async void button1_Click(object sender, EventArgs e) + { + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + var items = new List() + { + new InvoiceItem + { + ItemCode = "01010101", + Quantity = 9.5m, + UnitOfMeasurementCode = "E48", + UnitOfMeasurement = "Unidad de servicio", + Description = "Invoicing software as a service", + UnitPrice = 3587.75m, + TaxObjectCode = "02", + ItemSku = "7506022301697", + Discount = 255.85m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + }, + new InvoiceItem + { + ItemCode = "01010101", + Quantity = 8m, + UnitOfMeasurementCode = "E48", + UnitOfMeasurement = "Unidad de servicio2", + Description = "Software consultant", + UnitPrice = 250.85m, + TaxObjectCode = "02", + ItemSku = "7506022301698", + Discount = 255.85m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + }, + new InvoiceItem + { + ItemCode = "01010101", + Quantity = 6m, + UnitOfMeasurementCode = "E48", + UnitOfMeasurement = "Unidad de servicio3", + Description = "Computer software", + UnitPrice = 1250.75m, + TaxObjectCode = "02", + ItemSku = "7506022301699", + Discount = 0.00m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + }, + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.106666m, + TaxFlagCode = "R" + } + } + } + }; + + var complement = new Complement + { + LocalTaxes = new LocalTaxes + { + Taxes = new List + { + new LocalTax + { + TaxName = "CEDULAR", + TaxRate = 3.00m, + TaxAmount = 6.00m, + TaxFlagCode = "R" + }, + new LocalTax + { + TaxName = "ISH", + TaxRate = 8.00m, + TaxAmount = 16.00m, + TaxFlagCode = "R" + } + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "42501", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button2_Click(object sender, EventArgs e) + { + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "01010101", + Quantity = 9.5m, + UnitOfMeasurementCode = "E48", + UnitOfMeasurement = "Unidad de servicio", + Description = "Invoicing software as a service", + UnitPrice = 3587.75m, + TaxObjectCode = "02", + ItemSku = "7506022301697", + Discount = 255.85m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + }, + new InvoiceItem + { + ItemCode = "01010101", + Quantity = 8m, + UnitOfMeasurementCode = "E48", + UnitOfMeasurement = "Unidad de servicio2", + Description = "Software consultant", + UnitPrice = 250.85m, + TaxObjectCode = "02", + ItemSku = "7506022301698", + Discount = 255.85m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + }, + new InvoiceItem + { + ItemCode = "01010101", + Quantity = 6m, + UnitOfMeasurementCode = "E48", + UnitOfMeasurement = "Unidad de servicio3", + Description = "Computer software", + UnitPrice = 1250.75m, + TaxObjectCode = "02", + ItemSku = "7506022301699", + Discount = 0.00m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + }, + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.106666m, + TaxFlagCode = "R" + } + } + } + }; + + var complement = new Complement + { + LocalTaxes = new LocalTaxes + { + Taxes = new List + { + new LocalTax + { + TaxName = "CEDULAR", + TaxRate = 3.00m, + TaxAmount = 6.00m, + TaxFlagCode = "R" + } + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "42501", + Issuer = issuer, + Recipient = recipient, + Items = items, + Complement = complement, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button3_Click(object sender, EventArgs e) + { + // Crear instancia de FiscalApiClient + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "01010101", + Quantity = 9.5m, + UnitOfMeasurementCode = "E48", + UnitOfMeasurement = "Unidad de servicio", + Description = "Invoicing software as a service", + UnitPrice = 3587.75m, + TaxObjectCode = "02", + ItemSku = "7506022301697", + Discount = 255.85m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + }, + new InvoiceItem + { + ItemCode = "01010101", + Quantity = 8m, + UnitOfMeasurementCode = "E48", + UnitOfMeasurement = "Unidad de servicio2", + Description = "Software consultant", + UnitPrice = 250.85m, + TaxObjectCode = "02", + ItemSku = "7506022301698", + Discount = 255.85m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + }, + new InvoiceItem + { + ItemCode = "01010101", + Quantity = 6m, + UnitOfMeasurementCode = "E48", + UnitOfMeasurement = "Unidad de servicio3", + Description = "Computer software", + UnitPrice = 1250.75m, + TaxObjectCode = "02", + ItemSku = "7506022301699", + Discount = 0.00m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + }, + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.106666m, + TaxFlagCode = "R" + } + } + } + }; + + var complement = new Complement + { + LocalTaxes = new LocalTaxes + { + Taxes = new List + { + new LocalTax + { + TaxName = "ISH", + TaxRate = 8.00m, + TaxAmount = 16.00m, + TaxFlagCode = "R" + } + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "42501", + Issuer = issuer, + Recipient = recipient, + Items = items, + Complement = complement, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + } +} diff --git a/FiscalApi.Samples.NetFramework/LocalTaxesComplementReferenceForm.resx b/FiscalApi.Samples.NetFramework/LocalTaxesComplementReferenceForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/LocalTaxesComplementReferenceForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/LocalTaxesComplementValueForm.Designer.cs b/FiscalApi.Samples.NetFramework/LocalTaxesComplementValueForm.Designer.cs new file mode 100644 index 0000000..7099656 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/LocalTaxesComplementValueForm.Designer.cs @@ -0,0 +1,100 @@ +namespace FiscalApi.Samples.NetFramework +{ + partial class LocalTaxesComplementValueForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.button3 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.button3); + this.groupBox1.Controls.Add(this.button2); + this.groupBox1.Controls.Add(this.button1); + this.groupBox1.Location = new System.Drawing.Point(12, 12); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(229, 241); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "groupBox1"; + // + // button3 + // + this.button3.Location = new System.Drawing.Point(19, 165); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(189, 60); + this.button3.TabIndex = 2; + this.button3.Text = "Factura ingreso - Impuestos locales ISH"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(19, 99); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(189, 60); + this.button2.TabIndex = 1; + this.button2.Text = "Factura ingreso - Impuestos locales CEDULAR"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(19, 33); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(189, 60); + this.button1.TabIndex = 0; + this.button1.Text = "Factura ingreso - Impuestos locales"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // LocalTaxesComplementForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(253, 265); + this.Controls.Add(this.groupBox1); + this.Name = "LocalTaxesComplementForm"; + this.Text = "LocalTaxesComplementForm"; + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button2; + } +} \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/LocalTaxesComplementValueForm.cs b/FiscalApi.Samples.NetFramework/LocalTaxesComplementValueForm.cs new file mode 100644 index 0000000..04b76d4 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/LocalTaxesComplementValueForm.cs @@ -0,0 +1,570 @@ +using Fiscalapi.Common; +using Fiscalapi.Models; +using Fiscalapi.Services; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FiscalApi.Samples.NetFramework +{ + public partial class LocalTaxesComplementValueForm : Form + { + FiscalapiSettings _settings; + + public LocalTaxesComplementValueForm(FiscalapiSettings settings) + { + InitializeComponent(); + _settings = settings; + } + + private async void button1_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + ZipCode = "42501", + TaxRegimeCode = "601", + CfdiUseCode = "G01", + Email = "someone@somewhere.com" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "01010101", + Quantity = 9.5m, + UnitOfMeasurementCode = "E48", + UnitOfMeasurement = "Unidad de servicio", + Description = "Invoicing software as a service", + UnitPrice = 3587.75m, + TaxObjectCode = "02", + ItemSku = "7506022301697", + Discount = 255.85m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + }, + new InvoiceItem + { + ItemCode = "01010101", + Quantity = 8m, + UnitOfMeasurementCode = "E48", + UnitOfMeasurement = "Unidad de servicio2", + Description = "Software consultant", + UnitPrice = 250.85m, + TaxObjectCode = "02", + ItemSku = "7506022301698", + Discount = 255.85m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + }, + new InvoiceItem + { + ItemCode = "01010101", + Quantity = 6m, + UnitOfMeasurementCode = "E48", + UnitOfMeasurement = "Unidad de servicio3", + Description = "Computer software", + UnitPrice = 1250.75m, + TaxObjectCode = "02", + ItemSku = "7506022301699", + Discount = 0.00m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + }, + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.106666m, + TaxFlagCode = "R" + } + } + } + }; + + var complement = new Complement + { + LocalTaxes = new LocalTaxes + { + Taxes = new List + { + new LocalTax + { + TaxName = "CEDULAR", + TaxRate = 3.00m, + TaxAmount = 6.00m, + TaxFlagCode = "R" + }, + new LocalTax + { + TaxName = "ISH", + TaxRate = 8.00m, + TaxAmount = 16.00m, + TaxFlagCode = "R" + } + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "42501", + Issuer = issuer, + Recipient = recipient, + Items = items, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button2_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + ZipCode = "42501", + TaxRegimeCode = "601", + CfdiUseCode = "G01", + Email = "someone@somewhere.com" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "01010101", + Quantity = 9.5m, + UnitOfMeasurementCode = "E48", + UnitOfMeasurement = "Unidad de servicio", + Description = "Invoicing software as a service", + UnitPrice = 3587.75m, + TaxObjectCode = "02", + ItemSku = "7506022301697", + Discount = 255.85m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + }, + new InvoiceItem + { + ItemCode = "01010101", + Quantity = 8m, + UnitOfMeasurementCode = "E48", + UnitOfMeasurement = "Unidad de servicio2", + Description = "Software consultant", + UnitPrice = 250.85m, + TaxObjectCode = "02", + ItemSku = "7506022301698", + Discount = 255.85m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + }, + new InvoiceItem + { + ItemCode = "01010101", + Quantity = 6m, + UnitOfMeasurementCode = "E48", + UnitOfMeasurement = "Unidad de servicio3", + Description = "Computer software", + UnitPrice = 1250.75m, + TaxObjectCode = "02", + ItemSku = "7506022301699", + Discount = 0.00m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + }, + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.106666m, + TaxFlagCode = "R" + } + } + } + }; + + var complement = new Complement + { + LocalTaxes = new LocalTaxes + { + Taxes = new List + { + new LocalTax + { + TaxName = "CEDULAR", + TaxRate = 3.00m, + TaxAmount = 6.00m, + TaxFlagCode = "R" + } + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "42501", + Issuer = issuer, + Recipient = recipient, + Items = items, + Complement = complement, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button3_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + ZipCode = "42501", + TaxRegimeCode = "601", + CfdiUseCode = "G01", + Email = "someone@somewhere.com" + }; + + // Crear una lista de productos o servicios de la factura + var items = new List() + { + new InvoiceItem + { + ItemCode = "01010101", + Quantity = 9.5m, + UnitOfMeasurementCode = "E48", + UnitOfMeasurement = "Unidad de servicio", + Description = "Invoicing software as a service", + UnitPrice = 3587.75m, + TaxObjectCode = "02", + ItemSku = "7506022301697", + Discount = 255.85m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + }, + new InvoiceItem + { + ItemCode = "01010101", + Quantity = 8m, + UnitOfMeasurementCode = "E48", + UnitOfMeasurement = "Unidad de servicio2", + Description = "Software consultant", + UnitPrice = 250.85m, + TaxObjectCode = "02", + ItemSku = "7506022301698", + Discount = 255.85m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + }, + new InvoiceItem + { + ItemCode = "01010101", + Quantity = 6m, + UnitOfMeasurementCode = "E48", + UnitOfMeasurement = "Unidad de servicio3", + Description = "Computer software", + UnitPrice = 1250.75m, + TaxObjectCode = "02", + ItemSku = "7506022301699", + Discount = 0.00m, + ItemTaxes = new List() + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + }, + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.106666m, + TaxFlagCode = "R" + } + } + } + }; + + var complement = new Complement + { + LocalTaxes = new LocalTaxes + { + Taxes = new List + { + new LocalTax + { + TaxName = "ISH", + TaxRate = 8.00m, + TaxAmount = 16.00m, + TaxFlagCode = "R" + } + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + PaymentFormCode = "01", + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "42501", + Issuer = issuer, + Recipient = recipient, + Items = items, + Complement = complement, + PaymentMethodCode = "PUE", + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + } +} diff --git a/FiscalApi.Samples.NetFramework/LocalTaxesComplementValueForm.resx b/FiscalApi.Samples.NetFramework/LocalTaxesComplementValueForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/LocalTaxesComplementValueForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/PaymentComplementInvoiceReferenceForm.Designer.cs b/FiscalApi.Samples.NetFramework/PaymentComplementInvoiceReferenceForm.Designer.cs new file mode 100644 index 0000000..e69eb89 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/PaymentComplementInvoiceReferenceForm.Designer.cs @@ -0,0 +1,308 @@ +namespace FiscalApi.Samples.NetFramework +{ + partial class PaymentComplementInvoiceReferenceForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.button19 = new System.Windows.Forms.Button(); + this.button18 = new System.Windows.Forms.Button(); + this.button17 = new System.Windows.Forms.Button(); + this.button16 = new System.Windows.Forms.Button(); + this.button15 = new System.Windows.Forms.Button(); + this.button14 = new System.Windows.Forms.Button(); + this.button13 = new System.Windows.Forms.Button(); + this.button12 = new System.Windows.Forms.Button(); + this.button11 = new System.Windows.Forms.Button(); + this.button10 = new System.Windows.Forms.Button(); + this.button9 = new System.Windows.Forms.Button(); + this.button8 = new System.Windows.Forms.Button(); + this.button7 = new System.Windows.Forms.Button(); + this.button6 = new System.Windows.Forms.Button(); + this.button5 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.button19); + this.groupBox1.Controls.Add(this.button18); + this.groupBox1.Controls.Add(this.button17); + this.groupBox1.Controls.Add(this.button16); + this.groupBox1.Controls.Add(this.button15); + this.groupBox1.Controls.Add(this.button14); + this.groupBox1.Controls.Add(this.button13); + this.groupBox1.Controls.Add(this.button12); + this.groupBox1.Controls.Add(this.button11); + this.groupBox1.Controls.Add(this.button10); + this.groupBox1.Controls.Add(this.button9); + this.groupBox1.Controls.Add(this.button8); + this.groupBox1.Controls.Add(this.button7); + this.groupBox1.Controls.Add(this.button6); + this.groupBox1.Controls.Add(this.button5); + this.groupBox1.Controls.Add(this.button4); + this.groupBox1.Controls.Add(this.button3); + this.groupBox1.Controls.Add(this.button2); + this.groupBox1.Controls.Add(this.button1); + this.groupBox1.Location = new System.Drawing.Point(12, 12); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(403, 691); + this.groupBox1.TabIndex = 1; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "groupBox1"; + // + // button19 + // + this.button19.Location = new System.Drawing.Point(201, 549); + this.button19.Name = "button19"; + this.button19.Size = new System.Drawing.Size(189, 60); + this.button19.TabIndex = 18; + this.button19.Text = "Factura pago - pago objeto impuesto 07. 001 y 003 - ISR y IEPS"; + this.button19.UseVisualStyleBackColor = true; + this.button19.Click += new System.EventHandler(this.button19_Click); + // + // button18 + // + this.button18.Location = new System.Drawing.Point(201, 483); + this.button18.Name = "button18"; + this.button18.Size = new System.Drawing.Size(189, 60); + this.button18.TabIndex = 17; + this.button18.Text = "Factura pago - pago objeto impuesto 06. 001 - ISR"; + this.button18.UseVisualStyleBackColor = true; + this.button18.Click += new System.EventHandler(this.button18_Click); + // + // button17 + // + this.button17.Location = new System.Drawing.Point(201, 417); + this.button17.Name = "button17"; + this.button17.Size = new System.Drawing.Size(189, 60); + this.button17.TabIndex = 16; + this.button17.Text = "Factura pago - pago objeto impuesto 07. 003 - IEPS"; + this.button17.UseVisualStyleBackColor = true; + this.button17.Click += new System.EventHandler(this.button17_Click); + // + // button16 + // + this.button16.Location = new System.Drawing.Point(201, 351); + this.button16.Name = "button16"; + this.button16.Size = new System.Drawing.Size(189, 60); + this.button16.TabIndex = 15; + this.button16.Text = "Factura pago - pago objeto impuesto 08. 001 - ISR"; + this.button16.UseVisualStyleBackColor = true; + this.button16.Click += new System.EventHandler(this.button16_Click); + // + // button15 + // + this.button15.Location = new System.Drawing.Point(201, 285); + this.button15.Name = "button15"; + this.button15.Size = new System.Drawing.Size(189, 60); + this.button15.TabIndex = 14; + this.button15.Text = "Factura pago - pago en MXN y DR en MXN"; + this.button15.UseVisualStyleBackColor = true; + this.button15.Click += new System.EventHandler(this.button15_Click); + // + // button14 + // + this.button14.Location = new System.Drawing.Point(201, 219); + this.button14.Name = "button14"; + this.button14.Size = new System.Drawing.Size(189, 60); + this.button14.TabIndex = 13; + this.button14.Text = "Factura pago - pago solo traslados"; + this.button14.UseVisualStyleBackColor = true; + this.button14.Click += new System.EventHandler(this.button14_Click); + // + // button13 + // + this.button13.Location = new System.Drawing.Point(201, 153); + this.button13.Name = "button13"; + this.button13.Size = new System.Drawing.Size(189, 60); + this.button13.TabIndex = 12; + this.button13.Text = "Factura pago - pago cobro por cuenta de terceros"; + this.button13.UseVisualStyleBackColor = true; + this.button13.Click += new System.EventHandler(this.button13_Click); + // + // button12 + // + this.button12.Location = new System.Drawing.Point(201, 87); + this.button12.Name = "button12"; + this.button12.Size = new System.Drawing.Size(189, 60); + this.button12.TabIndex = 11; + this.button12.Text = "Factura pago - pago en MXN y DR en USD"; + this.button12.UseVisualStyleBackColor = true; + this.button12.Click += new System.EventHandler(this.button12_Click); + // + // button11 + // + this.button11.Location = new System.Drawing.Point(201, 21); + this.button11.Name = "button11"; + this.button11.Size = new System.Drawing.Size(189, 60); + this.button11.TabIndex = 10; + this.button11.Text = "Factura pago - pago con IVA exento y retenciones"; + this.button11.UseVisualStyleBackColor = true; + this.button11.Click += new System.EventHandler(this.button11_Click); + // + // button10 + // + this.button10.Location = new System.Drawing.Point(6, 615); + this.button10.Name = "button10"; + this.button10.Size = new System.Drawing.Size(189, 60); + this.button10.TabIndex = 9; + this.button10.Text = "Factura pago - pago con IVA exento"; + this.button10.UseVisualStyleBackColor = true; + this.button10.Click += new System.EventHandler(this.button10_Click); + // + // button9 + // + this.button9.Location = new System.Drawing.Point(6, 549); + this.button9.Name = "button9"; + this.button9.Size = new System.Drawing.Size(189, 60); + this.button9.TabIndex = 8; + this.button9.Text = "Factura pago - IVA y retenciones al 16%"; + this.button9.UseVisualStyleBackColor = true; + this.button9.Click += new System.EventHandler(this.button9_Click); + // + // button8 + // + this.button8.Location = new System.Drawing.Point(6, 483); + this.button8.Name = "button8"; + this.button8.Size = new System.Drawing.Size(189, 60); + this.button8.TabIndex = 7; + this.button8.Text = "Factura pago - pago misma monedaP y monedaDR"; + this.button8.UseVisualStyleBackColor = true; + this.button8.Click += new System.EventHandler(this.button8_Click); + // + // button7 + // + this.button7.Location = new System.Drawing.Point(6, 417); + this.button7.Name = "button7"; + this.button7.Size = new System.Drawing.Size(189, 60); + this.button7.TabIndex = 6; + this.button7.Text = "Factura pago - pago en USD"; + this.button7.UseVisualStyleBackColor = true; + this.button7.Click += new System.EventHandler(this.button7_Click); + // + // button6 + // + this.button6.Location = new System.Drawing.Point(6, 351); + this.button6.Name = "button6"; + this.button6.Size = new System.Drawing.Size(189, 60); + this.button6.TabIndex = 5; + this.button6.Text = "Factura pago - pago EUR y DR USD"; + this.button6.UseVisualStyleBackColor = true; + this.button6.Click += new System.EventHandler(this.button6_Click); + // + // button5 + // + this.button5.Location = new System.Drawing.Point(6, 285); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(189, 60); + this.button5.TabIndex = 4; + this.button5.Text = "Factura pago - pago parcialidades"; + this.button5.UseVisualStyleBackColor = true; + this.button5.Click += new System.EventHandler(this.button5_Click); + // + // button4 + // + this.button4.Location = new System.Drawing.Point(6, 219); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(189, 60); + this.button4.TabIndex = 3; + this.button4.Text = "Factura pago - sin impuestos"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.button4_Click); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(6, 153); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(189, 60); + this.button3.TabIndex = 2; + this.button3.Text = "Factura pago - solo retenciones"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(6, 87); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(189, 60); + this.button2.TabIndex = 1; + this.button2.Text = "Factura pago - pagos varios DR"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(6, 21); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(189, 60); + this.button1.TabIndex = 0; + this.button1.Text = "Factura pago - RFC genérico"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // PaymentComplementInvoiceReferenceForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(427, 715); + this.Controls.Add(this.groupBox1); + this.Name = "PaymentComplementInvoiceReferenceForm"; + this.Text = "PaymentComplementInvoiceReferenceForm"; + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Button button19; + private System.Windows.Forms.Button button18; + private System.Windows.Forms.Button button17; + private System.Windows.Forms.Button button16; + private System.Windows.Forms.Button button15; + private System.Windows.Forms.Button button14; + private System.Windows.Forms.Button button13; + private System.Windows.Forms.Button button12; + private System.Windows.Forms.Button button11; + private System.Windows.Forms.Button button10; + private System.Windows.Forms.Button button9; + private System.Windows.Forms.Button button8; + private System.Windows.Forms.Button button7; + private System.Windows.Forms.Button button6; + private System.Windows.Forms.Button button5; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button1; + } +} \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/PaymentComplementInvoiceReferenceForm.cs b/FiscalApi.Samples.NetFramework/PaymentComplementInvoiceReferenceForm.cs new file mode 100644 index 0000000..75fc6ee --- /dev/null +++ b/FiscalApi.Samples.NetFramework/PaymentComplementInvoiceReferenceForm.cs @@ -0,0 +1,1997 @@ +using Fiscalapi.Common; +using Fiscalapi.Models; +using Fiscalapi.Services; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FiscalApi.Samples.NetFramework +{ + public partial class PaymentComplementInvoiceReferenceForm : Form + { + private FiscalapiSettings _settings; + public PaymentComplementInvoiceReferenceForm(FiscalapiSettings settings) + { + InitializeComponent(); + _settings = settings; + } + + private async void button1_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-09-09T17:33:38"), + PaymentFormCode = "01", + CurrencyCode = "MXN", + ExchangeRate = 1m, + Amount = 6778.00m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "b7c8d2bf-cb4e-4f84-af89-c68b6731206a", + Series = "FA", + Number = "N0000216349", + CurrencyCode = "MXN", + PartialityNumber = 2, + PreviousBalance = 6777.41m, + PaymentAmount = 6777.41m, + RemainingBalance = 0.00m, + TaxObjectCode = "02", + Equivalence = 1m, + Subtotal = 5842.600000m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + }, + new PaidInvoice + { + Uuid = "94f4e541-bb38-4355-b779-02d337dc9720", + Series = "FA", + Number = "SI000032690", + CurrencyCode = "MXN", + PartialityNumber = 1, + PreviousBalance = 9610.81m, + PaymentAmount = 0.59m, + RemainingBalance = 9610.22m, + TaxObjectCode = "02", + Equivalence = 1m, + Subtotal = 0.510000m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "75700", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button2_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-09-09T17:33:38"), + PaymentFormCode = "01", + CurrencyCode = "MXN", + ExchangeRate = 1m, + Amount = 323, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "b7c8d2bf-cb4e-4f84-af89-c68b6731206a", + Series = "FA", + Number = "N0000216349", + CurrencyCode = "MXN", + PartialityNumber = 2, + PreviousBalance = 200.00m, + PaymentAmount = 100.00m, + RemainingBalance = 100.00m, + TaxObjectCode = "02", + Equivalence = 1m, + Subtotal = 10.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + }, + new PaidInvoice + { + Uuid = "94f4e541-bb38-4355-b779-02d337dc9720", + Series = "FA", + Number = "SI000032690", + CurrencyCode = "MXN", + PartialityNumber = 1, + PreviousBalance = 100.00m, + PaymentAmount = 100.00m, + RemainingBalance = 0.00m, + TaxObjectCode = "02", + Equivalence = 1m, + Subtotal = 100.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "75700", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button3_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-06-06T00:00:00"), + PaymentFormCode = "01", + CurrencyCode = "MXN", + ExchangeRate = 1m, + Amount = 100.00m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "bfc36522-4b8e-45c4-8f14-d11b289f9eb7", + CurrencyCode = "MXN", + PartialityNumber = 1, + PreviousBalance = 100.00m, + PaymentAmount = 100.00m, + RemainingBalance = 0.00m, + TaxObjectCode = "02", + Equivalence = 1m, + Subtotal = 100.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.000000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.350000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.000000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Cuota", + TaxRate = 0.000000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Tasa", + TaxRate = 0.304000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Cuota", + TaxRate = 0.040000m, + TaxFlagCode = "R" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button4_Click(object sender, EventArgs e) + { + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2021-12-15T00:00:00"), + PaymentFormCode = "01", + CurrencyCode = "MXN", + ExchangeRate = 1m, + Amount = 200.0m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "bfc36522-4b8e-45c4-8f14-d11b289f9eb7", + Number = "N0000216349", + CurrencyCode = "MXN", + PartialityNumber = 1, + PreviousBalance = 200.00m, + PaymentAmount = 200.00m, + RemainingBalance = 0.00m, + TaxObjectCode = "01", + Equivalence = 1m, + Subtotal = 20.00m + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button5_Click(object sender, EventArgs e) + { + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2021-12-15T00:00:00"), + PaymentFormCode = "01", + CurrencyCode = "MXN", + ExchangeRate = 1m, + Amount = 116.0m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "bfc36522-4b8e-45c4-8f14-d11b289f9eb7", + Number = "N0000216349", + CurrencyCode = "MXN", + PartialityNumber = 1, + PreviousBalance = 200.00m, + PaymentAmount = 100.00m, + RemainingBalance = 100.00m, + TaxObjectCode = "02", + Equivalence = 1m, + Subtotal = 100.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button6_Click(object sender, EventArgs e) + { + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-01-31T17:49:04"), + PaymentFormCode = "03", + CurrencyCode = "EUR", + ExchangeRate = 25.00m, + Amount = 100.0m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "4a5d025b-813a-4acf-9f32-8fb61f4918ac", + CurrencyCode = "USD", + PartialityNumber = 1, + PreviousBalance = 116.00m, + PaymentAmount = 116.00m, + RemainingBalance = 0.00m, + TaxObjectCode = "02", + Equivalence = 1.160m, + Subtotal = 100.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button7_Click(object sender, EventArgs e) + { + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-01-31T17:49:04"), + PaymentFormCode = "03", + CurrencyCode = "USD", + ExchangeRate = 20.64m, + Amount = 5.62m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "4a5d025b-813a-4acf-9f32-8fb61f4918ac", + CurrencyCode = "MXN", + PartialityNumber = 1, + PreviousBalance = 116.00m, + PaymentAmount = 116.00m, + RemainingBalance = 0.00m, + TaxObjectCode = "02", + Equivalence = 20.64m, + Subtotal = 100.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button8_Click(object sender, EventArgs e) + { + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-01-31T17:49:04"), + PaymentFormCode = "03", + CurrencyCode = "USD", + ExchangeRate = 18.012300m, + Amount = 1160.00m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "4a5d025b-813a-4acf-9f32-8fb61f4918ac", + CurrencyCode = "USD", + PartialityNumber = 1, + PreviousBalance = 1160.00m, + PaymentAmount = 1160.00m, + RemainingBalance = 0.00m, + TaxObjectCode = "02", + Equivalence = 1.00m, + Subtotal = 10.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button9_Click(object sender, EventArgs e) + { + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2023-11-29T12:00:00"), + PaymentFormCode = "03", + CurrencyCode = "USD", + ExchangeRate = 1.00m, + Amount = 100.00m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "a0476c1b-8829-448d-82ab-92d8b26be878", + CurrencyCode = "MXN", + PartialityNumber = 1, + PreviousBalance = 98.75m, + PaymentAmount = 98.75m, + RemainingBalance = 0.00m, + TaxObjectCode = "02", + Equivalence = 1.00m, + Subtotal = 100.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "06370", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button10_Click(object sender, EventArgs e) + { + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-09-09T17:33:38"), + PaymentFormCode = "01", + CurrencyCode = "MXN", + ExchangeRate = 1.00m, + Amount = 100.00m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "b7c8d2bf-cb4e-4f84-af89-c68b6731206a", + Series = "FA", + Number = "N0000216349", + CurrencyCode = "MXN", + PartialityNumber = 2, + PreviousBalance = 100.00m, + PaymentAmount = 100.00m, + RemainingBalance = 0.00m, + TaxObjectCode = "02", + Equivalence = 1.00m, + Subtotal = 1.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Exento", + TaxFlagCode = "T" + }, + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Exento", + TaxFlagCode = "T" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "75700", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button11_Click(object sender, EventArgs e) + { + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-05-26T12:00:00"), + PaymentFormCode = "03", + CurrencyCode = "MXN", + ExchangeRate = 1.00m, + Amount = 100.00m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "a0476c1b-8829-448d-82ab-92d8b26be878", + CurrencyCode = "MXN", + PartialityNumber = 1, + PreviousBalance = 98.75m, + PaymentAmount = 98.75m, + RemainingBalance = 0.00m, + TaxObjectCode = "02", + Equivalence = 1.00m, + Subtotal = 100.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.000000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Cuota", + TaxRate = 0.040000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Exento", + TaxFlagCode = "T" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "75700", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button12_Click(object sender, EventArgs e) + { + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-01-31T17:49:04"), + PaymentFormCode = "03", + CurrencyCode = "MXN", + ExchangeRate = 1.00m, + Amount = 921.23m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "4a5d025b-813a-4acf-9f32-8fb61f4918ac", + CurrencyCode = "USD", + PartialityNumber = 1, + PreviousBalance = 41.76m, + PaymentAmount = 41.76m, + RemainingBalance = 0.00m, + TaxObjectCode = "02", + Equivalence = 0.045331m, + Subtotal = 36.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + } + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "42060", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button13_Click(object sender, EventArgs e) + { + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + var items = new List() + { + new InvoiceItem + { + ItemCode = "23151602", + ItemSku = "23151602", + Quantity = 1.00m, + UnitOfMeasurementCode = "H87", + Description = "Trituradora", + UnitPrice = 5000.00m, + TaxObjectCode = "02", + ItemTaxes = new List + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + }, + new InvoiceItem + { + ItemCode = "23101510", + ItemSku = "23101510", + Quantity = 1.00m, + UnitOfMeasurementCode = "H87", + Description = "Pulidora", + UnitPrice = 10000.00m, + TaxObjectCode = "02", + ItemTaxes = new List + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + }, + OnBehalfOf = new OnBehalfOf + { + Tin = "XIQB891116QE4", + LegalName = "BERENICE XIMO QUEZADA", + TaxRegimeCode = "612", + ZipCode = "40968" + } + }, + new InvoiceItem + { + ItemCode = "23281703", + ItemSku = "23281703", + Quantity = 1.00m, + UnitOfMeasurementCode = "H87", + Description = "Maquina de arena", + UnitPrice = 30000.00m, + TaxObjectCode = "02", + ItemTaxes = new List + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + }, + OnBehalfOf = new OnBehalfOf + { + Tin = "IVD920810GU2", + LegalName = "INNOVACION VALOR Y DESARROLLO", + TaxRegimeCode = "601", + ZipCode = "63901" + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "26015", + Issuer = issuer, + Recipient = recipient, + Items = items, + ExportCode = "01", + PaymentMethodCode = "PPD", + PaymentFormCode = "99" + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button14_Click(object sender, EventArgs e) + { + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-09-09T17:33:38"), + PaymentFormCode = "01", + CurrencyCode = "MXN", + ExchangeRate = 1.00m, + Amount = 100.00m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "b7c8d2bf-cb4e-4f84-af89-c68b6731206a", + Series = "FA", + Number = "N0000216349", + CurrencyCode = "MXN", + PartialityNumber = 2, + PreviousBalance = 100.00m, + PaymentAmount = 100.00m, + RemainingBalance = 0.00m, + TaxObjectCode = "02", + Equivalence = 1.00m, + Subtotal = 76.80m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Exento", + TaxFlagCode = "T" + }, + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate= 0.160000m, + TaxFlagCode = "T" + }, + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Exento", + TaxFlagCode = "T" + }, + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Tasa", + TaxRate = 0.080000m, + TaxFlagCode = "T" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "75700", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button15_Click(object sender, EventArgs e) + { + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-01-31T17:49:04"), + PaymentFormCode = "03", + CurrencyCode = "MXN", + ExchangeRate = 1.00m, + Amount = 921.23m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "4a5d025b-813a-4acf-9f32-8fb61f4918ac", + CurrencyCode = "MXN", + PartialityNumber = 1, + PreviousBalance = 921.23m, + PaymentAmount = 921.23m, + RemainingBalance = 0.00m, + TaxObjectCode = "02", + Equivalence = 1.00m, + Subtotal = 794.1638m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "42060", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button16_Click(object sender, EventArgs e) + { + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-06-06T00:00:00"), + PaymentFormCode = "01", + CurrencyCode = "MXN", + ExchangeRate = 1.00m, + Amount = 100.00m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "bfc36522-4b8e-45c4-8f14-d11b289f9eb7", + CurrencyCode = "MXN", + PartialityNumber = 1, + PreviousBalance = 100.00m, + PaymentAmount = 100.00m, + RemainingBalance = 0.00m, + TaxObjectCode = "08", + Equivalence = 1.00m, + Subtotal = 100.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.000000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.350000m, + TaxFlagCode = "R" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button17_Click(object sender, EventArgs e) + { + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-06-06T00:00:00"), + PaymentFormCode = "01", + CurrencyCode = "MXN", + ExchangeRate = 1.00m, + Amount = 100.00m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "bfc36522-4b8e-45c4-8f14-d11b289f9eb7", + CurrencyCode = "MXN", + PartialityNumber = 1, + PreviousBalance = 100.00m, + PaymentAmount = 100.00m, + RemainingBalance = 0.00m, + TaxObjectCode = "07", + Equivalence = 1.00m, + Subtotal = 64.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Cuota", + TaxRate = 0.000000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Tasa", + TaxRate = 0.304000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Cuota", + TaxRate = 0.040000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Exento", + TaxFlagCode = "T" + }, + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Tasa", + TaxRate = 0.080000m, + TaxFlagCode = "T" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "42060", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button18_Click(object sender, EventArgs e) + { + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-06-06T00:00:00"), + PaymentFormCode = "01", + CurrencyCode = "MXN", + ExchangeRate = 1.00m, + Amount = 100.00m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "bfc36522-4b8e-45c4-8f14-d11b289f9eb7", + CurrencyCode = "MXN", + PartialityNumber = 1, + PreviousBalance = 100.00m, + PaymentAmount = 100.00m, + RemainingBalance = 0.00m, + TaxObjectCode = "06", + Equivalence = 1.00m, + Subtotal = 100.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.000000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.350000m, + TaxFlagCode = "R" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "42060", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button19_Click(object sender, EventArgs e) + { + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor KARLA FUENTE NOLASCO + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor ESCUELA KEMPER URGATE + var recipient = new InvoiceRecipient + { + Id = "bd199ed8-02ef-47c0-919c-9479dd8ecae7" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-06-06T00:00:00"), + PaymentFormCode = "01", + CurrencyCode = "MXN", + ExchangeRate = 1.00m, + Amount = 100.00m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "bfc36522-4b8e-45c4-8f14-d11b289f9eb7", + CurrencyCode = "MXN", + PartialityNumber = 1, + PreviousBalance = 100.00m, + PaymentAmount = 100.00m, + RemainingBalance = 0.00m, + TaxObjectCode = "07", + Equivalence = 1.00m, + Subtotal = 63.40m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.000000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.350000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Exento", + TaxFlagCode = "T" + }, + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Tasa", + TaxRate = 0.080000m, + TaxFlagCode = "T" + }, + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + } +} diff --git a/FiscalApi.Samples.NetFramework/PaymentComplementInvoiceReferenceForm.resx b/FiscalApi.Samples.NetFramework/PaymentComplementInvoiceReferenceForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/PaymentComplementInvoiceReferenceForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/PaymentComplementInvoiceValueForm.Designer.cs b/FiscalApi.Samples.NetFramework/PaymentComplementInvoiceValueForm.Designer.cs new file mode 100644 index 0000000..2debc8a --- /dev/null +++ b/FiscalApi.Samples.NetFramework/PaymentComplementInvoiceValueForm.Designer.cs @@ -0,0 +1,309 @@ +namespace FiscalApi.Samples.NetFramework +{ + partial class PaymentComplementInvoiceForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.button19 = new System.Windows.Forms.Button(); + this.button18 = new System.Windows.Forms.Button(); + this.button17 = new System.Windows.Forms.Button(); + this.button16 = new System.Windows.Forms.Button(); + this.button15 = new System.Windows.Forms.Button(); + this.button14 = new System.Windows.Forms.Button(); + this.button13 = new System.Windows.Forms.Button(); + this.button12 = new System.Windows.Forms.Button(); + this.button11 = new System.Windows.Forms.Button(); + this.button10 = new System.Windows.Forms.Button(); + this.button9 = new System.Windows.Forms.Button(); + this.button8 = new System.Windows.Forms.Button(); + this.button7 = new System.Windows.Forms.Button(); + this.button6 = new System.Windows.Forms.Button(); + this.button5 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.button19); + this.groupBox1.Controls.Add(this.button18); + this.groupBox1.Controls.Add(this.button17); + this.groupBox1.Controls.Add(this.button16); + this.groupBox1.Controls.Add(this.button15); + this.groupBox1.Controls.Add(this.button14); + this.groupBox1.Controls.Add(this.button13); + this.groupBox1.Controls.Add(this.button12); + this.groupBox1.Controls.Add(this.button11); + this.groupBox1.Controls.Add(this.button10); + this.groupBox1.Controls.Add(this.button9); + this.groupBox1.Controls.Add(this.button8); + this.groupBox1.Controls.Add(this.button7); + this.groupBox1.Controls.Add(this.button6); + this.groupBox1.Controls.Add(this.button5); + this.groupBox1.Controls.Add(this.button4); + this.groupBox1.Controls.Add(this.button3); + this.groupBox1.Controls.Add(this.button2); + this.groupBox1.Controls.Add(this.button1); + this.groupBox1.Location = new System.Drawing.Point(12, 12); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(403, 691); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "groupBox1"; + this.groupBox1.Enter += new System.EventHandler(this.groupBox1_Enter); + // + // button19 + // + this.button19.Location = new System.Drawing.Point(201, 549); + this.button19.Name = "button19"; + this.button19.Size = new System.Drawing.Size(189, 60); + this.button19.TabIndex = 18; + this.button19.Text = "Factura pago - pago objeto impuesto 07. 001 y 003 - ISR y IEPS"; + this.button19.UseVisualStyleBackColor = true; + this.button19.Click += new System.EventHandler(this.button19_Click); + // + // button18 + // + this.button18.Location = new System.Drawing.Point(201, 483); + this.button18.Name = "button18"; + this.button18.Size = new System.Drawing.Size(189, 60); + this.button18.TabIndex = 17; + this.button18.Text = "Factura pago - pago objeto impuesto 06. 001 - ISR"; + this.button18.UseVisualStyleBackColor = true; + this.button18.Click += new System.EventHandler(this.button18_Click); + // + // button17 + // + this.button17.Location = new System.Drawing.Point(201, 417); + this.button17.Name = "button17"; + this.button17.Size = new System.Drawing.Size(189, 60); + this.button17.TabIndex = 16; + this.button17.Text = "Factura pago - pago objeto impuesto 07. 003 - IEPS"; + this.button17.UseVisualStyleBackColor = true; + this.button17.Click += new System.EventHandler(this.button17_Click); + // + // button16 + // + this.button16.Location = new System.Drawing.Point(201, 351); + this.button16.Name = "button16"; + this.button16.Size = new System.Drawing.Size(189, 60); + this.button16.TabIndex = 15; + this.button16.Text = "Factura pago - pago objeto impuesto 08. 001 - ISR"; + this.button16.UseVisualStyleBackColor = true; + this.button16.Click += new System.EventHandler(this.button16_Click); + // + // button15 + // + this.button15.Location = new System.Drawing.Point(201, 285); + this.button15.Name = "button15"; + this.button15.Size = new System.Drawing.Size(189, 60); + this.button15.TabIndex = 14; + this.button15.Text = "Factura pago - pago en MXN y DR en MXN"; + this.button15.UseVisualStyleBackColor = true; + this.button15.Click += new System.EventHandler(this.button15_Click); + // + // button14 + // + this.button14.Location = new System.Drawing.Point(201, 219); + this.button14.Name = "button14"; + this.button14.Size = new System.Drawing.Size(189, 60); + this.button14.TabIndex = 13; + this.button14.Text = "Factura pago - pago solo traslados"; + this.button14.UseVisualStyleBackColor = true; + this.button14.Click += new System.EventHandler(this.button14_Click); + // + // button13 + // + this.button13.Location = new System.Drawing.Point(201, 153); + this.button13.Name = "button13"; + this.button13.Size = new System.Drawing.Size(189, 60); + this.button13.TabIndex = 12; + this.button13.Text = "Factura pago - pago cobro por cuenta de terceros"; + this.button13.UseVisualStyleBackColor = true; + this.button13.Click += new System.EventHandler(this.button13_Click); + // + // button12 + // + this.button12.Location = new System.Drawing.Point(201, 87); + this.button12.Name = "button12"; + this.button12.Size = new System.Drawing.Size(189, 60); + this.button12.TabIndex = 11; + this.button12.Text = "Factura pago - pago en MXN y DR en USD"; + this.button12.UseVisualStyleBackColor = true; + this.button12.Click += new System.EventHandler(this.button12_Click); + // + // button11 + // + this.button11.Location = new System.Drawing.Point(201, 21); + this.button11.Name = "button11"; + this.button11.Size = new System.Drawing.Size(189, 60); + this.button11.TabIndex = 10; + this.button11.Text = "Factura pago - pago con IVA exento y retenciones"; + this.button11.UseVisualStyleBackColor = true; + this.button11.Click += new System.EventHandler(this.button11_Click); + // + // button10 + // + this.button10.Location = new System.Drawing.Point(6, 615); + this.button10.Name = "button10"; + this.button10.Size = new System.Drawing.Size(189, 60); + this.button10.TabIndex = 9; + this.button10.Text = "Factura pago - pago con IVA exento"; + this.button10.UseVisualStyleBackColor = true; + this.button10.Click += new System.EventHandler(this.button10_Click); + // + // button9 + // + this.button9.Location = new System.Drawing.Point(6, 549); + this.button9.Name = "button9"; + this.button9.Size = new System.Drawing.Size(189, 60); + this.button9.TabIndex = 8; + this.button9.Text = "Factura pago - IVA y retenciones al 16%"; + this.button9.UseVisualStyleBackColor = true; + this.button9.Click += new System.EventHandler(this.button9_Click); + // + // button8 + // + this.button8.Location = new System.Drawing.Point(6, 483); + this.button8.Name = "button8"; + this.button8.Size = new System.Drawing.Size(189, 60); + this.button8.TabIndex = 7; + this.button8.Text = "Factura pago - pago misma monedaP y monedaDR"; + this.button8.UseVisualStyleBackColor = true; + this.button8.Click += new System.EventHandler(this.button8_Click); + // + // button7 + // + this.button7.Location = new System.Drawing.Point(6, 417); + this.button7.Name = "button7"; + this.button7.Size = new System.Drawing.Size(189, 60); + this.button7.TabIndex = 6; + this.button7.Text = "Factura pago - pago en USD"; + this.button7.UseVisualStyleBackColor = true; + this.button7.Click += new System.EventHandler(this.button7_Click); + // + // button6 + // + this.button6.Location = new System.Drawing.Point(6, 351); + this.button6.Name = "button6"; + this.button6.Size = new System.Drawing.Size(189, 60); + this.button6.TabIndex = 5; + this.button6.Text = "Factura pago - pago EUR y DR USD"; + this.button6.UseVisualStyleBackColor = true; + this.button6.Click += new System.EventHandler(this.button6_Click); + // + // button5 + // + this.button5.Location = new System.Drawing.Point(6, 285); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(189, 60); + this.button5.TabIndex = 4; + this.button5.Text = "Factura pago - pago parcialidades"; + this.button5.UseVisualStyleBackColor = true; + this.button5.Click += new System.EventHandler(this.button5_Click); + // + // button4 + // + this.button4.Location = new System.Drawing.Point(6, 219); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(189, 60); + this.button4.TabIndex = 3; + this.button4.Text = "Factura pago - sin impuestos"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.button4_Click); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(6, 153); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(189, 60); + this.button3.TabIndex = 2; + this.button3.Text = "Factura pago - solo retenciones"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(6, 87); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(189, 60); + this.button2.TabIndex = 1; + this.button2.Text = "Factura pago - pagos varios DR"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(6, 21); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(189, 60); + this.button1.TabIndex = 0; + this.button1.Text = "Factura pago - RFC genérico"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // PaymentComplementInvoiceForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(427, 715); + this.Controls.Add(this.groupBox1); + this.Name = "PaymentComplementInvoiceForm"; + this.Text = "PaymentComplementInvoiceForm"; + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button19; + private System.Windows.Forms.Button button18; + private System.Windows.Forms.Button button17; + private System.Windows.Forms.Button button16; + private System.Windows.Forms.Button button15; + private System.Windows.Forms.Button button14; + private System.Windows.Forms.Button button13; + private System.Windows.Forms.Button button12; + private System.Windows.Forms.Button button11; + private System.Windows.Forms.Button button10; + private System.Windows.Forms.Button button9; + private System.Windows.Forms.Button button8; + private System.Windows.Forms.Button button7; + private System.Windows.Forms.Button button6; + private System.Windows.Forms.Button button5; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button2; + } +} \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/PaymentComplementInvoiceValueForm.cs b/FiscalApi.Samples.NetFramework/PaymentComplementInvoiceValueForm.cs new file mode 100644 index 0000000..90e018b --- /dev/null +++ b/FiscalApi.Samples.NetFramework/PaymentComplementInvoiceValueForm.cs @@ -0,0 +1,2532 @@ +using Fiscalapi.Common; +using Fiscalapi.Models; +using Fiscalapi.Services; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FiscalApi.Samples.NetFramework +{ + public partial class PaymentComplementInvoiceForm : Form + { + private FiscalapiSettings _settings; + + public PaymentComplementInvoiceForm(FiscalapiSettings settings) + { + InitializeComponent(); + _settings = settings; + } + + private async void button18_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "CP01", + Email = "someone@somewhere.com" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-06-06T00:00:00"), + PaymentFormCode = "01", + CurrencyCode = "MXN", + ExchangeRate = 1.00m, + Amount = 100.00m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "bfc36522-4b8e-45c4-8f14-d11b289f9eb7", + CurrencyCode = "MXN", + PartialityNumber = 1, + PreviousBalance = 100.00m, + PaymentAmount = 100.00m, + RemainingBalance = 0.00m, + TaxObjectCode = "06", + Equivalence = 1.00m, + Subtotal = 100.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.000000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.350000m, + TaxFlagCode = "R" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "42060", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button1_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "XAXX010101000", + LegalName = "ESCUELA KEMPER URGATE", + ZipCode = "75700", + TaxRegimeCode = "616", + CfdiUseCode = "CP01", + Email = "someone@somewhere.com" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-09-09T17:33:38"), + PaymentFormCode = "01", + CurrencyCode = "MXN", + ExchangeRate = 1m, + Amount = 6778.00m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "b7c8d2bf-cb4e-4f84-af89-c68b6731206a", + Series = "FA", + Number = "N0000216349", + CurrencyCode = "MXN", + PartialityNumber = 2, + PreviousBalance = 6777.41m, + PaymentAmount = 6777.41m, + RemainingBalance = 0.00m, + TaxObjectCode = "02", + Equivalence = 1m, + Subtotal = 5842.600000m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + }, + new PaidInvoice + { + Uuid = "94f4e541-bb38-4355-b779-02d337dc9720", + Series = "FA", + Number = "SI000032690", + CurrencyCode = "MXN", + PartialityNumber = 1, + PreviousBalance = 9610.81m, + PaymentAmount = 0.59m, + RemainingBalance = 9610.22m, + TaxObjectCode = "02", + Equivalence = 1m, + Subtotal = 0.510000m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "75700", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button2_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "CP01", + Email = "someone@somewhere.com" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-09-09T17:33:38"), + PaymentFormCode = "01", + CurrencyCode = "MXN", + ExchangeRate = 1m, + Amount = 323, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "b7c8d2bf-cb4e-4f84-af89-c68b6731206a", + Series = "FA", + Number = "N0000216349", + CurrencyCode = "MXN", + PartialityNumber = 2, + PreviousBalance = 200.00m, + PaymentAmount = 100.00m, + RemainingBalance = 100.00m, + TaxObjectCode = "02", + Equivalence = 1m, + Subtotal = 10.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + }, + new PaidInvoice + { + Uuid = "94f4e541-bb38-4355-b779-02d337dc9720", + Series = "FA", + Number = "SI000032690", + CurrencyCode = "MXN", + PartialityNumber = 1, + PreviousBalance = 100.00m, + PaymentAmount = 100.00m, + RemainingBalance = 0.00m, + TaxObjectCode = "02", + Equivalence = 1m, + Subtotal = 100.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "75700", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button3_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "CP01", + Email = "someone@somewhere.com" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-06-06T00:00:00"), + PaymentFormCode = "01", + CurrencyCode = "MXN", + ExchangeRate = 1m, + Amount = 100.00m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "bfc36522-4b8e-45c4-8f14-d11b289f9eb7", + CurrencyCode = "MXN", + PartialityNumber = 1, + PreviousBalance = 100.00m, + PaymentAmount = 100.00m, + RemainingBalance = 0.00m, + TaxObjectCode = "02", + Equivalence = 1m, + Subtotal = 100.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.000000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.350000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.000000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Cuota", + TaxRate = 0.000000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Tasa", + TaxRate = 0.304000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Cuota", + TaxRate = 0.040000m, + TaxFlagCode = "R" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button4_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "CP01", + Email = "someone@somewhere.com" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2021-12-15T00:00:00"), + PaymentFormCode = "01", + CurrencyCode = "MXN", + ExchangeRate = 1m, + Amount = 200.0m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "bfc36522-4b8e-45c4-8f14-d11b289f9eb7", + Number = "N0000216349", + CurrencyCode = "MXN", + PartialityNumber = 1, + PreviousBalance = 200.00m, + PaymentAmount = 200.00m, + RemainingBalance = 0.00m, + TaxObjectCode = "01", + Equivalence = 1m, + Subtotal = 20.00m + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button19_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "CP01", + Email = "someone@somewhere.com" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-06-06T00:00:00"), + PaymentFormCode = "01", + CurrencyCode = "MXN", + ExchangeRate = 1.00m, + Amount = 100.00m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "bfc36522-4b8e-45c4-8f14-d11b289f9eb7", + CurrencyCode = "MXN", + PartialityNumber = 1, + PreviousBalance = 100.00m, + PaymentAmount = 100.00m, + RemainingBalance = 0.00m, + TaxObjectCode = "07", + Equivalence = 1.00m, + Subtotal = 63.40m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.000000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.350000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Exento", + TaxFlagCode = "T" + }, + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Tasa", + TaxRate = 0.080000m, + TaxFlagCode = "T" + }, + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button17_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "CP01", + Email = "someone@somewhere.com" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-06-06T00:00:00"), + PaymentFormCode = "01", + CurrencyCode = "MXN", + ExchangeRate = 1.00m, + Amount = 100.00m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "bfc36522-4b8e-45c4-8f14-d11b289f9eb7", + CurrencyCode = "MXN", + PartialityNumber = 1, + PreviousBalance = 100.00m, + PaymentAmount = 100.00m, + RemainingBalance = 0.00m, + TaxObjectCode = "07", + Equivalence = 1.00m, + Subtotal = 64.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Cuota", + TaxRate = 0.000000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Tasa", + TaxRate = 0.304000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Cuota", + TaxRate = 0.040000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Exento", + TaxFlagCode = "T" + }, + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Tasa", + TaxRate = 0.080000m, + TaxFlagCode = "T" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "42060", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button16_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "CP01", + Email = "someone@somewhere.com" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-06-06T00:00:00"), + PaymentFormCode = "01", + CurrencyCode = "MXN", + ExchangeRate = 1.00m, + Amount = 100.00m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "bfc36522-4b8e-45c4-8f14-d11b289f9eb7", + CurrencyCode = "MXN", + PartialityNumber = 1, + PreviousBalance = 100.00m, + PaymentAmount = 100.00m, + RemainingBalance = 0.00m, + TaxObjectCode = "08", + Equivalence = 1.00m, + Subtotal = 100.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.000000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.350000m, + TaxFlagCode = "R" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button15_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "CP01", + Email = "someone@somewhere.com" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-01-31T17:49:04"), + PaymentFormCode = "03", + CurrencyCode = "MXN", + ExchangeRate = 1.00m, + Amount = 921.23m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "4a5d025b-813a-4acf-9f32-8fb61f4918ac", + CurrencyCode = "MXN", + PartialityNumber = 1, + PreviousBalance = 921.23m, + PaymentAmount = 921.23m, + RemainingBalance = 0.00m, + TaxObjectCode = "02", + Equivalence = 1.00m, + Subtotal = 794.1638m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "42060", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button9_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "CP01", + Email = "someone@somewhere.com" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2023-11-29T12:00:00"), + PaymentFormCode = "03", + CurrencyCode = "USD", + ExchangeRate = 1.00m, + Amount = 100.00m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "a0476c1b-8829-448d-82ab-92d8b26be878", + CurrencyCode = "MXN", + PartialityNumber = 1, + PreviousBalance = 98.75m, + PaymentAmount = 98.75m, + RemainingBalance = 0.00m, + TaxObjectCode = "02", + Equivalence = 1.00m, + Subtotal = 100.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "06370", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private void groupBox1_Enter(object sender, EventArgs e) + { + + } + + private async void button5_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "CP01", + Email = "someone@somewhere.com" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2021-12-15T00:00:00"), + PaymentFormCode = "01", + CurrencyCode = "MXN", + ExchangeRate = 1m, + Amount = 116.0m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "bfc36522-4b8e-45c4-8f14-d11b289f9eb7", + Number = "N0000216349", + CurrencyCode = "MXN", + PartialityNumber = 1, + PreviousBalance = 200.00m, + PaymentAmount = 100.00m, + RemainingBalance = 100.00m, + TaxObjectCode = "02", + Equivalence = 1m, + Subtotal = 100.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button6_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "CP01", + Email = "someone@somewhere.com" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-01-31T17:49:04"), + PaymentFormCode = "03", + CurrencyCode = "EUR", + ExchangeRate = 25.00m, + Amount = 100.0m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "4a5d025b-813a-4acf-9f32-8fb61f4918ac", + CurrencyCode = "USD", + PartialityNumber = 1, + PreviousBalance = 116.00m, + PaymentAmount = 116.00m, + RemainingBalance = 0.00m, + TaxObjectCode = "02", + Equivalence = 1.160m, + Subtotal = 100.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button7_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "CP01", + Email = "someone@somewhere.com" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-01-31T17:49:04"), + PaymentFormCode = "03", + CurrencyCode = "USD", + ExchangeRate = 20.64m, + Amount = 5.62m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "4a5d025b-813a-4acf-9f32-8fb61f4918ac", + CurrencyCode = "MXN", + PartialityNumber = 1, + PreviousBalance = 116.00m, + PaymentAmount = 116.00m, + RemainingBalance = 0.00m, + TaxObjectCode = "02", + Equivalence = 20.64m, + Subtotal = 100.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button8_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "CP01", + Email = "someone@somewhere.com" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-01-31T17:49:04"), + PaymentFormCode = "03", + CurrencyCode = "USD", + ExchangeRate = 18.012300m, + Amount = 1160.00m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "4a5d025b-813a-4acf-9f32-8fb61f4918ac", + CurrencyCode = "USD", + PartialityNumber = 1, + PreviousBalance = 1160.00m, + PaymentAmount = 1160.00m, + RemainingBalance = 0.00m, + TaxObjectCode = "02", + Equivalence = 1.00m, + Subtotal = 10.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button10_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "XAXX010101000", + LegalName = "PUBLICO EN GENERAL", + ZipCode = "75700", + TaxRegimeCode = "616", + CfdiUseCode = "CP01", + Email = "someone@somewhere.com" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-09-09T17:33:38"), + PaymentFormCode = "01", + CurrencyCode = "MXN", + ExchangeRate = 1.00m, + Amount = 100.00m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "b7c8d2bf-cb4e-4f84-af89-c68b6731206a", + Series = "FA", + Number = "N0000216349", + CurrencyCode = "MXN", + PartialityNumber = 2, + PreviousBalance = 100.00m, + PaymentAmount = 100.00m, + RemainingBalance = 0.00m, + TaxObjectCode = "02", + Equivalence = 1.00m, + Subtotal = 1.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Exento", + TaxFlagCode = "T" + }, + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Exento", + TaxFlagCode = "T" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "75700", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button11_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "CP01", + Email = "someone@somewhere.com" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-05-26T12:00:00"), + PaymentFormCode = "03", + CurrencyCode = "MXN", + ExchangeRate = 1.00m, + Amount = 100.00m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "a0476c1b-8829-448d-82ab-92d8b26be878", + CurrencyCode = "MXN", + PartialityNumber = 1, + PreviousBalance = 98.75m, + PaymentAmount = 98.75m, + RemainingBalance = 0.00m, + TaxObjectCode = "02", + Equivalence = 1.00m, + Subtotal = 100.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "001", + TaxTypeCode = "Tasa", + TaxRate = 0.000000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Cuota", + TaxRate = 0.040000m, + TaxFlagCode = "R" + }, + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Exento", + TaxFlagCode = "T" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "75700", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button12_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "URE180429TM6", + LegalName = "UNIVERSIDAD ROBOTICA ESPAÑOLA", + ZipCode = "86991", + TaxRegimeCode = "601", + CfdiUseCode = "CP01", + Email = "someone@somewhere.com" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-01-31T17:49:04"), + PaymentFormCode = "03", + CurrencyCode = "MXN", + ExchangeRate = 1.00m, + Amount = 921.23m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "4a5d025b-813a-4acf-9f32-8fb61f4918ac", + CurrencyCode = "USD", + PartialityNumber = 1, + PreviousBalance = 41.76m, + PaymentAmount = 41.76m, + RemainingBalance = 0.00m, + TaxObjectCode = "02", + Equivalence = 0.045331m, + Subtotal = 36.00m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + } + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "42060", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button13_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "CACX7605101P8", + LegalName = "XOCHILT CASAS CHAVEZ", + ZipCode = "36257", + TaxRegimeCode = "626", + CfdiUseCode = "I08", + Email = "someone@somewhere.com" + }; + + var items = new List() + { + new InvoiceItem + { + ItemCode = "23151602", + ItemSku = "23151602", + Quantity = 1.00m, + UnitOfMeasurementCode = "H87", + Description = "Trituradora", + UnitPrice = 5000.00m, + TaxObjectCode = "02", + ItemTaxes = new List + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + } + }, + new InvoiceItem + { + ItemCode = "23101510", + ItemSku = "23101510", + Quantity = 1.00m, + UnitOfMeasurementCode = "H87", + Description = "Pulidora", + UnitPrice = 10000.00m, + TaxObjectCode = "02", + ItemTaxes = new List + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + }, + OnBehalfOf = new OnBehalfOf + { + Tin = "XIQB891116QE4", + LegalName = "BERENICE XIMO QUEZADA", + TaxRegimeCode = "612", + ZipCode = "40968" + } + }, + new InvoiceItem + { + ItemCode = "23281703", + ItemSku = "23281703", + Quantity = 1.00m, + UnitOfMeasurementCode = "H87", + Description = "Maquina de arena", + UnitPrice = 30000.00m, + TaxObjectCode = "02", + ItemTaxes = new List + { + new InvoiceItemTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate = 0.160000m, + TaxFlagCode = "T" + } + }, + OnBehalfOf = new OnBehalfOf + { + Tin = "IVD920810GU2", + LegalName = "INNOVACION VALOR Y DESARROLLO", + TaxRegimeCode = "601", + ZipCode = "63901" + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "I", + ExpeditionZipCode = "26015", + Issuer = issuer, + Recipient = recipient, + Items = items, + ExportCode = "01", + PaymentMethodCode = "PPD", + PaymentFormCode = "99" + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button14_Click(object sender, EventArgs e) + { + // Crear fiscalapi client + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "XAXX010101000", + LegalName = "PUBLICO EN GENERAL", + ZipCode = "75700", + TaxRegimeCode = "616", + CfdiUseCode = "CP01", + Email = "someone@somewhere.com" + }; + + var complement = new Complement + { + Payment = new InvoicePayment + { + PaymentDate = DateTime.Parse("2022-09-09T17:33:38"), + PaymentFormCode = "01", + CurrencyCode = "MXN", + ExchangeRate = 1.00m, + Amount = 100.00m, + PaidInvoices = new List() + { + new PaidInvoice + { + Uuid = "b7c8d2bf-cb4e-4f84-af89-c68b6731206a", + Series = "FA", + Number = "N0000216349", + CurrencyCode = "MXN", + PartialityNumber = 2, + PreviousBalance = 100.00m, + PaymentAmount = 100.00m, + RemainingBalance = 0.00m, + TaxObjectCode = "02", + Equivalence = 1.00m, + Subtotal = 76.80m, + PaidInvoiceTaxes = new List + { + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Exento", + TaxFlagCode = "T" + }, + new PaidInvoiceTax + { + TaxCode = "002", + TaxTypeCode = "Tasa", + TaxRate= 0.160000m, + TaxFlagCode = "T" + }, + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Exento", + TaxFlagCode = "T" + }, + new PaidInvoiceTax + { + TaxCode = "003", + TaxTypeCode = "Tasa", + TaxRate = 0.080000m, + TaxFlagCode = "T" + } + } + } + } + } + }; + + + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "XXX", + TypeCode = "P", + ExpeditionZipCode = "75700", + Issuer = issuer, + Recipient = recipient, + Complement = complement, + ExportCode = "01", + PaymentMethodCode = "" + }; + + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + } +} diff --git a/FiscalApi.Samples.NetFramework/PaymentComplementInvoiceValueForm.resx b/FiscalApi.Samples.NetFramework/PaymentComplementInvoiceValueForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/PaymentComplementInvoiceValueForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/PayrollComplementReferenceForm.Designer.cs b/FiscalApi.Samples.NetFramework/PayrollComplementReferenceForm.Designer.cs new file mode 100644 index 0000000..59b9ac3 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/PayrollComplementReferenceForm.Designer.cs @@ -0,0 +1,231 @@ +namespace FiscalApi.Samples.NetFramework +{ + partial class PayrollComplementReferenceForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.button13 = new System.Windows.Forms.Button(); + this.button12 = new System.Windows.Forms.Button(); + this.button11 = new System.Windows.Forms.Button(); + this.button10 = new System.Windows.Forms.Button(); + this.button9 = new System.Windows.Forms.Button(); + this.button8 = new System.Windows.Forms.Button(); + this.button7 = new System.Windows.Forms.Button(); + this.button6 = new System.Windows.Forms.Button(); + this.button5 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.button13); + this.groupBox1.Controls.Add(this.button12); + this.groupBox1.Controls.Add(this.button11); + this.groupBox1.Controls.Add(this.button10); + this.groupBox1.Controls.Add(this.button9); + this.groupBox1.Controls.Add(this.button8); + this.groupBox1.Controls.Add(this.button7); + this.groupBox1.Controls.Add(this.button6); + this.groupBox1.Controls.Add(this.button5); + this.groupBox1.Controls.Add(this.button4); + this.groupBox1.Controls.Add(this.button3); + this.groupBox1.Controls.Add(this.button2); + this.groupBox1.Controls.Add(this.button1); + this.groupBox1.Location = new System.Drawing.Point(12, 13); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(402, 491); + this.groupBox1.TabIndex = 1; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "groupBox1"; + // + // button13 + // + this.button13.Location = new System.Drawing.Point(202, 352); + this.button13.Name = "button13"; + this.button13.Size = new System.Drawing.Size(189, 60); + this.button13.TabIndex = 12; + this.button13.Text = "Factura nómina - Nómina"; + this.button13.UseVisualStyleBackColor = true; + this.button13.Click += new System.EventHandler(this.button13_Click); + // + // button12 + // + this.button12.Location = new System.Drawing.Point(202, 286); + this.button12.Name = "button12"; + this.button12.Size = new System.Drawing.Size(189, 60); + this.button12.TabIndex = 11; + this.button12.Text = "Factura nómina - Nómina viáticos"; + this.button12.UseVisualStyleBackColor = true; + this.button12.Click += new System.EventHandler(this.button12_Click); + // + // button11 + // + this.button11.Location = new System.Drawing.Point(202, 220); + this.button11.Name = "button11"; + this.button11.Size = new System.Drawing.Size(189, 60); + this.button11.TabIndex = 10; + this.button11.Text = "Factura nómina - Nómina subsidio causado al empleo"; + this.button11.UseVisualStyleBackColor = true; + this.button11.Click += new System.EventHandler(this.button11_Click); + // + // button10 + // + this.button10.Location = new System.Drawing.Point(202, 154); + this.button10.Name = "button10"; + this.button10.Size = new System.Drawing.Size(189, 60); + this.button10.TabIndex = 9; + this.button10.Text = "Factura nómina - Nómina sin deducciones"; + this.button10.UseVisualStyleBackColor = true; + this.button10.Click += new System.EventHandler(this.button10_Click); + // + // button9 + // + this.button9.Location = new System.Drawing.Point(202, 88); + this.button9.Name = "button9"; + this.button9.Size = new System.Drawing.Size(189, 60); + this.button9.TabIndex = 8; + this.button9.Text = "Factura nómina - Nómina jubilación pensión retiro"; + this.button9.UseVisualStyleBackColor = true; + this.button9.Click += new System.EventHandler(this.button9_Click); + // + // button8 + // + this.button8.Location = new System.Drawing.Point(202, 22); + this.button8.Name = "button8"; + this.button8.Size = new System.Drawing.Size(189, 60); + this.button8.TabIndex = 7; + this.button8.Text = "Factura nómina - Nómina separación indemnización"; + this.button8.UseVisualStyleBackColor = true; + this.button8.Click += new System.EventHandler(this.button8_Click); + // + // button7 + // + this.button7.Location = new System.Drawing.Point(7, 418); + this.button7.Name = "button7"; + this.button7.Size = new System.Drawing.Size(189, 60); + this.button7.TabIndex = 6; + this.button7.Text = "Factura nómina - Nómina extraordinaria"; + this.button7.UseVisualStyleBackColor = true; + this.button7.Click += new System.EventHandler(this.button7_Click); + // + // button6 + // + this.button6.Location = new System.Drawing.Point(7, 352); + this.button6.Name = "button6"; + this.button6.Size = new System.Drawing.Size(189, 60); + this.button6.TabIndex = 5; + this.button6.Text = "Factura nómina - Nómina con SNCF"; + this.button6.UseVisualStyleBackColor = true; + this.button6.Click += new System.EventHandler(this.button6_Click); + // + // button5 + // + this.button5.Location = new System.Drawing.Point(7, 286); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(189, 60); + this.button5.TabIndex = 4; + this.button5.Text = "Factura nómina - Nómina con incapacidades"; + this.button5.UseVisualStyleBackColor = true; + this.button5.Click += new System.EventHandler(this.button5_Click); + // + // button4 + // + this.button4.Location = new System.Drawing.Point(7, 220); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(189, 60); + this.button4.TabIndex = 3; + this.button4.Text = "Factura nómina - Nómina con horas extra"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.button4_Click); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(6, 154); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(189, 60); + this.button3.TabIndex = 2; + this.button3.Text = "Factura nómina - Nómina con bonos, fondo de ahorro y deducciones"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(7, 88); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(189, 60); + this.button2.TabIndex = 1; + this.button2.Text = "Factura nómina - Nómina asimilados"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(7, 22); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(189, 60); + this.button1.TabIndex = 0; + this.button1.Text = "Factura nómina - Nómina ordinaria"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // PayrollComplementReferenceForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(427, 516); + this.Controls.Add(this.groupBox1); + this.Name = "PayrollComplementReferenceForm"; + this.Text = "PayrollComplementReferenceForm"; + this.Load += new System.EventHandler(this.PayrollComplementReferenceForm_Load); + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Button button13; + private System.Windows.Forms.Button button12; + private System.Windows.Forms.Button button11; + private System.Windows.Forms.Button button10; + private System.Windows.Forms.Button button9; + private System.Windows.Forms.Button button8; + private System.Windows.Forms.Button button7; + private System.Windows.Forms.Button button6; + private System.Windows.Forms.Button button5; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button1; + } +} \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/PayrollComplementReferenceForm.cs b/FiscalApi.Samples.NetFramework/PayrollComplementReferenceForm.cs new file mode 100644 index 0000000..59938ce --- /dev/null +++ b/FiscalApi.Samples.NetFramework/PayrollComplementReferenceForm.cs @@ -0,0 +1,1448 @@ +using Fiscalapi.Common; +using Fiscalapi.Models; +using Fiscalapi.Services; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FiscalApi.Samples.NetFramework +{ + public partial class PayrollComplementReferenceForm : Form + { + private FiscalapiSettings _settings; + + public PayrollComplementReferenceForm(FiscalapiSettings settings) + { + InitializeComponent(); + _settings = settings; + } + + private async void button1_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Id = "da71df0c-f328-45ee-9bd9-3096ed02c164" + }; + + var payroll = new Payroll + { + Version = "1.2", + PayrollTypeCode = "O", + PaymentDate = DateTime.Parse("2025-08-30"), + InitialPaymentDate = DateTime.Parse("2025-07-31"), + FinalPaymentDate = DateTime.Parse("2025-08-30"), + DaysPaid = 30, + Earnings = new PayrollEarnings + { + Earnings = new List() + { + new PayrollEarning + { + EarningTypeCode = "001", + Code = "1003", + Concept = "Sueldo Nominal", + TaxedAmount = 95030.00m, + ExemptAmount = 0.00m + }, + new PayrollEarning + { + EarningTypeCode = "005", + Code = "5913", + Concept = "Fondo de Ahorro Aportación Patrón", + TaxedAmount = 0.00m, + ExemptAmount = 4412.46m + }, + new PayrollEarning + { + EarningTypeCode = "038", + Code = "1885", + Concept = "Bono Ingles", + TaxedAmount = 14254.50m, + ExemptAmount = 0.00m + }, + new PayrollEarning + { + EarningTypeCode = "029", + Code = "1941", + Concept = "Vales Despensa", + TaxedAmount = 0.00m, + ExemptAmount = 3439.00m + }, + new PayrollEarning + { + EarningTypeCode = "038", + Code = "1824", + Concept = "Herramientas Teletrabajo (telecom y prop. electri)", + TaxedAmount = 273.00m, + ExemptAmount = 0.00m + } + }, + OtherPayments = new List() + { + new PayrollEarningOtherPayment + { + OtherPaymentTypeCode = "002", + Code = "5050", + Concept = "Exceso de subsidio al empleo", + Amount = 0.0m, + SubsidyCaused = 0.0m + } + } + }, + Deductions = new List() + { + new PayrollDeduction + { + DeductionTypeCode = "002", + Code = "5003", + Concept = "ISR Causado", + Amount = 27645.52m + }, + new PayrollDeduction + { + DeductionTypeCode = "004", + Code = "5910", + Concept = "Fondo de ahorro Empleado Inversión", + Amount = 4412.46m + }, + new PayrollDeduction + { + DeductionTypeCode = "004", + Code = "5914", + Concept = "Fondo de Ahorro Patrón Inversión", + Amount = 4412.46m + }, + new PayrollDeduction + { + DeductionTypeCode = "004", + Code = "1966", + Concept = "Contribución póliza exceso GMM", + Amount = 519.91m + }, + new PayrollDeduction + { + DeductionTypeCode = "004", + Code = "1934", + Concept = "Descuento Vales Despensa", + Amount = 1.00m + }, + new PayrollDeduction + { + DeductionTypeCode = "004", + Code = "1942", + Concept = "Vales Despensa Electrónico", + Amount = 3439.00m + }, + new PayrollDeduction + { + DeductionTypeCode = "001", + Code = "1895", + Concept = "IMSS", + Amount = 2391.13m + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "N", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Complement = new Complement { Payroll = payroll }, + PaymentMethodCode = "PUE", + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button2_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Id = "acf43966-4672-48b6-a01a-d04cac6c3d64" + }; + + var payroll = new Payroll + { + Version = "1.2", + PayrollTypeCode = "E", + PaymentDate = DateTime.Parse("2023-06-02T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-06-01T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-06-02T00:00:00"), + DaysPaid = 1, + Earnings = new PayrollEarnings + { + Earnings = new List() + { + new PayrollEarning + { + EarningTypeCode = "046", + Code = "010046", + Concept = "INGRESOS ASIMILADOS A SALARIOS", + TaxedAmount = 111197.73m, + ExemptAmount = 0.00m + } + }, + OtherPayments = new List() { } + }, + Deductions = new List() + { + new PayrollDeduction + { + DeductionTypeCode = "002", + Code = "020002", + Concept = "ISR", + Amount = 36197.73m + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "N", + ExpeditionZipCode = "06880", + Issuer = issuer, + Recipient = recipient, + Complement = new Complement { Payroll = payroll }, + PaymentMethodCode = "PUE", + ExportCode = "01" + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button3_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Id = "da71df0c-f328-45ee-9bd9-3096ed02c164" + }; + + var payroll = new Payroll + { + Version = "1.2", + PayrollTypeCode = "O", + PaymentDate = DateTime.Parse("2023-06-11T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-06-05T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-06-11T00:00:00"), + DaysPaid = 7, + Earnings = new PayrollEarnings + { + Earnings = new List() + { + new PayrollEarning + { + EarningTypeCode = "001", + Code = "SP01", + Concept = "Sueldo Nominal", + TaxedAmount = 1210.30m, + ExemptAmount = 0.00m + }, + new PayrollEarning + { + EarningTypeCode = "010", + Code = "SP02", + Concept = "Premio de puntualidad", + TaxedAmount = 121.03m, + ExemptAmount = 0.00m + }, + new PayrollEarning + { + EarningTypeCode = "029", + Code = "SP03", + Concept = "Monedero electrónico", + TaxedAmount = 00.00m, + ExemptAmount = 269.43m + }, + new PayrollEarning + { + EarningTypeCode = "010", + Code = "SP04", + Concept = "Premio de asistencia", + TaxedAmount = 121.03m, + ExemptAmount = 00.00m + }, + new PayrollEarning + { + EarningTypeCode = "005", + Code = "SP54", + Concept = "Aportación fondo de ahorro", + TaxedAmount = 0.00m, + ExemptAmount = 121.03m + } + }, + OtherPayments = new List() + { + new PayrollEarningOtherPayment + { + OtherPaymentTypeCode = "002", + Code = "ISRSUB", + Concept = "Exceso de subsidio al empleo", + Amount = 0.0m, + SubsidyCaused = 0.0m, + BalanceCompensation = new BalanceCompensation + { + FavorableBalance = 0.00m, + Year = 2022, + RemainingFavorableBalance = 0.00m + } + } + } + }, + Deductions = new List() + { + new PayrollDeduction + { + DeductionTypeCode = "004", + Code = "ZA09", + Concept = "Aportación fondo de ahorro", + Amount = 121.03m + }, + new PayrollDeduction + { + DeductionTypeCode = "002", + Code = "ISR", + Concept = "ISR", + Amount = 36.57m + }, + new PayrollDeduction + { + DeductionTypeCode = "001", + Code = "IMSS", + Concept = "Cuota de seguridad social EE", + Amount = 30.08m + }, + new PayrollDeduction + { + DeductionTypeCode = "004", + Code = "ZA68", + Concept = "Deducción fondo de ahorro patrón", + Amount = 121.03m + }, + new PayrollDeduction + { + DeductionTypeCode = "018", + Code = "ZA11", + Concept = "Aportación caja de ahorro", + Amount = 300.00m + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "N", + ExpeditionZipCode = "20000", + ExportCode = "01", + Issuer = issuer, + Recipient = recipient, + Complement = new Complement { Payroll = payroll }, + PaymentMethodCode = "PUE", + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button4_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Id = "da71df0c-f328-45ee-9bd9-3096ed02c164" + }; + + var payroll = new Payroll + { + Version = "1.2", + PayrollTypeCode = "O", + PaymentDate = DateTime.Parse("2023-06-22T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-06-05T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-06-11T00:00:00"), + DaysPaid = 15, + Earnings = new PayrollEarnings + { + Earnings = new List() + { + new PayrollEarning + { + EarningTypeCode = "001", + Code = "00500", + Concept = "Sueldos, Salarios Rayas y Jornales", + TaxedAmount = 2808.80m, + ExemptAmount = 2191.20m + }, + new PayrollEarning + { + EarningTypeCode = "019", + Code = "00100", + Concept = "Horas extra", + TaxedAmount = 50.00m, + ExemptAmount = 50.00m, + Overtime = new List + { + new PayrollEarningOvertime + { + Days = 1, + HoursTypeCode = "01", + ExtraHours = 2, + AmountPaid = 100.00m + } + } + } + }, + OtherPayments = { } + }, + Deductions = new List() + { + new PayrollDeduction + { + DeductionTypeCode = "001", + Code = "00301", + Concept = "Seguridad social", + Amount = 200.00m + }, + new PayrollDeduction + { + DeductionTypeCode = "002", + Code = "00302", + Concept = "ISR", + Amount = 100.00m + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "N", + ExpeditionZipCode = "20000", + ExportCode = "01", + Issuer = issuer, + Recipient = recipient, + Complement = new Complement { Payroll = payroll }, + PaymentMethodCode = "PUE", + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button5_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Id = "aa2ad8c3-6ec5-4601-91be-d827d9a865bc" + }; + + var payroll = new Payroll + { + Version = "1.2", + PayrollTypeCode = "O", + PaymentDate = DateTime.Parse("2023-05-24T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-05-09T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-05-24T00:00:00"), + DaysPaid = 15, + Earnings = new PayrollEarnings + { + Earnings = new List() + { + new PayrollEarning + { + EarningTypeCode = "001", + Code = "00500", + Concept = "Sueldos, Salarios Rayas y Jornales", + TaxedAmount = 2808.80m, + ExemptAmount = 2191.20m + } + }, + OtherPayments = new List() { } + }, + Deductions = new List() + { + new PayrollDeduction + { + DeductionTypeCode = "001", + Code = "00301", + Concept = "Seguridad social", + Amount = 200.00m + }, + new PayrollDeduction + { + DeductionTypeCode = "002", + Code = "00302", + Concept = "ISR", + Amount = 100.00m + } + }, + Disabilities = new List() + { + new PayrollDisability + { + DisabilityDays = 1, + DisabilityTypeCode = "01" + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "N", + ExpeditionZipCode = "20000", + ExportCode = "01", + Issuer = issuer, + Recipient = recipient, + Complement = new Complement { Payroll = payroll }, + PaymentMethodCode = "PUE", + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button6_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Id = "da71df0c-f328-45ee-9bd9-3096ed02c164" + }; + + var payroll = new Payroll + { + Version = "1.2", + PayrollTypeCode = "O", + PaymentDate = DateTime.Parse("2023-05-16T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-05-01T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-05-16T00:00:00"), + DaysPaid = 15, + Earnings = new PayrollEarnings + { + Earnings = new List() + { + new PayrollEarning + { + EarningTypeCode = "001", + Code = "P01", + Concept = "Sueldos, Salarios Rayas y Jornales", + TaxedAmount = 3322.00m, + ExemptAmount = 0.00m + }, + new PayrollEarning + { + EarningTypeCode = "038", + Code = "P540", + Concept = "Compensación", + TaxedAmount = 100.00m, + ExemptAmount = 0.00m + }, + new PayrollEarning + { + EarningTypeCode = "038", + Code = "P550", + Concept = "Compensación Garantizada Extraordinaria", + TaxedAmount = 2200.00m, + ExemptAmount = 0.00m + }, + new PayrollEarning + { + EarningTypeCode = "038", + Code = "P530", + Concept = "Servicio extraordinario", + TaxedAmount = 200.00m, + ExemptAmount = 0.00m + }, + new PayrollEarning + { + EarningTypeCode = "001", + Code = "P506", + Concept = "Otras prestaciones", + TaxedAmount = 1500.00m, + ExemptAmount = 0.00m + }, + new PayrollEarning + { + EarningTypeCode = "001", + Code = "P505", + Concept = "Remuneración del desempeño legislativo", + TaxedAmount = 17500.00m, + ExemptAmount = 0.00m + } + }, + OtherPayments = new List() + { + new PayrollEarningOtherPayment + { + OtherPaymentTypeCode = "002", + Code = "002", + Concept = "Exceso de subsidio al empleo", + Amount = 0.0m, + SubsidyCaused = 0.0m + } + } + }, + Deductions = new List() + { + new PayrollDeduction + { + DeductionTypeCode = "002", + Code = "D002", + Concept = "ISR", + Amount = 4716.61m + }, + new PayrollDeduction + { + DeductionTypeCode = "004", + Code = "D525", + Concept = "Redondeo", + Amount = 0.81m + }, + new PayrollDeduction + { + DeductionTypeCode = "001", + Code = "D510", + Concept = "Cuota Trabajador ISSSTE", + Amount = 126.78m + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "N", + ExpeditionZipCode = "39074", + Issuer = issuer, + Recipient = recipient, + Complement = new Complement { Payroll = payroll }, + PaymentMethodCode = "PUE", + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button7_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Id = "da71df0c-f328-45ee-9bd9-3096ed02c164" + }; + + var payroll = new Payroll + { + Version = "1.2", + PayrollTypeCode = "E", + PaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + DaysPaid = 30, + Earnings = new PayrollEarnings + { + Earnings = new List() + { + new PayrollEarning + { + EarningTypeCode = "002", + Code = "00500", + Concept = "Gratificación Anual (Aguinaldo)", + TaxedAmount = 0.00m, + ExemptAmount = 10000.00m + } + }, + OtherPayments = { } + }, + Deductions = { } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "N", + ExpeditionZipCode = "20000", + ExportCode = "01", + Issuer = issuer, + Recipient = recipient, + Complement = new Complement { Payroll = payroll }, + PaymentMethodCode = "PUE", + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button8_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Id = "da71df0c-f328-45ee-9bd9-3096ed02c164" + }; + + var payroll = new Payroll + { + Version = "1.2", + PayrollTypeCode = "E", + PaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + DaysPaid = 30, + Earnings = new PayrollEarnings + { + Earnings = new List() + { + new PayrollEarning + { + EarningTypeCode = "023", + Code = "00500", + Concept = "Pagos por separación", + TaxedAmount = 0.00m, + ExemptAmount = 10000.00m + }, + new PayrollEarning + { + EarningTypeCode = "025", + Code = "00900", + Concept = "Indemnizaciones", + TaxedAmount = 0.00m, + ExemptAmount = 500.00m + } + }, + OtherPayments = { }, + Severance = new PayrollSeverance() + { + TotalPaid = 10500.00m, + YearsOfService = 1, + LastMonthlySalary = 10000.00m, + AccumulableIncome = 10000.00m, + NonAccumulableIncome = 0.00m + } + }, + Deductions = { } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "N", + ExpeditionZipCode = "20000", + ExportCode = "01", + Issuer = issuer, + Recipient = recipient, + Complement = new Complement { Payroll = payroll }, + PaymentMethodCode = "PUE", + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button9_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Id = "da71df0c-f328-45ee-9bd9-3096ed02c164" + }; + + var payroll = new Payroll + { + Version = "1.2", + PayrollTypeCode = "E", + PaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + DaysPaid = 30, + Earnings = new PayrollEarnings + { + Earnings = new List() + { + new PayrollEarning + { + EarningTypeCode = "039", + Code = "00500", + Concept = "Jubilaciones, pensiones o haberes de retiro", + TaxedAmount = 0.00m, + ExemptAmount = 10000.00m + } + }, + OtherPayments = { }, + Retirement = new PayrollRetirement + { + TotalOneTime = 10000.00m, + AccumulableIncome = 10000.00m, + NonAccumulableIncome = 0.00m + } + }, + Deductions = { } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "N", + ExpeditionZipCode = "20000", + ExportCode = "01", + Issuer = issuer, + Recipient = recipient, + Complement = new Complement { Payroll = payroll }, + PaymentMethodCode = "PUE", + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private void PayrollComplementReferenceForm_Load(object sender, EventArgs e) + { + + } + + private async void button10_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Id = "da71df0c-f328-45ee-9bd9-3096ed02c164" + }; + + var payroll = new Payroll + { + Version = "1.2", + PayrollTypeCode = "O", + PaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + DaysPaid = 15, + Earnings = new PayrollEarnings + { + Earnings = new List() + { + new PayrollEarning + { + EarningTypeCode = "001", + Code = "00500", + Concept = "Jubilaciones, pensiones o haberes de retiro", + TaxedAmount = 2808.80m, + ExemptAmount = 2191.20m + } + }, + OtherPayments = { }, + }, + Deductions = { } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "N", + ExpeditionZipCode = "20000", + ExportCode = "01", + Issuer = issuer, + Recipient = recipient, + Complement = new Complement { Payroll = payroll }, + PaymentMethodCode = "PUE", + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button11_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Id = "da71df0c-f328-45ee-9bd9-3096ed02c164" + }; + + var payroll = new Payroll + { + Version = "1.2", + PayrollTypeCode = "O", + PaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + DaysPaid = 15, + Earnings = new PayrollEarnings + { + Earnings = new List() + { + new PayrollEarning + { + EarningTypeCode = "001", + Code = "00500", + Concept = "Sueldos, salarios rayas y jornales", + TaxedAmount = 2808.80m, + ExemptAmount = 2191.20m + } + }, + OtherPayments = new List() + { + new PayrollEarningOtherPayment + { + OtherPaymentTypeCode = "007", + Code = "002", + Concept = "ISR ajustado por subsidio", + Amount = 145.80m, + SubsidyCaused = 0.00m + } + }, + }, + Deductions = new List() + { + new PayrollDeduction + { + DeductionTypeCode = "107", + Code = "D002", + Concept = "Ajuste al subsidio causado", + Amount = 160.35m, + }, + new PayrollDeduction + { + DeductionTypeCode = "002", + Code = "D002", + Concept = "ISR", + Amount = 145.80m + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "N", + ExpeditionZipCode = "20000", + ExportCode = "01", + Issuer = issuer, + Recipient = recipient, + Complement = new Complement { Payroll = payroll }, + PaymentMethodCode = "PUE", + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button12_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Id = "da71df0c-f328-45ee-9bd9-3096ed02c164" + }; + + var payroll = new Payroll + { + Version = "1.2", + PayrollTypeCode = "O", + PaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + DaysPaid = 15, + Earnings = new PayrollEarnings + { + Earnings = new List() + { + new PayrollEarning + { + EarningTypeCode = "050", + Code = "050", + Concept = "Viáticos", + TaxedAmount = 0.00m, + ExemptAmount = 3000.00m + } + }, + OtherPayments = { }, + }, + Deductions = new List() + { + new PayrollDeduction + { + DeductionTypeCode = "081", + Code = "081", + Concept = "Ajuste en viaticos entregados al trabajador", + Amount = 3000.00m, + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "N", + ExpeditionZipCode = "20000", + ExportCode = "01", + Issuer = issuer, + Recipient = recipient, + Complement = new Complement { Payroll = payroll }, + PaymentMethodCode = "PUE", + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button13_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + var fiscalApi = FiscalApiClient.Create(_settings); + + // Emisor + var issuer = new InvoiceIssuer + { + Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Id = "da71df0c-f328-45ee-9bd9-3096ed02c164" + }; + + var payroll = new Payroll + { + Version = "1.2", + PayrollTypeCode = "O", + PaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + DaysPaid = 15, + Earnings = new PayrollEarnings + { + Earnings = new List() + { + new PayrollEarning + { + EarningTypeCode = "001", + Code = "00500", + Concept = "Sueldos, salarios rayas y jornales", + TaxedAmount = 2808.80m, + ExemptAmount = 2191.20m + } + }, + OtherPayments = { }, + }, + Deductions = new List() + { + new PayrollDeduction + { + DeductionTypeCode = "001", + Code = "00301", + Concept = "Seguridad social", + Amount = 200.00m, + }, + new PayrollDeduction + { + DeductionTypeCode = "002", + Code = "00302", + Concept = "ISR", + Amount = 100.00m + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "N", + ExpeditionZipCode = "20000", + ExportCode = "01", + Issuer = issuer, + Recipient = recipient, + Complement = new Complement { Payroll = payroll }, + PaymentMethodCode = "PUE", + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + } +} diff --git a/FiscalApi.Samples.NetFramework/PayrollComplementReferenceForm.resx b/FiscalApi.Samples.NetFramework/PayrollComplementReferenceForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/PayrollComplementReferenceForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/PayrollComplementValueForm.Designer.cs b/FiscalApi.Samples.NetFramework/PayrollComplementValueForm.Designer.cs new file mode 100644 index 0000000..472383c --- /dev/null +++ b/FiscalApi.Samples.NetFramework/PayrollComplementValueForm.Designer.cs @@ -0,0 +1,230 @@ +namespace FiscalApi.Samples.NetFramework +{ + partial class PayrollComplementValueForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.button13 = new System.Windows.Forms.Button(); + this.button12 = new System.Windows.Forms.Button(); + this.button11 = new System.Windows.Forms.Button(); + this.button10 = new System.Windows.Forms.Button(); + this.button9 = new System.Windows.Forms.Button(); + this.button8 = new System.Windows.Forms.Button(); + this.button7 = new System.Windows.Forms.Button(); + this.button6 = new System.Windows.Forms.Button(); + this.button5 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.button13); + this.groupBox1.Controls.Add(this.button12); + this.groupBox1.Controls.Add(this.button11); + this.groupBox1.Controls.Add(this.button10); + this.groupBox1.Controls.Add(this.button9); + this.groupBox1.Controls.Add(this.button8); + this.groupBox1.Controls.Add(this.button7); + this.groupBox1.Controls.Add(this.button6); + this.groupBox1.Controls.Add(this.button5); + this.groupBox1.Controls.Add(this.button4); + this.groupBox1.Controls.Add(this.button3); + this.groupBox1.Controls.Add(this.button2); + this.groupBox1.Controls.Add(this.button1); + this.groupBox1.Location = new System.Drawing.Point(13, 13); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(402, 491); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "groupBox1"; + // + // button13 + // + this.button13.Location = new System.Drawing.Point(202, 352); + this.button13.Name = "button13"; + this.button13.Size = new System.Drawing.Size(189, 60); + this.button13.TabIndex = 12; + this.button13.Text = "Factura nómina - Nómina"; + this.button13.UseVisualStyleBackColor = true; + this.button13.Click += new System.EventHandler(this.button13_Click); + // + // button12 + // + this.button12.Location = new System.Drawing.Point(202, 286); + this.button12.Name = "button12"; + this.button12.Size = new System.Drawing.Size(189, 60); + this.button12.TabIndex = 11; + this.button12.Text = "Factura nómina - Nómina viáticos"; + this.button12.UseVisualStyleBackColor = true; + this.button12.Click += new System.EventHandler(this.button12_Click); + // + // button11 + // + this.button11.Location = new System.Drawing.Point(202, 220); + this.button11.Name = "button11"; + this.button11.Size = new System.Drawing.Size(189, 60); + this.button11.TabIndex = 10; + this.button11.Text = "Factura nómina - Nómina subsidio causado al empleo"; + this.button11.UseVisualStyleBackColor = true; + this.button11.Click += new System.EventHandler(this.button11_Click); + // + // button10 + // + this.button10.Location = new System.Drawing.Point(202, 154); + this.button10.Name = "button10"; + this.button10.Size = new System.Drawing.Size(189, 60); + this.button10.TabIndex = 9; + this.button10.Text = "Factura nómina - Nómina sin deducciones"; + this.button10.UseVisualStyleBackColor = true; + this.button10.Click += new System.EventHandler(this.button10_Click); + // + // button9 + // + this.button9.Location = new System.Drawing.Point(202, 88); + this.button9.Name = "button9"; + this.button9.Size = new System.Drawing.Size(189, 60); + this.button9.TabIndex = 8; + this.button9.Text = "Factura nómina - Nómina jubilación pensión retiro"; + this.button9.UseVisualStyleBackColor = true; + this.button9.Click += new System.EventHandler(this.button9_Click); + // + // button8 + // + this.button8.Location = new System.Drawing.Point(202, 22); + this.button8.Name = "button8"; + this.button8.Size = new System.Drawing.Size(189, 60); + this.button8.TabIndex = 7; + this.button8.Text = "Factura nómina - Nómina separación indemnización"; + this.button8.UseVisualStyleBackColor = true; + this.button8.Click += new System.EventHandler(this.button8_Click); + // + // button7 + // + this.button7.Location = new System.Drawing.Point(7, 418); + this.button7.Name = "button7"; + this.button7.Size = new System.Drawing.Size(189, 60); + this.button7.TabIndex = 6; + this.button7.Text = "Factura nómina - Nómina extraordinaria"; + this.button7.UseVisualStyleBackColor = true; + this.button7.Click += new System.EventHandler(this.button7_Click); + // + // button6 + // + this.button6.Location = new System.Drawing.Point(7, 352); + this.button6.Name = "button6"; + this.button6.Size = new System.Drawing.Size(189, 60); + this.button6.TabIndex = 5; + this.button6.Text = "Factura nómina - Nómina con SNCF"; + this.button6.UseVisualStyleBackColor = true; + this.button6.Click += new System.EventHandler(this.button6_Click); + // + // button5 + // + this.button5.Location = new System.Drawing.Point(7, 286); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(189, 60); + this.button5.TabIndex = 4; + this.button5.Text = "Factura nómina - Nómina con incapacidades"; + this.button5.UseVisualStyleBackColor = true; + this.button5.Click += new System.EventHandler(this.button5_Click); + // + // button4 + // + this.button4.Location = new System.Drawing.Point(7, 220); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(189, 60); + this.button4.TabIndex = 3; + this.button4.Text = "Factura nómina - Nómina con horas extra"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.button4_Click); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(6, 154); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(189, 60); + this.button3.TabIndex = 2; + this.button3.Text = "Factura nómina - Nómina con bonos, fondo de ahorro y deducciones"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(7, 88); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(189, 60); + this.button2.TabIndex = 1; + this.button2.Text = "Factura nómina - Nómina asimilados"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(7, 22); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(189, 60); + this.button1.TabIndex = 0; + this.button1.Text = "Factura nómina - Nómina ordinaria"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // PayrollComplementForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(427, 516); + this.Controls.Add(this.groupBox1); + this.Name = "PayrollComplementForm"; + this.Text = "PayrollComplementForm"; + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Button button13; + private System.Windows.Forms.Button button12; + private System.Windows.Forms.Button button11; + private System.Windows.Forms.Button button10; + private System.Windows.Forms.Button button9; + private System.Windows.Forms.Button button8; + private System.Windows.Forms.Button button7; + private System.Windows.Forms.Button button6; + private System.Windows.Forms.Button button5; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button1; + } +} \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/PayrollComplementValueForm.cs b/FiscalApi.Samples.NetFramework/PayrollComplementValueForm.cs new file mode 100644 index 0000000..1e569e1 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/PayrollComplementValueForm.cs @@ -0,0 +1,2117 @@ +using Fiscalapi.Common; +using Fiscalapi.Models; +using Fiscalapi.Services; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FiscalApi.Samples.NetFramework +{ + public partial class PayrollComplementValueForm : Form + { + FiscalapiSettings _settings; + + + public PayrollComplementValueForm(FiscalapiSettings settings) + { + InitializeComponent(); + _settings = settings; + } + + private async void button1_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos, + EmployerData = new EmployerData + { + EmployerRegistration = "B5510768108" + } + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "FUNK671228PH6", + LegalName = "KARLA FUENTE NOLASCO", + ZipCode = "01160", + TaxRegimeCode = "605", + CfdiUseCode = "CN01", + EmployeeData = new EmployeeData + { + Curp = "XEXX010101MNEXXXA8", + SocialSecurityNumber = "04078873454", + LaborRelationStartDate = DateTime.Parse("2024-08-18"), + Seniority = "P54W", + SatContractTypeId = "01", + SatTaxRegimeTypeId = "02", + EmployeeNumber = "123456789", + Department = "GenAI", + Position = "Sr Software Engineer", + SatJobRiskId = "1", + SatPaymentPeriodicityId = "05", + SatBankId = "012", + BaseSalaryForContributions = 2828.50m, + IntegratedDailySalary = 0.00m, + SatPayrollStateId = "JAL" + }, + Email = "someone@somewhere.com" + }; + + var payroll = new Payroll + { + Version = "1.2", + PayrollTypeCode = "O", + PaymentDate = DateTime.Parse("2025-08-30"), + InitialPaymentDate = DateTime.Parse("2025-07-31"), + FinalPaymentDate = DateTime.Parse("2025-08-30"), + DaysPaid = 30, + Earnings = new PayrollEarnings + { + Earnings = new List() + { + new PayrollEarning + { + EarningTypeCode = "001", + Code = "1003", + Concept = "Sueldo Nominal", + TaxedAmount = 95030.00m, + ExemptAmount = 0.00m + }, + new PayrollEarning + { + EarningTypeCode = "005", + Code = "5913", + Concept = "Fondo de Ahorro Aportación Patrón", + TaxedAmount = 0.00m, + ExemptAmount = 4412.46m + }, + new PayrollEarning + { + EarningTypeCode = "038", + Code = "1885", + Concept = "Bono Ingles", + TaxedAmount = 14254.50m, + ExemptAmount = 0.00m + }, + new PayrollEarning + { + EarningTypeCode = "029", + Code = "1941", + Concept = "Vales Despensa", + TaxedAmount = 0.00m, + ExemptAmount = 3439.00m + }, + new PayrollEarning + { + EarningTypeCode = "038", + Code = "1824", + Concept = "Herramientas Teletrabajo (telecom y prop. electri)", + TaxedAmount = 273.00m, + ExemptAmount = 0.00m + } + }, + OtherPayments = new List() + { + new PayrollEarningOtherPayment + { + OtherPaymentTypeCode = "002", + Code = "5050", + Concept = "Exceso de subsidio al empleo", + Amount = 0.0m, + SubsidyCaused = 0.0m + } + } + }, + Deductions = new List() + { + new PayrollDeduction + { + DeductionTypeCode = "002", + Code = "5003", + Concept = "ISR Causado", + Amount = 27645.52m + }, + new PayrollDeduction + { + DeductionTypeCode = "004", + Code = "5910", + Concept = "Fondo de ahorro Empleado Inversión", + Amount = 4412.46m + }, + new PayrollDeduction + { + DeductionTypeCode = "004", + Code = "5914", + Concept = "Fondo de Ahorro Patrón Inversión", + Amount = 4412.46m + }, + new PayrollDeduction + { + DeductionTypeCode = "004", + Code = "1966", + Concept = "Contribución póliza exceso GMM", + Amount = 519.91m + }, + new PayrollDeduction + { + DeductionTypeCode = "004", + Code = "1934", + Concept = "Descuento Vales Despensa", + Amount = 1.00m + }, + new PayrollDeduction + { + DeductionTypeCode = "004", + Code = "1942", + Concept = "Vales Despensa Electrónico", + Amount = 3439.00m + }, + new PayrollDeduction + { + DeductionTypeCode = "001", + Code = "1895", + Concept = "IMSS", + Amount = 2391.13m + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "N", + ExpeditionZipCode = "20000", + Issuer = issuer, + Recipient = recipient, + Complement = new Complement { Payroll = payroll }, + PaymentMethodCode = "PUE", + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button2_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos, + EmployerData = new EmployerData + { + OriginEmployerTin = "EKU9003173C9" + } + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "CACX7605101P8", + LegalName = "XOCHILT CASAS CHAVEZ", + ZipCode = "36257", + TaxRegimeCode = "605", + CfdiUseCode = "CN01", + EmployeeData = new EmployeeData + { + Curp = "XEXX010101HNEXXXA4", + SatContractTypeId = "09", + SatUnionizedStatusId = "No", + SatTaxRegimeTypeId = "09", + EmployeeNumber = "00002", + Department = "ADMINISTRACION", + Position = "DIRECTOR DE ADMINISTRACION", + SatPaymentPeriodicityId = "99", + SatBankId = "012", + BankAccount = "1111111111", + SatPayrollStateId = "CMX" + }, + Email = "someone@somewhere.com" + }; + + var payroll = new Payroll + { + Version = "1.2", + PayrollTypeCode = "E", + PaymentDate = DateTime.Parse("2023-06-02T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-06-01T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-06-02T00:00:00"), + DaysPaid = 1, + Earnings = new PayrollEarnings + { + Earnings = new List() + { + new PayrollEarning + { + EarningTypeCode = "046", + Code = "010046", + Concept = "INGRESOS ASIMILADOS A SALARIOS", + TaxedAmount = 111197.73m, + ExemptAmount = 0.00m + } + }, + OtherPayments = new List() + }, + Deductions = new List() + { + new PayrollDeduction + { + DeductionTypeCode = "002", + Code = "020002", + Concept = "ISR", + Amount = 36197.73m + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "N", + ExpeditionZipCode = "06880", + Issuer = issuer, + Recipient = recipient, + Complement = new Complement { Payroll = payroll }, + PaymentMethodCode = "PUE", + ExportCode = "01" + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button3_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos, + EmployerData = new EmployerData + { + EmployerRegistration = "B5510768108" + } + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "XOJI740919U48", + LegalName = "INGRID XODAR JIMENEZ", + ZipCode = "76028", + TaxRegimeCode = "605", + CfdiUseCode = "CN01", + EmployeeData = new EmployeeData + { + Curp = "XEXX010101MNEXXXA8", + SocialSecurityNumber = "0000000000", + LaborRelationStartDate = DateTime.Parse("2022-03-02T00:00:00"), + Seniority = "P66W", + SatContractTypeId = "01", + SatUnionizedStatusId = "No", + SatTaxRegimeTypeId = "02", + EmployeeNumber = "123456789", + Department = "GenAI", + Position = "Sr Software Engineer", + SatJobRiskId = "1", + SatPaymentPeriodicityId = "02", + SatBankId = "012", + BaseSalaryForContributions = 2828.50m, + IntegratedDailySalary = 2460.23m, + SatPayrollStateId = "GUA" + }, + Email = "someone@somewhere.com" + }; + + var items = new List + { + new InvoiceItem + { + ItemCode = "84111505", + ItemSku = "84111505", + Quantity = 1.00m, + UnitOfMeasurementCode = "ACT", + Description = " Pago de nómina", + UnitPrice = 1842.82m, + Discount = 608.71m, + TaxObjectCode = "01" + } + }; + + var payroll = new Payroll + { + Version = "1.2", + PayrollTypeCode = "O", + PaymentDate = DateTime.Parse("2023-06-11T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-06-05T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-06-11T00:00:00"), + DaysPaid = 7, + Earnings = new PayrollEarnings + { + Earnings = new List() + { + new PayrollEarning + { + EarningTypeCode = "001", + Code = "SP01", + Concept = "Sueldo Nominal", + TaxedAmount = 1210.30m, + ExemptAmount = 0.00m + }, + new PayrollEarning + { + EarningTypeCode = "010", + Code = "SP02", + Concept = "Premio de puntualidad", + TaxedAmount = 121.03m, + ExemptAmount = 0.00m + }, + new PayrollEarning + { + EarningTypeCode = "029", + Code = "SP03", + Concept = "Monedero electrónico", + TaxedAmount = 00.00m, + ExemptAmount = 269.43m + }, + new PayrollEarning + { + EarningTypeCode = "010", + Code = "SP04", + Concept = "Premio de asistencia", + TaxedAmount = 121.03m, + ExemptAmount = 00.00m + }, + new PayrollEarning + { + EarningTypeCode = "005", + Code = "SP54", + Concept = "Aportación fondo de ahorro", + TaxedAmount = 0.00m, + ExemptAmount = 121.03m + } + }, + OtherPayments = new List() + { + new PayrollEarningOtherPayment + { + OtherPaymentTypeCode = "002", + Code = "ISRSUB", + Concept = "Exceso de subsidio al empleo", + Amount = 0.0m, + SubsidyCaused = 0.0m, + BalanceCompensation = new BalanceCompensation + { + FavorableBalance = 0.00m, + Year = 2022, + RemainingFavorableBalance = 0.00m + } + } + } + }, + Deductions = new List() + { + new PayrollDeduction + { + DeductionTypeCode = "004", + Code = "ZA09", + Concept = "Aportación fondo de ahorro", + Amount = 121.03m + }, + new PayrollDeduction + { + DeductionTypeCode = "002", + Code = "ISR", + Concept = "ISR", + Amount = 36.57m + }, + new PayrollDeduction + { + DeductionTypeCode = "001", + Code = "IMSS", + Concept = "Cuota de seguridad social EE", + Amount = 30.08m + }, + new PayrollDeduction + { + DeductionTypeCode = "004", + Code = "ZA68", + Concept = "Deducción fondo de ahorro patrón", + Amount = 121.03m + }, + new PayrollDeduction + { + DeductionTypeCode = "018", + Code = "ZA11", + Concept = "Aportación caja de ahorro", + Amount = 300.00m + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "N", + ExpeditionZipCode = "20000", + ExportCode = "01", + Issuer = issuer, + Recipient = recipient, + Items = items, + Complement = new Complement { Payroll = payroll }, + PaymentMethodCode = "PUE", + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button4_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos, + EmployerData = new EmployerData + { + EmployerRegistration = "B5510768108", + OriginEmployerTin = "URE180429TM6" + } + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "XOJI740919U48", + LegalName = "INGRID XODAR JIMENEZ", + ZipCode = "76028", + TaxRegimeCode = "605", + CfdiUseCode = "CN01", + EmployeeData = new EmployeeData + { + Curp = "XEXX010101HNEXXXA4", + SocialSecurityNumber = "0000000000", + LaborRelationStartDate = DateTime.Parse("2015-01-01T00:00:00"), + Seniority = "P437W", + SatContractTypeId = "01", + SatWorkdayTypeId = "01", + SatTaxRegimeTypeId = "03", + EmployeeNumber = "120", + Department = "Desarrollo", + Position = "Ingeniero de software", + SatJobRiskId = "1", + SatPaymentPeriodicityId = "04", + SatBankId = "002", + BaseSalaryForContributions = 490.22m, + IntegratedDailySalary = 146.47m, + SatPayrollStateId = "JAL" + }, + Email = "someone@somewhere.com" + }; + + var payroll = new Payroll + { + Version = "1.2", + PayrollTypeCode = "O", + PaymentDate = DateTime.Parse("2023-05-24T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-05-09T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-05-24T00:00:00"), + DaysPaid = 15, + Earnings = new PayrollEarnings + { + Earnings = new List() + { + new PayrollEarning + { + EarningTypeCode = "001", + Code = "00500", + Concept = "Sueldos, Salarios Rayas y Jornales", + TaxedAmount = 2808.80m, + ExemptAmount = 2191.20m + }, + new PayrollEarning + { + EarningTypeCode = "019", + Code = "00100", + Concept = "Horas extra", + TaxedAmount = 50.00m, + ExemptAmount = 50.00m, + Overtime = new List + { + new PayrollEarningOvertime + { + Days = 1, + HoursTypeCode = "01", + ExtraHours = 2, + AmountPaid = 100.00m + } + } + } + }, + OtherPayments = { } + }, + Deductions = new List() + { + new PayrollDeduction + { + DeductionTypeCode = "001", + Code = "00301", + Concept = "Seguridad social", + Amount = 200.00m + }, + new PayrollDeduction + { + DeductionTypeCode = "002", + Code = "00302", + Concept = "ISR", + Amount = 100.00m + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "N", + ExpeditionZipCode = "20000", + ExportCode = "01", + Issuer = issuer, + Recipient = recipient, + Complement = new Complement { Payroll = payroll }, + PaymentMethodCode = "PUE", + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button5_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos, + EmployerData = new EmployerData + { + EmployerRegistration = "B5510768108", + OriginEmployerTin = "URE180429TM6" + } + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "XOJI740919U48", + LegalName = "INGRID XODAR JIMENEZ", + ZipCode = "76028", + TaxRegimeCode = "605", + CfdiUseCode = "CN01", + EmployeeData = new EmployeeData + { + Curp = "XEXX010101HNEXXXA4", + SocialSecurityNumber = "0000000000", + LaborRelationStartDate = DateTime.Parse("2015-01-01T00:00:00"), + Seniority = "P437W", + SatContractTypeId = "01", + SatWorkdayTypeId = "01", + SatTaxRegimeTypeId = "03", + EmployeeNumber = "120", + Department = "Desarrollo", + Position = "Ingeniero de software", + SatJobRiskId = "1", + SatPaymentPeriodicityId = "04", + SatBankId = "002", + BankAccount = "1111111111", + BaseSalaryForContributions = 490.22m, + IntegratedDailySalary = 146.47m, + SatPayrollStateId = "JAL" + }, + Email = "someone@somewhere.com" + }; + + var payroll = new Payroll + { + Version = "1.2", + PayrollTypeCode = "O", + PaymentDate = DateTime.Parse("2023-05-24T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-05-09T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-05-24T00:00:00"), + DaysPaid = 15, + Earnings = new PayrollEarnings + { + Earnings = new List() + { + new PayrollEarning + { + EarningTypeCode = "001", + Code = "00500", + Concept = "Sueldos, Salarios Rayas y Jornales", + TaxedAmount = 2808.80m, + ExemptAmount = 2191.20m + } + }, + OtherPayments = { } + }, + Deductions = new List() + { + new PayrollDeduction + { + DeductionTypeCode = "001", + Code = "00301", + Concept = "Seguridad social", + Amount = 200.00m + }, + new PayrollDeduction + { + DeductionTypeCode = "002", + Code = "00302", + Concept = "ISR", + Amount = 100.00m + } + }, + Disabilities = new List() + { + new PayrollDisability + { + DisabilityDays = 1, + DisabilityTypeCode = "01" + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "N", + ExpeditionZipCode = "20000", + ExportCode = "01", + Issuer = issuer, + Recipient = recipient, + Complement = new Complement { Payroll = payroll }, + PaymentMethodCode = "PUE", + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button6_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIF1DCCA7ygAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MzkwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTI1NTE2WhcNMjcwNTE4MTI1NTE2WjCB+zEzMDEGA1UEAxQqT1JHQU5JQ09TINFBVkVaIE9TT1JJTyBTLkEgREUgQy5WIFNBIERFIENWMTMwMQYDVQQpFCpPUkdBTklDT1Mg0UFWRVogT1NPUklPIFMuQSBERSBDLlYgU0EgREUgQ1YxMzAxBgNVBAoUKk9SR0FOSUNPUyDRQVZFWiBPU09SSU8gUy5BIERFIEMuViBTQSBERSBDVjElMCMGA1UELRQcT9FPMTIwNzI2UlgzIC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlAF4PoRqITQAEjFBzzfiT/NSN2yvb7Iv1ZMe4qD7tBxBxazRCx+GnimfpR+eaM744RlRDUj+hZfWcsOMn+q65UEIP+Xq5V1NbO1LZDse9uG1fLLSmptfKjyfvTtmBNYBjC3G6YmRv5qVw81CIS4aQOSMXKD+lrxjmRUhV9EAtXVoqGxvyDKeeX4caKuRz8mlrnR8/SMbnpobe5BNoXPrpDbEypemiJXe40pjsltY0RV3b0W0JtJQABUwZ9xn0lPYHY2q7IxYfohibv+o9ldXOXY6tivBZFfbGQSUp7CevC55+Y6uqh35Pi1o0nt/vBVgUOVPNM8d4TvGbXsE0G2J7QIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFp52XykMXfFUtjQqA2zzLPrPIDSMEpkm1vWY0qfz2gC2TlVpbDCWH2vFHpP8D14OifXOmYkws2cvLyE0uBN6se4zXxVHBpTEq+93rvu/tjvMU6r7DISDwB0EX5kmKIFcOugET3/Eq1mxZ6mrI0K26RaEUz+HVyR0EQ2Ll5CLExDkPYV/am0gynhn6QPkxPNbcbm77PEIbH7zc+t7ZB5sgQ6LnubgnKNZDn8bNhkuM1jqFkh7h0owhlJrOvATgrDSLnrot8FoLFkrWQD4uA5udGRwXn5QWx0QM5ScNiSgSRilSFEyXn6rH/CJLO05Sx5OwJJTaxFbAyOXnoNdPMzbQAziaW78478nCNZVSrKWpjwWpScirtM2zcQ9fywd/a3CG66Ff29zasfhHJCp29TIjj1OURp6l1CKc16+UxjuVJ1z5Xh7v3s8S2gtmuYP1sUXPvAEYuVp9CFW87QVMtl3+nGlyJEzSAW/yaps9ua5RmyJK0Mjk1zyXjOJoIY75CIOMN8oqVAxmLJg5XftXJSekGpxybw9aq9qOJdmxVcZoAFaYg4MAdKViBoYxfWfEm4q/ihRz4asnzLp9NJWTXN1YH94rJrK7JSEq820flgr1kiL7z7n1rgWMvhJH9nHriG3yRkno/8OdLJxOSXd7MKZfZx0EWDX8toqWyE7zia8aPM=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS8AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucRFLOMmsAaFFEdAecnfgJf0IlyJpvyNOGiSwXgY6uZtS0QJmmupWTlQATxbN4xeN7csx7yCMYxMiWXLyTbjVIWzzsFVKHbsxCudz6UDqMZ3aXEEPDDbPECXJC4FxqzuUgifN4QQuIvxfPbk23m3Vtqu9lr/xMrDNqLZ4RiqY2062kgQzGzekq8CSC97qBAbb8SFMgakFjeHN0JiTGaTpYCpGbu4d+i3ZrQ0mlYkxesdvCLqlCwVM0RTMJsNQ8vpBpRDzH372iOTLCO/gXtV8pEsxpUzG9LSUBo7xSMd1/lcfdyqVgnScgUm8/+toxk6uwZkUMWWvp7tqrMYQFYdR5CjiZjgAWrNorgMmawBqkJU6KQO/CpXVn99U1fANPfQoeyQMgLt35k0JKynG8MuWsgb4EG9Z6sRmOsCQQDDMKwhBjqcbEwN2dL4f1HyN8wklFCyYy6j1NTKU2AjRMXVu4+OlAp5jpjgv08RQxEkW/tNMSSBcpvOzNr64u0M692VA2fThR3UMQ/MZ2yVM6yY3GgIu2tJmg08lhmkoLpWZIMy7bZjj/AEbi7B3wSF4vDYZJcr/Djeezm3MMSghoiOIRSqtBjwf7ZjhA2ymdCsrzy7XSMVekT0y1S+ew1WhnzUNKQSucb6V2yRwNbm0EyeEuvVyHgiGEzCrzNbNHCfoFr69YCUi8itiDfiV7/p7LJzD8J/w85nmOkI/9p+aZ2EyaOdThqBmN4CtoDi5ixz/1EElLn7KVI4d/DZsZ4ZMu76kLAy94o0m6ORSbHX5hw12+P5DgGaLu/Dxd9cctRCkvcUdagiECuKGLJpxTJvEBQoZqUB8AJFgwKcNLl3Z5KAWL5hV0t1h8i3N4HllygqpfUSQMLWCtlGwdI4XGlGI5CmnjrL2Uj8sj9C0zSNqZVnAXFMV9f2ND9W6YJqfU89BQ6Y4QQRMGjXcVF7c78bn5r6zI+Qv2QKm3YiGCfuIa64B+PB/BdithpOuBPn5X5Zxc8ju/kYjJk7sau7VtKJseGOJ1bqOq99VzaxoHjzoJgthLHtni9WtGAnnQy7GMWGW4Un2yObHCxvQxx/rIZEaQiCGfRXOcZIZuXBe5xeHJFGrekDxu3YyumEnLWvsirDF3qhpUtxqvbkTuZw2xT3vTR+oWZpSEnYTd3k/09Eb0ovOPLkbhvcvCEeoI91EJvU+KI4Lm7ZsuTUSpECrHiS3uPOjboCigOWGayKzUHUICNrGK0zxgZXhhl6V7y9pImRl34ID/tZhr3veW4pQKgscv6sQjGJzaph2oCP7uZC6arGWcFpc2pgfBcobmOXYPWKskU3eWKClHBJnJ8MoOru+ObOb+izPhINHOmzP26TnKzFxdZiL+onxjadPYslcLtqlmOYpb/5hHgGOvitLhCLHCp0gYNB2uzj0sVxNs3k7k43KrlO5L6gp1KVaIw2a1yZzOCqDWWcePfKM3Mii9JdVyfHZLRRjFCQiOYo41AltHU+9IcaoT4J/j7pKw5tnlu2VaMlnN0dISpoq/ak0m4YjTd3XdRQeH9ktWmclkc65LdLKf9hIqjVqvOhQUJYkuT7OPgr+o7Z9BnClXMz1/CYWftwQE=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "OÑO120726RX3", + LegalName = "ORGANICOS ÑAVEZ OSORIO", + TaxRegimeCode = "601", + TaxCredentials = sellos, + EmployerData = new EmployerData + { + EmployerRegistration = "27112029", + SatFundSourceId = "IP" + } + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "CACX7605101P8", + LegalName = "XOCHILT CASAS CHAVEZ", + ZipCode = "36257", + TaxRegimeCode = "605", + CfdiUseCode = "CN01", + EmployeeData = new EmployeeData + { + Curp = "XEXX010101HNEXXXA4", + SocialSecurityNumber = "80997742673", + LaborRelationStartDate = DateTime.Parse("2021-09-01"), + Seniority = "P88W", + SatContractTypeId = "01", + SatTaxRegimeTypeId = "02", + EmployeeNumber = "273", + Department = "GenAI", + Position = "Sr Software Engineer", + SatJobRiskId = "1", + SatPaymentPeriodicityId = "04", + SatBankId = "012", + IntegratedDailySalary = 221.48m, + SatPayrollStateId = "GRO" + }, + Email = "someone@somewhere.com" + }; + + var payroll = new Payroll + { + Version = "1.2", + PayrollTypeCode = "O", + PaymentDate = DateTime.Parse("2023-05-16T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-05-01T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-05-16T00:00:00"), + DaysPaid = 15, + Earnings = new PayrollEarnings + { + Earnings = new List() + { + new PayrollEarning + { + EarningTypeCode = "001", + Code = "P01", + Concept = "Sueldos, Salarios Rayas y Jornales", + TaxedAmount = 3322.00m, + ExemptAmount = 0.00m + }, + new PayrollEarning + { + EarningTypeCode = "038", + Code = "P540", + Concept = "Compensación", + TaxedAmount = 100.00m, + ExemptAmount = 0.00m + }, + new PayrollEarning + { + EarningTypeCode = "038", + Code = "P550", + Concept = "Compensación Garantizada Extraordinaria", + TaxedAmount = 2200.00m, + ExemptAmount = 0.00m + }, + new PayrollEarning + { + EarningTypeCode = "038", + Code = "P530", + Concept = "Servicio extraordinario", + TaxedAmount = 200.00m, + ExemptAmount = 0.00m + }, + new PayrollEarning + { + EarningTypeCode = "001", + Code = "P506", + Concept = "Otras prestaciones", + TaxedAmount = 1500.00m, + ExemptAmount = 0.00m + }, + new PayrollEarning + { + EarningTypeCode = "001", + Code = "P505", + Concept = "Remuneración del desempeño legislativo", + TaxedAmount = 17500.00m, + ExemptAmount = 0.00m + } + }, + OtherPayments = new List() + { + new PayrollEarningOtherPayment + { + OtherPaymentTypeCode = "002", + Code = "002", + Concept = "Exceso de subsidio al empleo", + Amount = 0.0m, + SubsidyCaused = 0.0m + } + } + }, + Deductions = new List() + { + new PayrollDeduction + { + DeductionTypeCode = "002", + Code = "D002", + Concept = "ISR", + Amount = 4716.61m + }, + new PayrollDeduction + { + DeductionTypeCode = "004", + Code = "D525", + Concept = "Redondeo", + Amount = 0.81m + }, + new PayrollDeduction + { + DeductionTypeCode = "001", + Code = "D510", + Concept = "Cuota Trabajador ISSSTE", + Amount = 126.78m + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "N", + ExpeditionZipCode = "39074", + Issuer = issuer, + Recipient = recipient, + Complement = new Complement { Payroll = payroll }, + PaymentMethodCode = "PUE", + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button7_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos, + EmployerData = new EmployerData + { + EmployerRegistration = "B5510768108", + OriginEmployerTin = "URE180429TM6" + } + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "XOJI740919U48", + LegalName = "INGRID XODAR JIMENEZ", + ZipCode = "76028", + TaxRegimeCode = "605", + CfdiUseCode = "CN01", + EmployeeData = new EmployeeData + { + Curp = "XEXX010101HNEXXXA4", + SocialSecurityNumber = "000000", + LaborRelationStartDate = DateTime.Parse("2015-01-01T00:00:00"), + Seniority = "P439W", + SatContractTypeId = "01", + SatWorkdayTypeId = "03", + SatTaxRegimeTypeId = "03", + EmployeeNumber = "120", + Department = "Desarrollo", + Position = "Ingeniero de software", + SatJobRiskId = "1", + SatPaymentPeriodicityId = "99", + SatBankId = "002", + BaseSalaryForContributions = 146.47m, + IntegratedDailySalary = 148.23m, + SatPayrollStateId = "JAL" + }, + Email = "someone@somewhere.com" + }; + + var payroll = new Payroll + { + Version = "1.2", + PayrollTypeCode = "E", + PaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + DaysPaid = 30, + Earnings = new PayrollEarnings + { + Earnings = new List() + { + new PayrollEarning + { + EarningTypeCode = "002", + Code = "00500", + Concept = "Gratificación Anual (Aguinaldo)", + TaxedAmount = 0.00m, + ExemptAmount = 10000.00m + } + }, + OtherPayments = { } + }, + Deductions = { } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "N", + ExpeditionZipCode = "20000", + ExportCode = "01", + Issuer = issuer, + Recipient = recipient, + Complement = new Complement { Payroll = payroll }, + PaymentMethodCode = "PUE", + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button8_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos, + EmployerData = new EmployerData + { + EmployerRegistration = "B5510768108", + OriginEmployerTin = "URE180429TM6" + } + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "XOJI740919U48", + LegalName = "INGRID XODAR JIMENEZ", + ZipCode = "76028", + TaxRegimeCode = "605", + CfdiUseCode = "CN01", + EmployeeData = new EmployeeData + { + Curp = "XEXX010101HNEXXXA4", + SocialSecurityNumber = "0000000000", + LaborRelationStartDate = DateTime.Parse("2015-01-01T00:00:00"), + Seniority = "P439W", + SatContractTypeId = "01", + SatWorkdayTypeId = "03", + SatTaxRegimeTypeId = "03", + EmployeeNumber = "120", + Department = "Desarrollo", + Position = "Ingeniero de software", + SatJobRiskId = "1", + SatPaymentPeriodicityId = "99", + SatBankId = "002", + BaseSalaryForContributions = 146.47m, + IntegratedDailySalary = 148.23m, + SatPayrollStateId = "JAL" + }, + Email = "someone@somewhere.com" + }; + + var payroll = new Payroll + { + Version = "1.2", + PayrollTypeCode = "E", + PaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + DaysPaid = 30, + Earnings = new PayrollEarnings + { + Earnings = new List() + { + new PayrollEarning + { + EarningTypeCode = "023", + Code = "00500", + Concept = "Pagos por separación", + TaxedAmount = 0.00m, + ExemptAmount = 10000.00m + }, + new PayrollEarning + { + EarningTypeCode = "025", + Code = "00900", + Concept = "Indemnizaciones", + TaxedAmount = 0.00m, + ExemptAmount = 500.00m + } + }, + OtherPayments = { }, + Severance = new PayrollSeverance() + { + TotalPaid = 10500.00m, + YearsOfService = 1, + LastMonthlySalary = 10000.00m, + AccumulableIncome = 10000.00m, + NonAccumulableIncome = 0.00m + } + }, + Deductions = { } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "N", + ExpeditionZipCode = "20000", + ExportCode = "01", + Issuer = issuer, + Recipient = recipient, + Complement = new Complement { Payroll = payroll }, + PaymentMethodCode = "PUE", + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button9_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos, + EmployerData = new EmployerData + { + EmployerRegistration = "B5510768108", + OriginEmployerTin = "URE180429TM6" + } + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "XOJI740919U48", + LegalName = "INGRID XODAR JIMENEZ", + ZipCode = "76028", + TaxRegimeCode = "605", + CfdiUseCode = "CN01", + EmployeeData = new EmployeeData + { + Curp = "XEXX010101HNEXXXA4", + SocialSecurityNumber = "0000000000", + LaborRelationStartDate = DateTime.Parse("2015-01-01T00:00:00"), + Seniority = "P439W", + SatContractTypeId = "01", + SatWorkdayTypeId = "03", + SatTaxRegimeTypeId = "03", + EmployeeNumber = "120", + Department = "Desarrollo", + Position = "Ingeniero de software", + SatJobRiskId = "1", + SatPaymentPeriodicityId = "99", + SatBankId = "002", + BaseSalaryForContributions = 146.47m, + IntegratedDailySalary = 148.23m, + SatPayrollStateId = "JAL" + }, + Email = "someone@somewhere.com" + }; + + var payroll = new Payroll + { + Version = "1.2", + PayrollTypeCode = "E", + PaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + DaysPaid = 30, + Earnings = new PayrollEarnings + { + Earnings = new List() + { + new PayrollEarning + { + EarningTypeCode = "039", + Code = "00500", + Concept = "Jubilaciones, pensiones o haberes de retiro", + TaxedAmount = 0.00m, + ExemptAmount = 10000.00m + } + }, + OtherPayments = { }, + Retirement = new PayrollRetirement + { + TotalOneTime = 10000.00m, + AccumulableIncome = 10000.00m, + NonAccumulableIncome = 0.00m + } + }, + Deductions = { } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "N", + ExpeditionZipCode = "20000", + ExportCode = "01", + Issuer = issuer, + Recipient = recipient, + Complement = new Complement { Payroll = payroll }, + PaymentMethodCode = "PUE", + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button10_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos, + EmployerData = new EmployerData + { + EmployerRegistration = "B5510768108", + OriginEmployerTin = "URE180429TM6" + } + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "XOJI740919U48", + LegalName = "INGRID XODAR JIMENEZ", + ZipCode = "76028", + TaxRegimeCode = "605", + CfdiUseCode = "CN01", + EmployeeData = new EmployeeData + { + Curp = "XEXX010101HNEXXXA4", + SocialSecurityNumber = "0000000000", + LaborRelationStartDate = DateTime.Parse("2015-01-01T00:00:00"), + Seniority = "P439W", + SatContractTypeId = "01", + SatWorkdayTypeId = "03", + SatTaxRegimeTypeId = "03", + EmployeeNumber = "120", + Department = "Desarrollo", + Position = "Ingeniero de software", + SatJobRiskId = "1", + SatPaymentPeriodicityId = "04", + SatBankId = "002", + BankAccount = "1111111111", + BaseSalaryForContributions = 490.22m, + IntegratedDailySalary = 146.47m, + SatPayrollStateId = "JAL" + }, + Email = "someone@somewhere.com" + }; + + var payroll = new Payroll + { + Version = "1.2", + PayrollTypeCode = "O", + PaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + DaysPaid = 15, + Earnings = new PayrollEarnings + { + Earnings = new List() + { + new PayrollEarning + { + EarningTypeCode = "001", + Code = "00500", + Concept = "Jubilaciones, pensiones o haberes de retiro", + TaxedAmount = 2808.80m, + ExemptAmount = 2191.20m + } + }, + OtherPayments = { }, + }, + Deductions = { } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "N", + ExpeditionZipCode = "20000", + ExportCode = "01", + Issuer = issuer, + Recipient = recipient, + Complement = new Complement { Payroll = payroll }, + PaymentMethodCode = "PUE", + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button11_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos, + EmployerData = new EmployerData + { + EmployerRegistration = "B5510768108", + OriginEmployerTin = "URE180429TM6" + } + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "XOJI740919U48", + LegalName = "INGRID XODAR JIMENEZ", + ZipCode = "76028", + TaxRegimeCode = "605", + CfdiUseCode = "CN01", + EmployeeData = new EmployeeData + { + Curp = "XEXX010101HNEXXXA4", + SocialSecurityNumber = "0000000000", + LaborRelationStartDate = DateTime.Parse("2015-01-01T00:00:00"), + Seniority = "P437W", + SatContractTypeId = "01", + SatWorkdayTypeId = "01", + SatTaxRegimeTypeId = "02", + EmployeeNumber = "120", + Department = "Desarrollo", + Position = "Ingeniero de software", + SatJobRiskId = "1", + SatPaymentPeriodicityId = "04", + SatBankId = "002", + BankAccount = "1111111111", + BaseSalaryForContributions = 490.22m, + IntegratedDailySalary = 146.47m, + SatPayrollStateId = "JAL" + }, + Email = "someone@somewhere.com" + }; + + var payroll = new Payroll + { + Version = "1.2", + PayrollTypeCode = "O", + PaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + DaysPaid = 15, + Earnings = new PayrollEarnings + { + Earnings = new List() + { + new PayrollEarning + { + EarningTypeCode = "001", + Code = "00500", + Concept = "Sueldos, salarios rayas y jornales", + TaxedAmount = 2808.80m, + ExemptAmount = 2191.20m + } + }, + OtherPayments = new List() + { + new PayrollEarningOtherPayment + { + OtherPaymentTypeCode = "007", + Code = "002", + Concept = "ISR ajustado por subsidio", + Amount = 145.80m, + SubsidyCaused = 0.00m + } + }, + }, + Deductions = new List() + { + new PayrollDeduction + { + DeductionTypeCode = "107", + Code = "D002", + Concept = "Ajuste al subsidio causado", + Amount = 160.35m, + }, + new PayrollDeduction + { + DeductionTypeCode = "002", + Code = "D002", + Concept = "ISR", + Amount = 145.80m + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "N", + ExpeditionZipCode = "20000", + ExportCode = "01", + Issuer = issuer, + Recipient = recipient, + Complement = new Complement { Payroll = payroll }, + PaymentMethodCode = "PUE", + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button12_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos, + EmployerData = new EmployerData + { + EmployerRegistration = "B5510768108", + OriginEmployerTin = "URE180429TM6" + } + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "XOJI740919U48", + LegalName = "INGRID XODAR JIMENEZ", + ZipCode = "76028", + TaxRegimeCode = "605", + CfdiUseCode = "CN01", + EmployeeData = new EmployeeData + { + Curp = "XEXX010101HNEXXXA4", + SocialSecurityNumber = "0000000000", + LaborRelationStartDate = DateTime.Parse("2015-01-01T00:00:00"), + Seniority = "P439W", + SatContractTypeId = "01", + SatWorkdayTypeId = "03", + SatTaxRegimeTypeId = "03", + EmployeeNumber = "120", + Department = "Desarrollo", + Position = "Ingeniero de software", + SatJobRiskId = "1", + SatPaymentPeriodicityId = "04", + SatBankId = "002", + BankAccount = "1111111111", + BaseSalaryForContributions = 490.22m, + IntegratedDailySalary = 146.47m, + SatPayrollStateId = "JAL" + }, + Email = "someone@somewhere.com" + }; + + var payroll = new Payroll + { + Version = "1.2", + PayrollTypeCode = "O", + PaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + DaysPaid = 15, + Earnings = new PayrollEarnings + { + Earnings = new List() + { + new PayrollEarning + { + EarningTypeCode = "050", + Code = "050", + Concept = "Viáticos", + TaxedAmount = 0.00m, + ExemptAmount = 3000.00m + } + }, + OtherPayments = {}, + }, + Deductions = new List() + { + new PayrollDeduction + { + DeductionTypeCode = "081", + Code = "081", + Concept = "Ajuste en viaticos entregados al trabajador", + Amount = 3000.00m, + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "N", + ExpeditionZipCode = "20000", + ExportCode = "01", + Issuer = issuer, + Recipient = recipient, + Complement = new Complement { Payroll = payroll }, + PaymentMethodCode = "PUE", + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + + private async void button13_Click(object sender, EventArgs e) + { + // https://docs.fiscalapi.com/credentials-info + + var fiscalApi = FiscalApiClient.Create(_settings); + + // Crear certificados de prueba (EKU9003173C9) + var sellos = new List() + { + new TaxCredential + { + Base64File = + "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=", + FileType = FileType.CertificateCsd, + Password = "12345678a" + }, + new TaxCredential + { + Base64File = + "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo=", + FileType = FileType.PrivateKeyCsd, + Password = "12345678a" + } + }; + + // Emisor + var issuer = new InvoiceIssuer + { + Tin = "EKU9003173C9", + LegalName = "ESCUELA KEMPER URGATE", + TaxRegimeCode = "601", + TaxCredentials = sellos, + EmployerData = new EmployerData + { + EmployerRegistration = "B5510768108", + OriginEmployerTin = "URE180429TM6" + } + }; + + // Receptor + var recipient = new InvoiceRecipient + { + Tin = "XOJI740919U48", + LegalName = "INGRID XODAR JIMENEZ", + ZipCode = "76028", + TaxRegimeCode = "605", + CfdiUseCode = "CN01", + EmployeeData = new EmployeeData + { + Curp = "XEXX010101HNEXXXA4", + SocialSecurityNumber = "0000000000", + LaborRelationStartDate = DateTime.Parse("2015-01-01T00:00:00"), + Seniority = "P437W", + SatContractTypeId = "01", + SatWorkdayTypeId = "01", + SatTaxRegimeTypeId = "03", + EmployeeNumber = "120", + Department = "Desarrollo", + Position = "Ingeniero de software", + SatJobRiskId = "1", + SatPaymentPeriodicityId = "04", + SatBankId = "002", + BankAccount = "1111111111", + BaseSalaryForContributions = 490.22m, + IntegratedDailySalary = 146.47m, + SatPayrollStateId = "JAL" + }, + Email = "someone@somewhere.com" + }; + + var payroll = new Payroll + { + Version = "1.2", + PayrollTypeCode = "O", + PaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + DaysPaid = 15, + Earnings = new PayrollEarnings + { + Earnings = new List() + { + new PayrollEarning + { + EarningTypeCode = "001", + Code = "00500", + Concept = "Sueldos, salarios rayas y jornales", + TaxedAmount = 2808.80m, + ExemptAmount = 2191.20m + } + }, + OtherPayments = { }, + }, + Deductions = new List() + { + new PayrollDeduction + { + DeductionTypeCode = "001", + Code = "00301", + Concept = "Seguridad social", + Amount = 200.00m, + }, + new PayrollDeduction + { + DeductionTypeCode = "002", + Code = "00302", + Concept = "ISR", + Amount = 100.00m + } + } + }; + + // Crear la factura + var invoice = new Invoice + { + VersionCode = "4.0", + Series = "SDK-F", + Date = DateTime.Now, + CurrencyCode = "MXN", + TypeCode = "N", + ExpeditionZipCode = "20000", + ExportCode = "01", + Issuer = issuer, + Recipient = recipient, + Complement = new Complement { Payroll = payroll }, + PaymentMethodCode = "PUE", + }; + + // Timbrar la factura + var apiResponse = await fiscalApi.Invoices.CreateAsync(invoice); + + + if (apiResponse.Succeeded) + { + // Guardar el XML de la factura + var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); + File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); + + MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + } + else + { + MessageBox.Show(apiResponse.Message); + MessageBox.Show(apiResponse.Details); + } + } + } +} diff --git a/FiscalApi.Samples.NetFramework/PayrollComplementValueForm.resx b/FiscalApi.Samples.NetFramework/PayrollComplementValueForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/PayrollComplementValueForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FiscalApi.Samples.NetFramework/StringUtils.cs b/FiscalApi.Samples.NetFramework/StringUtils.cs new file mode 100644 index 0000000..d5262c3 --- /dev/null +++ b/FiscalApi.Samples.NetFramework/StringUtils.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FiscalApi.Samples.NetFramework +{ + public class StringUtils + { + } +} From f1fc924848cab678c52025ddf60f44443d05575c Mon Sep 17 00:00:00 2001 From: Jose Antonio Medina Date: Sun, 25 Jan 2026 00:59:33 -0600 Subject: [PATCH 2/2] updated sdk version --- .../CreditNoteInvoiceValueForm.cs | 10 +--- .../DownloadRequestsForm.cs | 7 --- .../DownloadRulesForm.cs | 8 --- .../EgressInvoiceReferenceForm.Designer.cs | 2 +- .../EgressInvoiceReferenceForm.cs | 5 -- .../EgressInvoiceValueForm.Designer.cs | 38 +++++++------- .../EgressInvoiceValueForm.cs | 12 ++--- .../EmployeeForm.cs | 11 +---- .../EmployerForm.cs | 10 +--- .../FiscalApi.Samples.NetFramework.csproj | 6 +-- FiscalApi.Samples.NetFramework/Form1.cs | 5 +- .../IncomeInvoiceReferenceForm.cs | 6 --- .../IncomeInvoiceValueForm.cs | 44 +++++++---------- .../InvoiceReferenceForm.cs | 8 --- .../InvoiceValueForm.cs | 16 ++---- .../LocalTaxesComplementReferenceForm.cs | 5 -- .../LocalTaxesComplementValueForm.cs | 5 -- .../PaymentComplementInvoiceReferenceForm.cs | 5 -- .../PaymentComplementInvoiceValueForm.cs | 44 ++++++++--------- .../PayrollComplementReferenceForm.cs | 49 +++++++++---------- .../PayrollComplementValueForm.cs | 32 ++++++------ .../packages.config | 2 +- 22 files changed, 114 insertions(+), 216 deletions(-) diff --git a/FiscalApi.Samples.NetFramework/CreditNoteInvoiceValueForm.cs b/FiscalApi.Samples.NetFramework/CreditNoteInvoiceValueForm.cs index 4e174ec..1c5e7d9 100644 --- a/FiscalApi.Samples.NetFramework/CreditNoteInvoiceValueForm.cs +++ b/FiscalApi.Samples.NetFramework/CreditNoteInvoiceValueForm.cs @@ -1,12 +1,4 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; +using System.Windows.Forms; namespace FiscalApi.Samples.NetFramework { diff --git a/FiscalApi.Samples.NetFramework/DownloadRequestsForm.cs b/FiscalApi.Samples.NetFramework/DownloadRequestsForm.cs index 3748ab1..ffd7c10 100644 --- a/FiscalApi.Samples.NetFramework/DownloadRequestsForm.cs +++ b/FiscalApi.Samples.NetFramework/DownloadRequestsForm.cs @@ -1,15 +1,8 @@ using Fiscalapi.Common; using Fiscalapi.Models; using Fiscalapi.Services; -using FiscalApi.Samples.NetFramework.Properties; using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; namespace FiscalApi.Samples.NetFramework diff --git a/FiscalApi.Samples.NetFramework/DownloadRulesForm.cs b/FiscalApi.Samples.NetFramework/DownloadRulesForm.cs index 27f43a1..fc08558 100644 --- a/FiscalApi.Samples.NetFramework/DownloadRulesForm.cs +++ b/FiscalApi.Samples.NetFramework/DownloadRulesForm.cs @@ -1,15 +1,7 @@ using Fiscalapi.Common; using Fiscalapi.Models; using Fiscalapi.Services; -using FiscalApi.Samples.NetFramework.Properties; using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; namespace FiscalApi.Samples.NetFramework diff --git a/FiscalApi.Samples.NetFramework/EgressInvoiceReferenceForm.Designer.cs b/FiscalApi.Samples.NetFramework/EgressInvoiceReferenceForm.Designer.cs index 100dab9..49e9146 100644 --- a/FiscalApi.Samples.NetFramework/EgressInvoiceReferenceForm.Designer.cs +++ b/FiscalApi.Samples.NetFramework/EgressInvoiceReferenceForm.Designer.cs @@ -48,7 +48,7 @@ private void InitializeComponent() this.groupBox1.Size = new System.Drawing.Size(207, 234); this.groupBox1.TabIndex = 1; this.groupBox1.TabStop = false; - this.groupBox1.Text = "groupBox1"; + this.groupBox1.Text = "Facturas de egreso"; // // button3 // diff --git a/FiscalApi.Samples.NetFramework/EgressInvoiceReferenceForm.cs b/FiscalApi.Samples.NetFramework/EgressInvoiceReferenceForm.cs index 3738235..263edc9 100644 --- a/FiscalApi.Samples.NetFramework/EgressInvoiceReferenceForm.cs +++ b/FiscalApi.Samples.NetFramework/EgressInvoiceReferenceForm.cs @@ -3,13 +3,8 @@ using Fiscalapi.Services; using System; using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; using System.IO; using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; namespace FiscalApi.Samples.NetFramework diff --git a/FiscalApi.Samples.NetFramework/EgressInvoiceValueForm.Designer.cs b/FiscalApi.Samples.NetFramework/EgressInvoiceValueForm.Designer.cs index 898b34c..c0eecd5 100644 --- a/FiscalApi.Samples.NetFramework/EgressInvoiceValueForm.Designer.cs +++ b/FiscalApi.Samples.NetFramework/EgressInvoiceValueForm.Designer.cs @@ -29,9 +29,9 @@ protected override void Dispose(bool disposing) private void InitializeComponent() { this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.button1 = new System.Windows.Forms.Button(); - this.button2 = new System.Windows.Forms.Button(); this.button3 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); this.groupBox1.SuspendLayout(); this.SuspendLayout(); // @@ -48,17 +48,17 @@ private void InitializeComponent() this.groupBox1.Size = new System.Drawing.Size(207, 234); this.groupBox1.TabIndex = 0; this.groupBox1.TabStop = false; - this.groupBox1.Text = "groupBox1"; + this.groupBox1.Text = "Facturas de ingreso"; // - // button1 + // button3 // - this.button1.Location = new System.Drawing.Point(7, 22); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(189, 60); - this.button1.TabIndex = 0; - this.button1.Text = "Factura egreso devolución"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); + this.button3.Location = new System.Drawing.Point(7, 154); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(189, 60); + this.button3.TabIndex = 2; + this.button3.Text = "Factura egreso nota de crédito"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); // // button2 // @@ -70,15 +70,15 @@ private void InitializeComponent() this.button2.UseVisualStyleBackColor = true; this.button2.Click += new System.EventHandler(this.button2_Click); // - // button3 + // button1 // - this.button3.Location = new System.Drawing.Point(7, 154); - this.button3.Name = "button3"; - this.button3.Size = new System.Drawing.Size(189, 60); - this.button3.TabIndex = 2; - this.button3.Text = "Factura egreso nota de crédito"; - this.button3.UseVisualStyleBackColor = true; - this.button3.Click += new System.EventHandler(this.button3_Click); + this.button1.Location = new System.Drawing.Point(7, 22); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(189, 60); + this.button1.TabIndex = 0; + this.button1.Text = "Factura egreso devolución"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); // // EgressInvoiceValueForm // diff --git a/FiscalApi.Samples.NetFramework/EgressInvoiceValueForm.cs b/FiscalApi.Samples.NetFramework/EgressInvoiceValueForm.cs index 1d1f7fb..114c6a1 100644 --- a/FiscalApi.Samples.NetFramework/EgressInvoiceValueForm.cs +++ b/FiscalApi.Samples.NetFramework/EgressInvoiceValueForm.cs @@ -1,15 +1,11 @@ using Fiscalapi.Common; using Fiscalapi.Models; using Fiscalapi.Services; +using Newtonsoft.Json; using System; using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; using System.IO; using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; namespace FiscalApi.Samples.NetFramework @@ -126,7 +122,7 @@ private async void button1_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -229,7 +225,7 @@ private async void button2_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -343,7 +339,7 @@ private async void button3_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { diff --git a/FiscalApi.Samples.NetFramework/EmployeeForm.cs b/FiscalApi.Samples.NetFramework/EmployeeForm.cs index 1f2bc5e..c8c8908 100644 --- a/FiscalApi.Samples.NetFramework/EmployeeForm.cs +++ b/FiscalApi.Samples.NetFramework/EmployeeForm.cs @@ -1,15 +1,8 @@ using Fiscalapi.Common; +using Fiscalapi.Models; using Fiscalapi.Services; -using FiscalApi.Samples.NetFramework.Properties; using Newtonsoft.Json; using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; namespace FiscalApi.Samples.NetFramework @@ -27,7 +20,7 @@ private async void button3_Click(object sender, EventArgs e) { var fiscalApi = FiscalApiClient.Create(_settings); - var apiResponse = await fiscalApi.Persons.Employer.GetByIdAsync("0e82a655-5f0c-4e07-abab-8f322e4123ef"); + var apiResponse = await fiscalApi.Persons.Employee.GetByIdAsync("0e82a655-5f0c-4e07-abab-8f322e4123ef"); if (apiResponse.Succeeded) { diff --git a/FiscalApi.Samples.NetFramework/EmployerForm.cs b/FiscalApi.Samples.NetFramework/EmployerForm.cs index 1977f16..9053ea3 100644 --- a/FiscalApi.Samples.NetFramework/EmployerForm.cs +++ b/FiscalApi.Samples.NetFramework/EmployerForm.cs @@ -1,16 +1,8 @@ using Fiscalapi.Common; +using Fiscalapi.Models; using Fiscalapi.Services; -using FiscalApi.Samples.NetFramework.Properties; using Newtonsoft.Json; using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Runtime; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; namespace FiscalApi.Samples.NetFramework diff --git a/FiscalApi.Samples.NetFramework/FiscalApi.Samples.NetFramework.csproj b/FiscalApi.Samples.NetFramework/FiscalApi.Samples.NetFramework.csproj index 5df7e58..ab374bb 100644 --- a/FiscalApi.Samples.NetFramework/FiscalApi.Samples.NetFramework.csproj +++ b/FiscalApi.Samples.NetFramework/FiscalApi.Samples.NetFramework.csproj @@ -33,9 +33,9 @@ 4 - - ..\packages\Fiscalapi.4.0.270\lib\net461\Fiscalapi.dll - + + ..\packages\Fiscalapi.4.0.360\lib\net461\Fiscalapi.dll + ..\packages\Microsoft.Bcl.AsyncInterfaces.8.0.0\lib\netstandard2.0\Microsoft.Bcl.AsyncInterfaces.dll diff --git a/FiscalApi.Samples.NetFramework/Form1.cs b/FiscalApi.Samples.NetFramework/Form1.cs index 6221df3..7babf0d 100644 --- a/FiscalApi.Samples.NetFramework/Form1.cs +++ b/FiscalApi.Samples.NetFramework/Form1.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.IO; using System.Linq; -using System.Threading.Tasks; using System.Windows.Forms; using Fiscalapi.Common; using Fiscalapi.Models; @@ -2867,7 +2866,7 @@ private async void button6_Click(object sender, EventArgs e) private void button12_Click(object sender, EventArgs e) { InvoiceValueForm ivf = new InvoiceValueForm(Settings); - ivf.Show(); + ivf.ShowDialog(); } private void button11_Click(object sender, EventArgs e) @@ -2941,7 +2940,7 @@ private async void button15_Click(object sender, EventArgs e) { var fiscalapi = FiscalApiClient.Create(Settings); - var apiResponse = await fiscalapi.Stamps.GetByIdAsync(""); + var apiResponse = await fiscalapi.Stamps.GetByIdAsync("3186ca81-83c8-4a99-99ea-12445519de50"); if (apiResponse.Succeeded) { diff --git a/FiscalApi.Samples.NetFramework/IncomeInvoiceReferenceForm.cs b/FiscalApi.Samples.NetFramework/IncomeInvoiceReferenceForm.cs index ae3d06c..4a5b49b 100644 --- a/FiscalApi.Samples.NetFramework/IncomeInvoiceReferenceForm.cs +++ b/FiscalApi.Samples.NetFramework/IncomeInvoiceReferenceForm.cs @@ -1,16 +1,10 @@ using Fiscalapi.Common; using Fiscalapi.Models; using Fiscalapi.Services; -using FiscalApi.Samples.NetFramework.Properties; using System; using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; using System.IO; using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; namespace FiscalApi.Samples.NetFramework diff --git a/FiscalApi.Samples.NetFramework/IncomeInvoiceValueForm.cs b/FiscalApi.Samples.NetFramework/IncomeInvoiceValueForm.cs index 2e2ed14..0be07f3 100644 --- a/FiscalApi.Samples.NetFramework/IncomeInvoiceValueForm.cs +++ b/FiscalApi.Samples.NetFramework/IncomeInvoiceValueForm.cs @@ -1,17 +1,11 @@ using Fiscalapi.Common; using Fiscalapi.Models; using Fiscalapi.Services; -using FiscalApi.Samples.NetFramework.Properties; using Newtonsoft.Json; using System; using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; using System.IO; using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; namespace FiscalApi.Samples.NetFramework @@ -242,7 +236,7 @@ private async void button3_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -356,7 +350,7 @@ private async void button9_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -465,7 +459,7 @@ private async void button10_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -574,7 +568,7 @@ private async void button11_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -690,7 +684,7 @@ private async void button12_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -804,7 +798,7 @@ private async void button13_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -923,7 +917,7 @@ private async void button14_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -1063,7 +1057,7 @@ private async void button2_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -1176,7 +1170,7 @@ private async void button6_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -1288,7 +1282,7 @@ private async void button7_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -1394,7 +1388,7 @@ private async void button8_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -1507,7 +1501,7 @@ private async void button15_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -1622,7 +1616,7 @@ private async void button16_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -1730,7 +1724,7 @@ private async void button17_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -1845,7 +1839,7 @@ private async void button18_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -1960,7 +1954,7 @@ private async void button19_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -2081,7 +2075,7 @@ private async void button20_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -2187,7 +2181,7 @@ private async void button4_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -2292,7 +2286,7 @@ private async void button21_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { diff --git a/FiscalApi.Samples.NetFramework/InvoiceReferenceForm.cs b/FiscalApi.Samples.NetFramework/InvoiceReferenceForm.cs index 51798ea..51b049d 100644 --- a/FiscalApi.Samples.NetFramework/InvoiceReferenceForm.cs +++ b/FiscalApi.Samples.NetFramework/InvoiceReferenceForm.cs @@ -1,16 +1,8 @@ using Fiscalapi.Common; using Fiscalapi.Models; using Fiscalapi.Services; -using FiscalApi.Samples.NetFramework.Properties; using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; namespace FiscalApi.Samples.NetFramework diff --git a/FiscalApi.Samples.NetFramework/InvoiceValueForm.cs b/FiscalApi.Samples.NetFramework/InvoiceValueForm.cs index c077e99..0a7858c 100644 --- a/FiscalApi.Samples.NetFramework/InvoiceValueForm.cs +++ b/FiscalApi.Samples.NetFramework/InvoiceValueForm.cs @@ -1,16 +1,10 @@ using Fiscalapi.Common; using Fiscalapi.Models; using Fiscalapi.Services; -using FiscalApi.Samples.NetFramework.Properties; using System; using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; using System.IO; using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; @@ -712,13 +706,13 @@ private void button14_Click(object sender, EventArgs e) private void button1_Click(object sender, EventArgs e) { IncomeInvoiceValueForm incomeInvoiceValueForm = new IncomeInvoiceValueForm(_settings); - incomeInvoiceValueForm.Show(); + incomeInvoiceValueForm.ShowDialog(); } private void button9_Click_1(object sender, EventArgs e) { EgressInvoiceValueForm egressInvoiceValueForm = new EgressInvoiceValueForm(_settings); - egressInvoiceValueForm.Show(); + egressInvoiceValueForm.ShowDialog(); } private void button13_Click_1(object sender, EventArgs e) @@ -729,7 +723,7 @@ private void button13_Click_1(object sender, EventArgs e) private void button10_Click_1(object sender, EventArgs e) { PaymentComplementInvoiceForm paymentComplementInvoiceForm = new PaymentComplementInvoiceForm(_settings); - paymentComplementInvoiceForm.Show(); + paymentComplementInvoiceForm.ShowDialog(); } private async void button6_Click(object sender, EventArgs e) @@ -769,7 +763,7 @@ private async void button6_Click(object sender, EventArgs e) private void button11_Click_1(object sender, EventArgs e) { PayrollComplementValueForm payrollComplementForm = new PayrollComplementValueForm(_settings); - payrollComplementForm.Show(); + payrollComplementForm.ShowDialog(); } private void button8_Click(object sender, EventArgs e) @@ -780,7 +774,7 @@ private void button8_Click(object sender, EventArgs e) private void button12_Click_1(object sender, EventArgs e) { LocalTaxesComplementValueForm localTaxesComplementForm = new LocalTaxesComplementValueForm(_settings); - localTaxesComplementForm.Show(); + localTaxesComplementForm.ShowDialog(); } } } diff --git a/FiscalApi.Samples.NetFramework/LocalTaxesComplementReferenceForm.cs b/FiscalApi.Samples.NetFramework/LocalTaxesComplementReferenceForm.cs index 2fdadae..4f1ab02 100644 --- a/FiscalApi.Samples.NetFramework/LocalTaxesComplementReferenceForm.cs +++ b/FiscalApi.Samples.NetFramework/LocalTaxesComplementReferenceForm.cs @@ -3,13 +3,8 @@ using Fiscalapi.Services; using System; using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; using System.IO; using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; namespace FiscalApi.Samples.NetFramework diff --git a/FiscalApi.Samples.NetFramework/LocalTaxesComplementValueForm.cs b/FiscalApi.Samples.NetFramework/LocalTaxesComplementValueForm.cs index 04b76d4..08c2b54 100644 --- a/FiscalApi.Samples.NetFramework/LocalTaxesComplementValueForm.cs +++ b/FiscalApi.Samples.NetFramework/LocalTaxesComplementValueForm.cs @@ -3,13 +3,8 @@ using Fiscalapi.Services; using System; using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; using System.IO; using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; namespace FiscalApi.Samples.NetFramework diff --git a/FiscalApi.Samples.NetFramework/PaymentComplementInvoiceReferenceForm.cs b/FiscalApi.Samples.NetFramework/PaymentComplementInvoiceReferenceForm.cs index 75fc6ee..28a762a 100644 --- a/FiscalApi.Samples.NetFramework/PaymentComplementInvoiceReferenceForm.cs +++ b/FiscalApi.Samples.NetFramework/PaymentComplementInvoiceReferenceForm.cs @@ -3,13 +3,8 @@ using Fiscalapi.Services; using System; using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; using System.IO; using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; namespace FiscalApi.Samples.NetFramework diff --git a/FiscalApi.Samples.NetFramework/PaymentComplementInvoiceValueForm.cs b/FiscalApi.Samples.NetFramework/PaymentComplementInvoiceValueForm.cs index 90e018b..7477c13 100644 --- a/FiscalApi.Samples.NetFramework/PaymentComplementInvoiceValueForm.cs +++ b/FiscalApi.Samples.NetFramework/PaymentComplementInvoiceValueForm.cs @@ -1,15 +1,11 @@ using Fiscalapi.Common; using Fiscalapi.Models; using Fiscalapi.Services; +using Newtonsoft.Json; using System; using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; using System.IO; using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; namespace FiscalApi.Samples.NetFramework @@ -141,7 +137,7 @@ private async void button18_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -286,7 +282,7 @@ private async void button1_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -431,7 +427,7 @@ private async void button2_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -592,7 +588,7 @@ private async void button3_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -702,7 +698,7 @@ private async void button4_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -841,7 +837,7 @@ private async void button19_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -987,7 +983,7 @@ private async void button17_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -1113,7 +1109,7 @@ private async void button16_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -1232,7 +1228,7 @@ private async void button15_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -1358,7 +1354,7 @@ private async void button9_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -1483,7 +1479,7 @@ private async void button5_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -1602,7 +1598,7 @@ private async void button6_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -1721,7 +1717,7 @@ private async void button7_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -1840,7 +1836,7 @@ private async void button8_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -1966,7 +1962,7 @@ private async void button10_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -2105,7 +2101,7 @@ private async void button11_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -2222,7 +2218,7 @@ private async void button12_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -2380,7 +2376,7 @@ private async void button13_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -2520,7 +2516,7 @@ private async void button14_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { diff --git a/FiscalApi.Samples.NetFramework/PayrollComplementReferenceForm.cs b/FiscalApi.Samples.NetFramework/PayrollComplementReferenceForm.cs index 59938ce..a8485e3 100644 --- a/FiscalApi.Samples.NetFramework/PayrollComplementReferenceForm.cs +++ b/FiscalApi.Samples.NetFramework/PayrollComplementReferenceForm.cs @@ -3,13 +3,8 @@ using Fiscalapi.Services; using System; using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; using System.IO; using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; namespace FiscalApi.Samples.NetFramework @@ -462,16 +457,16 @@ private async void button4_Click(object sender, EventArgs e) // Receptor var recipient = new InvoiceRecipient { - Id = "da71df0c-f328-45ee-9bd9-3096ed02c164" + Id = "aa2ad8c3-6ec5-4601-91be-d827d9a865bc" }; var payroll = new Payroll { Version = "1.2", PayrollTypeCode = "O", - PaymentDate = DateTime.Parse("2023-06-22T00:00:00"), - InitialPaymentDate = DateTime.Parse("2023-06-05T00:00:00"), - FinalPaymentDate = DateTime.Parse("2023-06-11T00:00:00"), + PaymentDate = DateTime.Parse("2023-05-24T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-05-09T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-05-24T00:00:00"), DaysPaid = 15, Earnings = new PayrollEarnings { @@ -672,13 +667,13 @@ private async void button6_Click(object sender, EventArgs e) // Emisor var issuer = new InvoiceIssuer { - Id = "0e82a655-5f0c-4e07-abab-8f322e4123ef" + Id = "ab7ec306-6f81-4f9f-b55f-bbbb1ab2f153" }; // Receptor var recipient = new InvoiceRecipient { - Id = "da71df0c-f328-45ee-9bd9-3096ed02c164" + Id = "acf43966-4672-48b6-a01a-d04cac6c3d64" }; var payroll = new Payroll @@ -829,7 +824,7 @@ private async void button7_Click(object sender, EventArgs e) // Receptor var recipient = new InvoiceRecipient { - Id = "da71df0c-f328-45ee-9bd9-3096ed02c164" + Id = "aa2ad8c3-6ec5-4601-91be-d827d9a865bc" }; var payroll = new Payroll @@ -908,7 +903,7 @@ private async void button8_Click(object sender, EventArgs e) // Receptor var recipient = new InvoiceRecipient { - Id = "da71df0c-f328-45ee-9bd9-3096ed02c164" + Id = "aa2ad8c3-6ec5-4601-91be-d827d9a865bc" }; var payroll = new Payroll @@ -1003,7 +998,7 @@ private async void button9_Click(object sender, EventArgs e) // Receptor var recipient = new InvoiceRecipient { - Id = "da71df0c-f328-45ee-9bd9-3096ed02c164" + Id = "aa2ad8c3-6ec5-4601-91be-d827d9a865bc" }; var payroll = new Payroll @@ -1093,7 +1088,7 @@ private async void button10_Click(object sender, EventArgs e) // Receptor var recipient = new InvoiceRecipient { - Id = "da71df0c-f328-45ee-9bd9-3096ed02c164" + Id = "aa2ad8c3-6ec5-4601-91be-d827d9a865bc" }; var payroll = new Payroll @@ -1172,16 +1167,16 @@ private async void button11_Click(object sender, EventArgs e) // Receptor var recipient = new InvoiceRecipient { - Id = "da71df0c-f328-45ee-9bd9-3096ed02c164" + Id = "aa2ad8c3-6ec5-4601-91be-d827d9a865bc" }; var payroll = new Payroll { Version = "1.2", PayrollTypeCode = "O", - PaymentDate = DateTime.Parse("2023-06-04T00:00:00"), - InitialPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), - FinalPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + PaymentDate = DateTime.Parse("2023-05-24T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-05-09T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-05-24T00:00:00"), DaysPaid = 15, Earnings = new PayrollEarnings { @@ -1277,16 +1272,16 @@ private async void button12_Click(object sender, EventArgs e) // Receptor var recipient = new InvoiceRecipient { - Id = "da71df0c-f328-45ee-9bd9-3096ed02c164" + Id = "aa2ad8c3-6ec5-4601-91be-d827d9a865bc" }; var payroll = new Payroll { Version = "1.2", PayrollTypeCode = "O", - PaymentDate = DateTime.Parse("2023-06-04T00:00:00"), - InitialPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), - FinalPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + PaymentDate = DateTime.Parse("2023-09-26T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-09-11T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-09-26T00:00:00"), DaysPaid = 15, Earnings = new PayrollEarnings { @@ -1365,16 +1360,16 @@ private async void button13_Click(object sender, EventArgs e) // Receptor var recipient = new InvoiceRecipient { - Id = "da71df0c-f328-45ee-9bd9-3096ed02c164" + Id = "aa2ad8c3-6ec5-4601-91be-d827d9a865bc" }; var payroll = new Payroll { Version = "1.2", PayrollTypeCode = "O", - PaymentDate = DateTime.Parse("2023-06-04T00:00:00"), - InitialPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), - FinalPaymentDate = DateTime.Parse("2023-06-04T00:00:00"), + PaymentDate = DateTime.Parse("2023-05-24T00:00:00"), + InitialPaymentDate = DateTime.Parse("2023-05-09T00:00:00"), + FinalPaymentDate = DateTime.Parse("2023-05-24T00:00:00"), DaysPaid = 15, Earnings = new PayrollEarnings { diff --git a/FiscalApi.Samples.NetFramework/PayrollComplementValueForm.cs b/FiscalApi.Samples.NetFramework/PayrollComplementValueForm.cs index 1e569e1..d65cfe6 100644 --- a/FiscalApi.Samples.NetFramework/PayrollComplementValueForm.cs +++ b/FiscalApi.Samples.NetFramework/PayrollComplementValueForm.cs @@ -1,15 +1,11 @@ using Fiscalapi.Common; using Fiscalapi.Models; using Fiscalapi.Services; +using Newtonsoft.Json; using System; using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; using System.IO; using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; namespace FiscalApi.Samples.NetFramework @@ -236,7 +232,7 @@ private async void button1_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -369,7 +365,7 @@ private async void button2_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -599,7 +595,7 @@ private async void button3_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -763,7 +759,7 @@ private async void button4_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -918,7 +914,7 @@ private async void button5_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -1118,7 +1114,7 @@ private async void button6_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -1248,7 +1244,7 @@ private async void button7_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -1394,7 +1390,7 @@ private async void button8_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -1530,7 +1526,7 @@ private async void button9_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -1661,7 +1657,7 @@ private async void button10_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -1818,7 +1814,7 @@ private async void button11_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -1958,7 +1954,7 @@ private async void button12_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { @@ -2105,7 +2101,7 @@ private async void button13_Click(object sender, EventArgs e) var xml = apiResponse.Data.Responses.FirstOrDefault()?.InvoiceBase64.DecodeFromBase64(); File.WriteAllText($@"C:\facturas\{apiResponse.Data.Number}.xml", xml); - MessageBox.Show($@"Factura {apiResponse.Data.Number} creada"); + MessageBox.Show(JsonConvert.SerializeObject(apiResponse.Data, Formatting.Indented)); } else { diff --git a/FiscalApi.Samples.NetFramework/packages.config b/FiscalApi.Samples.NetFramework/packages.config index f36e51c..949191e 100644 --- a/FiscalApi.Samples.NetFramework/packages.config +++ b/FiscalApi.Samples.NetFramework/packages.config @@ -1,6 +1,6 @@  - +