Example #1
0
        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);
        }
Example #2
0
        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);
                }
            }
        }