public JPK GenerateJpk(IList <invoice> invoices, config config, DateTime dateFrom, DateTime dateTo) { JPK jpk = new JPK(); jpk.Naglowek = new TNaglowek(); jpk.Naglowek.KodFormularza = new TNaglowekKodFormularza(); //jpk.Naglowek.KodFormularza.kodSystemowy = "JPK_VAT (3)"; //jpk.Naglowek.KodFormularza.wersjaSchemy = "1-1"; jpk.Naglowek.WariantFormularza = 3; //config.form_variant //jpk.Naglowek.CelZlozenia = config.purpose_of_submission; //0 jpk.Naglowek.DataWytworzeniaJPK = DateTime.Now; jpk.Naglowek.DataOd = dateFrom; jpk.Naglowek.DataDo = dateTo; jpk.Naglowek.NazwaSystemu = config.system_name; jpk.Podmiot1 = new JPKPodmiot1(); jpk.Podmiot1.NIP = config.my_nip; jpk.Podmiot1.PelnaNazwa = config.my_name; jpk.Podmiot1.Email = config.my_email; var incomeInvoices = invoices.Where(a => a.income == true).ToArray(); decimal incomeSum = 0; jpk.SprzedazWiersz = new JPKSprzedazWiersz[incomeInvoices.Count()]; for (var i = 0; i < incomeInvoices.Count(); i++) { var currentInvoice = incomeInvoices[i]; JPKSprzedazWiersz item = new JPKSprzedazWiersz(); item.LpSprzedazy = (i + 1).ToString(); item.NrKontrahenta = currentInvoice.contractor_nip; item.NazwaKontrahenta = currentInvoice.contractor_name; item.AdresKontrahenta = currentInvoice.contractor_address; item.DowodSprzedazy = currentInvoice.invoice_number; item.DataWystawienia = currentInvoice.date_of_issue; item.DataSprzedazy = currentInvoice.date_of_sale; item.DataSprzedazySpecified = true; item.K_19 = currentInvoice.amount_net; item.K_20 = currentInvoice.amount_vat; jpk.SprzedazWiersz[i] = item; incomeSum = incomeSum + currentInvoice.amount_vat; } jpk.SprzedazCtrl = new JPKSprzedazCtrl(); jpk.SprzedazCtrl.LiczbaWierszySprzedazy = incomeInvoices.Count().ToString(); jpk.SprzedazCtrl.PodatekNalezny = incomeSum; var outcomeInvoices = invoices.Where(a => a.income == false).ToArray(); decimal outcomeSum = 0; jpk.ZakupWiersz = new JPKZakupWiersz[outcomeInvoices.Count()]; for (var i = 0; i < outcomeInvoices.Count(); i++) { var currentInvoice = outcomeInvoices[i]; JPKZakupWiersz item = new JPKZakupWiersz(); item.LpZakupu = (i + 1).ToString(); item.NrDostawcy = currentInvoice.contractor_nip; item.NazwaDostawcy = currentInvoice.contractor_name; item.AdresDostawcy = currentInvoice.contractor_address; item.DowodZakupu = currentInvoice.invoice_number; item.DataZakupu = currentInvoice.date_of_issue; //być może zamieniona kolejność item.DataWplywu = currentInvoice.date_of_sale; //być może zamieniona kolejność item.K_45 = currentInvoice.amount_net; item.K_46 = currentInvoice.amount_vat; jpk.ZakupWiersz[i] = item; outcomeSum = outcomeSum + currentInvoice.amount_vat; } jpk.ZakupCtrl = new JPKZakupCtrl(); jpk.ZakupCtrl.LiczbaWierszyZakupow = outcomeInvoices.Count().ToString(); jpk.ZakupCtrl.PodatekNaliczony = outcomeSum; XmlSerializer serializer = new XmlSerializer(typeof(JPK)); string jpkFileName = "JPK_" + new DateTime().Month + "_" + new DateTime().Year + ".xml"; string path = config.path_for_jpk + "\\" + jpkFileName; using (MemoryStream stream = new MemoryStream()) using (StreamWriter writer = new StreamWriter(path, false, Encoding.UTF8)) { serializer.Serialize(writer, jpk); } return(jpk); }
private static void Main(string[] args) { string GetSheetName() { return($"Kwartał {args[2]}-{args[1]}"); } string GetFilenameFromDate() { var filename = DateTime.Now.AddMonths(-1).ToString("MMMM-yyyy"); return(filename + ".xml"); } JPK InitJpk() { var dateFrom = new DateTime(Int16.Parse(args[1]), Int16.Parse(args[0]), 1); var dateTo = dateFrom.AddMonths(1).AddDays(-1); return(new JPK { Naglowek = new TNaglowek { KodFormularza = new TNaglowekKodFormularza { Value = TKodFormularza.JPK_VAT }, DataOd = dateFrom, DataDo = dateTo, DataWytworzeniaJPK = DateTime.Now, NazwaSystemu = "jpkApp", WariantFormularza = 3 }, Podmiot1 = new JPKPodmiot1 { Email = "*****@*****.**", NIP = "8361774141", PelnaNazwa = "Idev Łukasz Przybył" }, ZakupCtrl = new JPKZakupCtrl(), SprzedazCtrl = new JPKSprzedazCtrl() }); } void ProcessZakup(int zakupRowNum, ISheet zakupSheet, JPK jpk) { var zakupIndex = 0; var lpZakupu = 1; for (var row = StartRowIndex; row < zakupRowNum; row++, zakupIndex++) { var issueDate = zakupSheet.GetRow(row)?.GetCell(2).DateCellValue ?? DateTime.Now; if (issueDate <= jpk.Naglowek.DataDo && issueDate >= jpk.Naglowek.DataOd) { var jpkZakupWiersz = new JPKZakupWiersz { AdresDostawcy = zakupSheet.GetRow(row)?.GetCell(7).StringCellValue, DataWplywu = issueDate, DataWplywuSpecified = true, DataZakupu = issueDate, LpZakupu = lpZakupu++.ToString(), NazwaDostawcy = zakupSheet.GetRow(row)?.GetCell(6).StringCellValue, NrDostawcy = zakupSheet.GetRow(row)?.GetCell(5).NumericCellValue .ToString(CultureInfo.InvariantCulture), K_45 = Convert.ToDecimal(zakupSheet.GetRow(row)?.GetCell(9).NumericCellValue) + Convert.ToDecimal(zakupSheet.GetRow(row)?.GetCell(11).NumericCellValue), K_46 = Convert.ToDecimal(zakupSheet.GetRow(row)?.GetCell(15).NumericCellValue) }; var cell = zakupSheet.GetRow(row)?.GetCell(1); if (cell != null) { switch (cell.CellType) { case CellType.Unknown: break; case CellType.Numeric: jpkZakupWiersz.DowodZakupu = cell.NumericCellValue.ToString(CultureInfo.InvariantCulture); break; case CellType.String: jpkZakupWiersz.DowodZakupu = cell.StringCellValue; break; case CellType.Formula: break; case CellType.Blank: break; case CellType.Boolean: break; case CellType.Error: break; default: throw new ArgumentOutOfRangeException(); } } jpk.ZakupWiersz[zakupIndex] = jpkZakupWiersz; } } jpk.ZakupCtrl.LiczbaWierszyZakupow = jpk.ZakupWiersz.Count(wiersz => wiersz != null).ToString(); jpk.ZakupCtrl.PodatekNaliczony = jpk.ZakupWiersz.Where(wiersz => wiersz != null).Sum(wiersz => wiersz.K_46); } void ProcessSprzedaz(int zakupRowNum, ISheet sprzedazSheet, JPK jpk) { var sprzedazIndex = 0; var lpSprzedazy = 1; for (var row = StartRowIndex; row < zakupRowNum; row++, sprzedazIndex++) { var issueDate = sprzedazSheet.GetRow(row)?.GetCell(2).DateCellValue ?? DateTime.Now; if (issueDate <= jpk.Naglowek.DataDo && issueDate >= jpk.Naglowek.DataOd) { var jpkSprzedazWiersz = new JPKSprzedazWiersz { AdresKontrahenta = sprzedazSheet.GetRow(row)?.GetCell(6).StringCellValue, DataSprzedazy = sprzedazSheet.GetRow(row)?.GetCell(3).DateCellValue ?? DateTime.Now, DataSprzedazySpecified = true, DataWystawienia = issueDate, LpSprzedazy = lpSprzedazy++.ToString(), NazwaKontrahenta = sprzedazSheet.GetRow(row)?.GetCell(5).StringCellValue, NrKontrahenta = sprzedazSheet.GetRow(row)?.GetCell(4).NumericCellValue .ToString(CultureInfo.InvariantCulture), K_19 = Convert.ToDecimal(sprzedazSheet.GetRow(row)?.GetCell(8).NumericCellValue), K_20 = Convert.ToDecimal(sprzedazSheet.GetRow(row)?.GetCell(14).NumericCellValue) }; var cell = sprzedazSheet.GetRow(row)?.GetCell(1); if (cell != null) { switch (cell.CellType) { case CellType.Unknown: break; case CellType.Numeric: jpkSprzedazWiersz.DowodSprzedazy = cell.NumericCellValue.ToString(CultureInfo.InvariantCulture); break; case CellType.String: jpkSprzedazWiersz.DowodSprzedazy = cell.StringCellValue; break; case CellType.Formula: break; case CellType.Blank: break; case CellType.Boolean: break; case CellType.Error: break; default: throw new ArgumentOutOfRangeException(); } } jpk.SprzedazWiersz[sprzedazIndex] = jpkSprzedazWiersz; } } jpk.SprzedazCtrl.LiczbaWierszySprzedazy = jpk.SprzedazWiersz.Count(wiersz => wiersz != null).ToString(); jpk.SprzedazCtrl.PodatekNalezny = jpk.SprzedazWiersz.Where(wiersz => wiersz != null).Sum(wiersz => wiersz.K_20); } int GetSprzedazRowNum(ISheet sheet) { return(GetZakupRowNum(sheet)); } int GetZakupRowNum(ISheet sheet) { var index = StartRowIndex + 1; while (Math.Abs(sheet.GetRow(index).GetCell(0).NumericCellValue - default(double)) > 0.1) { index++; } return(index); } var initJpk = InitJpk(); using (var fsZakup = new FileStream($"{args[3]}Ewidencja nabycia towarów i usług.xls.xlsx", FileMode.Open, FileAccess.Read)) { var xssfWorkbook = new XSSFWorkbook(fsZakup); var zakupSheet = xssfWorkbook.GetSheet(GetSheetName()); var zakupRowNum = GetZakupRowNum(zakupSheet); initJpk.InitZakupArray(zakupRowNum - StartRowIndex); using (var fsSprzedaz = new FileStream($"{args[3]}Ewidencja sprzedaży.xls.xlsx", FileMode.Open, FileAccess.Read)) { var xssfSprzedazWorkbook = new XSSFWorkbook(fsSprzedaz); var sprzedazSheet = xssfSprzedazWorkbook.GetSheet(GetSheetName()); var sprzedazRowNum = GetSprzedazRowNum(sprzedazSheet); initJpk.InitSprzedazArray(sprzedazRowNum - StartRowIndex); ProcessSprzedaz(sprzedazRowNum, sprzedazSheet, initJpk); } ProcessZakup(zakupRowNum, zakupSheet, initJpk); using (var fileStreamWrite = new FileStream(GetFilenameFromDate(), FileMode.Create, FileAccess.Write)) { var xmlSerializer = new XmlSerializer(typeof(JPK)); xmlSerializer.Serialize(fileStreamWrite, initJpk); } } }