Vai al contenuto principale
Tutte le collezioniLe API & le AppsAPI, Apps, Reports, Webhooks
RESTful API - Esempio crea fattura manuale
RESTful API - Esempio crea fattura manuale

Esempio di codice da utilizzare per l'estrazione di fatture da un database e crearli in Contabilità in cloud

Angela Spina avatar
Scritto da Angela Spina
Aggiornato oltre 3 anni fa

Nel codice di esempio, che si trova anche nei documenti in allegato, si effettua l'estrazione di una serie di fatture, a partire da una certa data, da un ipotetico database e le riporta in Contabilità in cloud come registrazioni di fatture manuali.

Per creare una registrazione di una fattura manuale è stata usata la RESTful API:

POST /vouchers/drafts/customer-invoices

using System; 
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Reviso.Esempio
{
public class ManualCustomerInvoice
{
public bool booked { get; set; }
public DateTime date { get; set; }
public List lines { get; set; }
public ManualCustomerInvoice_NumberSeries numberSeries { get;
set; }
public decimal remainder { get; set; }
public decimal remainderInDefaultCurrency { get; set; }
public int voucherId { get; set; }
public ManualCustomerInvoice_VoucherNumber voucherNumber { get;
set;
}
public string voucherType { get; set; }
}
public class ManualCustomerInvoice_NumberSeries
{
public bool allowGaps { get; set; }
public int numberSeriesNumber { get; set; }
}

public class ManualCustomerInvoice_VoucherNumber
{
public string displayVoucherNumber { get; set; }
public string prefix { get; set; }
public int voucherNumber { get; set; }
}
}

using System; 
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Reviso.Example
{
public class ManualCustomerInvoice_Line
{
public ManualCustomerInvoice_Account account { get; set; }
public decimal amount { get; set; }
public decimal amountInBaseCurrency { get; set; }
public bool booked { get; set; }
public ManualCustomerInvoice_Account contraAccount { get; set; }
public ManualCustomerInvoice_VatAccount contraVatAccount { get; set;
}
public decimal? contraVatAmount { get; set; }
public decimal? contraVatAmountInBaseCurrency { get; set; }
public string currency { get; set; }
public ManualCustomerInvoice_Customer customer { get; set; }
public DateTime? dueDate { get; set; }
public int entryNumber { get; set; }
//? public string invoiceReference { get; set; }
public bool systemGeneratedVatLine { get; set; } //?
public string text { get; set; }
}

public class ManualCustomerInvoice_Account
{
public int accountNumber { get; set; }
public string accountType { get; set; }
public decimal balance { get; set; }
public string name { get; set; }
}

public class ManualCustomerInvoice_VatAccount
{
public string vatCode { get; set; }
}

public class ManualCustomerInvoice_Customer
{
public int customerNumber { get; set; }
public string name { get; set; }
}
}

private RevisoExportLog CreateManualCustomerInvoice() 
{
.....
.....
//estrae le fatture da creare su Reviso
XPQuery queryFattura = new XPQuery(uow);

var fatture = (from d in queryFattura.ToList()
where d.Data >= _dataInizioOperazioni
select d).ToList();
foreach (Fattura itemFattura in fatture)
{

//crea una nuova registrazione contabile su Reviso
ManualCustomerInvoice manualInvoice = new
ManualCustomerInvoice();
manualInvoice.booked = false;

DateTimeKind utcKind = new DateTimeKind();
utcKind = DateTimeKind.Utc;
DateTime dataFattura = new DateTime(itemFattura.Data.Year,
itemFattura.Data.Month, itemFattura.Data.Day, 0,0,0, utcKind);
manualInvoice.date = dataFattura;

ManualCustomerInvoice_NumberSeries numberSeries = new
ManualCustomerInvoice_NumberSeries();
numberSeries.allowGaps = false;
numberSeries.numberSeriesNumber = 17;
manualInvoice.numberSeries = numberSeries;

manualInvoice.remainder = itemFattura.Totale;
manualInvoice.remainderInDefaultCurrency =
manualInvoice.remainder;

manualInvoice.voucherType = "manualDebtorInvoice";

//inserisce per prima la riga del cliente
ManualCustomerInvoice_Line lineCustomer = new ManualCustomerInvoice_Line();

ManualCustomerInvoice_Customer customer = new ManualCustomerInvoice_Customer();
customer.customerNumber = Convert.ToInt32(mapTable.GetCustomer(itemFattura.Cliente.Id));
if (itemFattura.Cliente.PersonaFisica)
{
if (itemFattura.Cliente.Nome.Length > 0)
customer.name =
String.Concat(itemFattura.Cliente.DenominazioneCognome, " ",
itemFattura.Cliente.Nome);
else
customer.name = itemFattura.Cliente.DenominazioneCognome;
}
else
customer.name = itemFattura.RagioneSociale;
lineCustomer.customer = customer;

lineCustomer.amount = itemFattura.Totale;
lineCustomer.amountInBaseCurrency = lineCustomer.amount;
lineCustomer.booked = false;
lineCustomer.currency = "EUR";
lineCustomer.dueDate = dataFattura;
lineCustomer.invoiceReference = itemFattura.Numero.ToString();
lineCustomer.systemGeneratedVatLine = false;
lineCustomer.text = lineCustomer.customer.name;

List myLines = new List();
myLines.Add(lineCustomer);
//inserisce le righe dei prodotti a partire dal castelletto iva
foreach (IvaFattura dettaglio in itemFattura.CastellettoIva)
{
ManualCustomerInvoice_Line line = new ManualCustomerInvoice_Line();

ManualCustomerInvoice_Account contraAccount =
new ManualCustomerInvoice_Account();
contraAccount.accountNumber = 5805010;
contraAccount.accountType = "profitAndLoss";
contraAccount.name = "Merci c/ vendite";
line.contraAccount = contraAccount;


ManualCustomerInvoice_VatAccount contraVatAccount =
new ManualCustomerInvoice_VatAccount();
contraVatAccount.vatCode =
GetVatCode(dettaglio.Iva);
line.contraVatAccount = contraVatAccount;


line.amount = dettaglio.Imponibile +
dettaglio.Imposta;
line.amountInBaseCurrency = line.amount;
line.booked = false;
line.contraVatAmount = -1 * dettaglio.Imposta;
line.contraVatAmountInBaseCurrency =
line.contraVatAmount;
line.currency = "EUR";
line.systemGeneratedVatLine = false;
line.text = dettaglio.DescrizioneIva;

myLines.Add(line);
}

manualInvoice.lines= myLines;

var restClient2 = new
RestClient("https://rest.reviso.com");

//effettua il post della richiesta
var request2 = new RestRequest("/VOUCHERS/DRAFTS/CUSTOMER-INVOICES", Method.POST);
request2.AddHeader("Content-Type", "application/json");
request2.AddHeader("X-AppSecretToken",
Properties.Resources.RevisoAppSecretToken);
request2.AddHeader("X-AgreementGrantToken", token);

request2.AddJsonBody(manualInvoice);

IRestResponse restResponse2 =
restClient2.Execute(request2);

//aggiorno la fattura con il riferimento alla nuova
registrazione su Reviso
RestResponseInvoice myVoucherId =
(RestResponseInvoice)Newtonsoft.Json.JsonConvert.DeserializeObject(restResponse2.Content, typeof(RestResponseInvoice));
int voucherId = myVoucherId.voucherId;

if (restResponse2 != null && restResponse2.StatusCode ==
System.Net.HttpStatusCode.Created && restResponse2.ErrorException == null)
log.AddEntry(LogEntryType.Fattura, true, "Creazione completata con successo!");
else
{

if (restResponse2 != null &&
restResponse2.ErrorException != null)
log.AddEntry(LogEntryType.Fattura, false,
String.Concat("Creazione non completata. Errore: ",
restResponse2.ErrorException));
else
log.AddEntry(LogEntryType.Fattura, false, String.Concat("Creazione non completata. Messaggio del server: ",
restResponse2.Content.Replace(System.Environment.NewLine, " ")));
}
}
....
....
}
public class RestResponseInvoice
{
public int voucherId { get; set; }
}

Hai ricevuto la risposta alla tua domanda?