Пример #1
0
        public InvoicePrint CreateInvoicePrint(int id = 0, int [] InvoiceIds = null)
        {
            var report = new InvoicePrint();

            report.xrPictureBox1.BeforePrint += InvoicePrintPictureBox_BeforePrint;
            TenantConfig config = _tenantServices.GetTenantConfigById(CurrentTenantId);

            if (!config.ShowDecimalPoint)
            {
                report.lblQuantity.TextFormatString = "{0:0.##}";
                report.xrLabel2.TextFormatString    = "{0:0.##}";
            }
            if (InvoiceIds == null)
            {
                int[] ids = new int[] { id };
                report.invoiceMasterId.Value = ids;
            }
            else
            {
                report.invoiceMasterId.Value = InvoiceIds;
            }

            report.RequestParameters = false;
            return(report);
        }
Пример #2
0
        public async Task <IActionResult> Result(int?id)
        {
            var invoicePrintModel = new InvoicePrint();

            invoicePrintModel.Invoice = await _context.Invoice
                                        .Include(i => i.Payment)
                                        .Include(i => i.Job)
                                        .ThenInclude(i => i.Customer)
                                        .Include(i => i.InvoiceItem)
                                        .ThenInclude(i => i.Item)
                                        .ThenInclude(i => i.TestCompoent)
                                        .ToListAsync();


            Invoice invoiceForCustomer = invoicePrintModel.Invoice.Where(
                i => i.InvocieID == id.Value).Single();

            invoicePrintModel.Customer = invoiceForCustomer.Job.Customer;

            Invoice invoiceForPayment = invoicePrintModel.Invoice.Where(
                i => i.InvocieID == id.Value).Single();

            invoicePrintModel.Payment = invoiceForPayment.Payment;

            Invoice invoiceForItem = invoicePrintModel.Invoice.Where(
                i => i.InvocieID == id.Value).Single();

            invoicePrintModel.Item = invoiceForItem.InvoiceItem.Select(s => s.Item);

            return(View(invoicePrintModel));
        }
Пример #3
0
        public InvoicePrint getPrintBill(int orderMasterId)
        {
            SqlCommand dinsert = new SqlCommand("usp_GetBillPrint");

            dinsert.Parameters.AddWithValue("@OrderMasterId", SqlDbType.Int).Value = orderMasterId;
            DataSet      dtList = objcon.GetDsByCommand(dinsert);
            InvoicePrint list1  = new InvoicePrint();

            foreach (DataRow dr in dtList.Tables[0].Rows)
            {
                //DomainDNS pd = new DomainDNS();
                list1.ServiceProviderName     = (dr["ServiceProviderName"].ToString());
                list1.ServiceProviderMobileNo = dr["ServiceProviderMobileNo"].ToString();
                list1.CompanyName             = dr["CompanyName"].ToString();
                list1.ServiceProviderRegNo    = dr["ServiceProviderRegNo"].ToString();
                list1.ServiceProviderGSTIN    = dr["ServiceProviderGSTIN"].ToString();
                list1.ServiceProviderEmail    = dr["ServiceProviderEmail"].ToString();
                list1.ServiceProviderAddress  = dr["ServiceProviderAddress"].ToString();
                list1.ServiceProviderCity     = dr["ServiceProviderCity"].ToString();
                list1.OrderId            = dr["OrderMasterId"].ToString();
                list1.OrderDate          = dr["OrderDate"].ToString();
                list1.CustomerId         = dr["CustomerId"].ToString();
                list1.CustomerName       = dr["CustomerName"].ToString();
                list1.CustomerMoNo       = dr["CustomerMoNo"].ToString();
                list1.CustomerEmail      = dr["CustomerEmail"].ToString();
                list1.CustomerAddress    = dr["CustomerAddress"].ToString();
                list1.CustomerCity       = dr["CustomerCity"].ToString();
                list1.CustomerPostalCode = dr["CustomerPostalCode"].ToString();
            }
            foreach (DataRow dr in dtList.Tables[1].Rows)
            {
                Order list12 = new Order();

                //DomainDNS pd = new DomainDNS();
                list12.ProductName = (dr["ProductName"].ToString());
                list12.Qty         = "1";//dr["ServiceProviderMobileNo"].ToString();
                list12.RatePerQty  = dr["RatePerQty"].ToString();
                list12.BasePrise   = dr["BasePrise"].ToString();
                list12.CGST        = dr["CGST"].ToString();
                list12.SGST        = dr["SGST"].ToString();
                list12.Price       = dr["Price"].ToString();
                list1.Productlst.Add(list12);
            }
            foreach (DataRow dr in dtList.Tables[2].Rows)
            {
                OrderMasterDetail list12 = new OrderMasterDetail();

                //DomainDNS pd = new DomainDNS();
                list12.Subtotal     = (dr["BasePrise"].ToString());
                list12.CGST         = dr["CGST"].ToString();
                list12.SGST         = dr["SGST"].ToString();
                list12.InvoiceTotal = dr["InvoiceTotal"].ToString();

                list1.OrderDetail.Add(list12);
            }
            return(list1);
        }
        public async Task <IActionResult> PrintPdf(int?id)
        {
            if (id is null)
            {
                return(NotFound());
            }

            var master = await _context.InvoiceMaster
                         .Include(a => a.Cliente)
                         .Include(a => a.InvoiceDetalles)
                         .FirstOrDefaultAsync(a => a.Id == id);

            if (master is null)
            {
                return(NotFound());
            }

            var invoicePrint = new InvoicePrint(master);

            return(View(invoicePrint));
        }
Пример #5
0
        private void Save(bool print)
        {
            B_Print.Enabled = B_Save.Enabled = false;
            var notif = Notification.Create("Creating Invoices", "Gathering required information..", SlickControls.Enums.PromptIcons.Info, null).Show(Form);

            new Action(() =>
            {
                var invs = new List <int>();
                System.Threading.Thread.Sleep(1000);

                foreach (var cust in Customers.Where(x => x.NewCounter > x.CurrentCounter))
                {
                    notif.SetText(cust.ToString());
                    invs.Add(SqlHandler.SaveInvoice(new Invoice()
                    {
                        CustomerID      = cust.ID,
                        StartingCounter = cust.CurrentCounter,
                        EndingCounter   = cust.NewCounter,
                        Date            = new DateTime((int)DD_Year.SelectedItem, (int)DD_Month.SelectedItem, DateTime.Today.Day)
                    }));

                    System.Threading.Thread.Sleep(75);
                }

                notif.Close();
                this.TryInvoke(() =>
                {
                    B_Print.Enabled = B_Save.Enabled = true;

                    if (print)
                    {
                        InvoicePrint.Print(Form, SqlHandler.GetInvoicesPrint(invs.Select(x => new Invoice()
                        {
                            ID = x
                        })));
                    }
                });
            }).RunInBackground();
        }
        private static void FillInvoice(bool isWarranty, InvoicePrint invoicePrint, string invoiceNumber, InvoiceEx invoiceEx = null)
        {
            string[] currencyType = new string[2];

            word = new WordService(fileName, false);

            try {
                word.FindReplace("[brokerName]", order.Auction.SupplierOrders[0].BrokerName);
                word.FindReplace("[brokerKbe]", order.Auction.SupplierOrders[0].BrokerKbe);
                word.FindReplace("[brokerBIN]", order.Auction.SupplierOrders[0].BrokerBIN);
                word.FindReplace("[brokerBankName]", order.Auction.SupplierOrders[0].BrokerBankName);
                word.FindReplace("[brokerBIK]", order.Auction.SupplierOrders[0].BrokerBIK);
                word.FindReplace("[payCode]", isWarranty ? "171" : "859");
                word.FindReplace("[invoiceNumber]", invoiceNumber);
                word.FindReplace("[invoiceDate]", isWarranty ? DateTime.Now.ToShortDateString() : order.Auction.Date.ToShortDateString());
                word.FindReplace("[supplierName]", order.Auction.SupplierOrders[0].BrokerName);
                word.FindReplace("[supplierBIN]", order.Auction.SupplierOrders[0].BrokerBIN);
                word.FindReplace("[supplierAddress]", order.Auction.SupplierOrders[0].BrokerAddress);
                word.FindReplace("[buyerName]", order.Auction.SupplierOrders[0].Name);
                word.FindReplace("[buyerBIN]", order.Auction.SupplierOrders[0].BIN);
                word.FindReplace("[buyerAddress]", order.Auction.SupplierOrders[0].Address);
                word.FindReplace("[contractNum]", "№" + order.Auction.SupplierOrders[0].ContractNum);
                word.FindReplace("[contractDate]", order.Auction.SupplierOrders[0].ContractDate.ToShortDateString());
                word.SetCell(3, 2, 1, "1");

                if (isWarranty)
                {
                    word.SetCell(3, 2, 3, "Гарантийное обеспечение за участие в аукционе №" + order.Auction.Number + " от " + order.Auction.Date.ToShortDateString());
                }
                else
                {
                    word.SetCell(3, 2, 3, "Брокерские услуги за участие в аукционе №" + order.Auction.Number + " от " + order.Auction.Date.ToShortDateString());
                }

                if (order.Auction.SiteId == 4)
                {
                    word.AddTableRow(3);
                    word.SetCell(3, 3, 1, "2");
                    word.SetCell(3, 3, 3, "Открытие и ведение счета на товарной бирже");
                    word.SetCell(3, 3, 4, "1");
                    word.SetCell(3, 3, 5, "шт.");
                    word.SetCell(3, 3, 6, invoiceEx.Services[1].Price.ToString());
                    word.SetCell(3, 3, 7, invoiceEx.Services[1].Аmount.ToString());
                }

                word.SetCell(3, 2, 6, invoicePrint.Price);
                word.SetCell(3, 2, 7, invoicePrint.Аmount);
                word.FindReplace("[count]", order.Auction.SiteId == 4 ? "2" : "1");

                if (order.Auction.SiteId == 4)
                {
                    if (order.Auction.SupplierOrders[0].BIN == "141040012412")
                    {
                        invoicePrint.Total = (invoiceEx.Services[0].Аmount + invoiceEx.Services[1].Аmount).ToString();
                    }
                    else
                    {
                        invoicePrint.Total = (invoiceEx.Services[0].Аmount + invoiceEx.Services[1].Аmount).ToString() + ",00";
                    }

                    if (order.Auction.SupplierOrders[0].BrokerName.ToUpper().Contains("АЛТЫН"))
                    {
                        invoicePrint.TotalTax = "";
                    }
                    else
                    {
                        invoicePrint.TotalTax = ((invoiceEx.Services[0].Аmount + invoiceEx.Services[1].Аmount) * 12 / 112).ToString();
                    }
                }

                word.FindReplace("[invoiceSum]", invoicePrint.Total);
                word.FindReplace("[ndsSum]", invoicePrint.TotalTax);
                word.FindReplace("[invoiceSum]", invoicePrint.Total);

                if (invoicePrint.АmountInWords.Contains("тиын"))
                {
                    word.FindReplace("[currency]", "KZT");
                    currencyType[0] = " тенге";
                    currencyType[1] = " тиын";

                    if (order.Auction.SupplierOrders[0].BrokerName.ToUpper().Contains("КОРУНД"))
                    {
                        word.FindReplace("[brokerIIK]", order.Auction.SupplierOrders[0].BrokerIIK);
                    }
                    else
                    {
                        word.FindReplace("[brokerIIK]", order.Auction.SupplierOrders[0].BrokerIIK);
                    }
                }
                else if (invoicePrint.АmountInWords.Contains("копеек"))
                {
                    word.FindReplace("[currency]", "RUB");
                    currencyType[0] = " рублей";
                    currencyType[1] = " копеек";

                    if (order.Auction.SupplierOrders[0].BrokerName.ToUpper().Contains("КОРУНД"))
                    {
                        word.FindReplace("[brokerIIK]", "KZ739261802171874002");
                    }
                    else
                    {
                        word.FindReplace("[brokerIIK]", order.Auction.SupplierOrders[0].BrokerIIK);
                    }
                }
                else if (invoicePrint.АmountInWords.Contains("центов"))
                {
                    word.FindReplace("[currency]", "USD");
                    currencyType[0] = " долларов";
                    currencyType[1] = " центов";

                    if (order.Auction.SupplierOrders[0].BrokerName.ToUpper().Contains("КОРУНД"))
                    {
                        word.FindReplace("[brokerIIK]", "KZ039261802171874001");
                    }
                    else
                    {
                        word.FindReplace("[brokerIIK]", order.Auction.SupplierOrders[0].BrokerIIK);
                    }
                }

                if (order.Auction.SiteId == 4)
                {
                    invoicePrint.АmountInWords = "Всего к оплате: " + ConvertNumberToWord(Convert.ToInt32(invoiceEx.Services[0].Аmount + invoiceEx.Services[1].Аmount)) + currencyType[0] + ",00" + currencyType[1];
                }

                word.FindReplace("[amountInWords]", invoicePrint.АmountInWords);
            } catch (Exception ex) { Debug.WriteLine("Err:" + ex); }

            word.SaveAsPDF(fileName);

            word.CloseDocument(true);
            word.CloseWord(true);
        }
Пример #7
0
        private InvoicePrint  GetInvoicePrint()
        {
            var fakeInvoice = new InvoicePrint
            {
                InvoiceSetting = new InvoiceSetting(),
                Orgnization    = new Orgnization
                {
                    Name         = "Raj Cola Pvt Ltd",
                    Address      = "Shop no f-14, Gayatri complex, street no 3, Samastiput Bajar, Bihar, 110091",
                    ID           = Guid.NewGuid(),
                    MobileNumber = "8800282570",
                    Status       = "Active",
                    Email        = "*****@*****.**",
                    GST          = "GSTNUMBER12121210",
                },
                Customer = new Customer
                {
                    Address  = Faker.Address.StreetAddress(),
                    ID       = Guid.NewGuid(),
                    MobileNo = Faker.Phone.Number(),
                    Name     = Faker.Name.FullName(),
                    Status   = "Active"
                },
                Invoice = new Invoice
                {
                    CustomerID         = Guid.NewGuid(),
                    DiscountCode       = Guid.NewGuid(),
                    DiscountCodeAmount = 20,
                    ID            = Guid.NewGuid(),
                    Number        = "INVORDERNO1",
                    PaidAmount    = 5000,
                    TotalAmount   = 5000,
                    TotalDiscount = 20,
                    Date          = DateTime.Now
                },
                User = new User
                {
                    Address  = Faker.Address.StreetAddress(),
                    ID       = Guid.NewGuid(),
                    MobileNo = Faker.Phone.Number(),
                    Name     = Faker.Name.FullName(),
                    Status   = "Active"
                },
                InvoiceProducts = new List <InvoiceProduct> {
                    new InvoiceProduct {
                        Discount    = 0,
                        ProductID   = Guid.NewGuid(),
                        ProductName = "ProductName - aa",
                        ProductCode = "Code -" + Faker.RandomNumber.Next(),
                        Mrp         = 200.523m,
                        Quantity    = 5
                    }
                },
            };

            for (int i = 0; i < 4; i++)
            {
                fakeInvoice.InvoiceProducts.Add(new InvoiceProduct {
                    Discount    = 5 + i,
                    ProductID   = Guid.NewGuid(),
                    ProductName = "ProductName - " + i,
                    ProductCode = "Code -" + i,
                    Mrp         = 200,
                    Quantity    = 5
                }
                                                );
            }
            return(fakeInvoice);
        }
Пример #8
0
        public async Task <IActionResult> Index([FromBody] CreditNote creditNote)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    Store store = JsonConvert.DeserializeObject <Store>(HttpContext.Session.GetString("Store"));;
                    creditNote.Id                 = Guid.NewGuid();
                    creditNote.Credit_Note_Id     = _context.CreditNote.Select(x => x.Credit_Note_Id).DefaultIfEmpty(0).Max() + 1;
                    creditNote.Credit_Note_Number = "CN-" + creditNote.Credit_Note_Id.ToString("0000") + "-" + store.INITIAL + '-' + store.FISCAL_YEAR;
                    creditNote.Trans_Time         = DateTime.Now.TimeOfDay;
                    creditNote.Division           = "Divisioin";
                    creditNote.Terminal           = HttpContext.Session.GetString("Terminal");
                    creditNote.Created_Date       = DateTime.Now;
                    creditNote.Created_By         = User.Identity.Name;
                    creditNote.isRedeem           = creditNote.isRedeem;

                    if (creditNote.isRedeem == true)
                    {
                        creditNote.Remarks = "Claimed";
                    }
                    _context.Add(creditNote);

                    foreach (var item in creditNote.CreditNoteItems)
                    {
                        item.Credit_Note_Id     = creditNote.Id;
                        item.Credit_Note_Number = creditNote.Credit_Note_Number;
                        _context.CreditNoteItem.Add(item);
                    }

                    //save to print table
                    InvoicePrint print = new InvoicePrint()
                    {
                        InvoiceNumber    = creditNote.Credit_Note_Number,
                        Type             = "CreditNote",
                        FirstPrintedDate = DateTime.Now,
                        FirstPrintedBy   = User.Identity.Name,
                        PrintCount       = 1
                    };
                    _context.InvoicePrint.Add(print);

                    await _context.SaveChangesAsync();

                    //now update invoice remarks also
                    SalesInvoice invoice = _context.SalesInvoice.FirstOrDefault(x => x.Invoice_Number == creditNote.Reference_Number.Trim());
                    invoice.Remarks = "Return";
                    _context.Entry(invoice).State = EntityState.Modified;
                    InvoiceMaterializedView invoiceMaterializedViewOld = _context.InvoiceMaterializedView.FirstOrDefault(x => x.BillNo == creditNote.Reference_Number.Trim());
                    invoiceMaterializedViewOld.IsBillActive          = false;
                    _context.Entry(invoiceMaterializedViewOld).State = EntityState.Modified;


                    InvoiceMaterializedView view = new InvoiceMaterializedView()
                    {
                        BillNo           = creditNote.Credit_Note_Number,
                        DocumentType     = "Credit Memo",
                        FiscalYear       = store.FISCAL_YEAR,
                        LocationCode     = store.INITIAL,
                        BillDate         = creditNote.Trans_Date_Ad.Value,
                        PostingTime      = creditNote.Trans_Time.Value,
                        CustomerCode     = creditNote.Customer_Id,
                        CustomerName     = creditNote.Customer_Name,
                        Vatno            = creditNote.Customer_Vat,
                        Amount           = creditNote.Total_Gross_Amount.Value,
                        Discount         = creditNote.Total_Discount.Value,
                        TaxableAmount    = creditNote.TaxableAmount,
                        NonTaxableAmount = creditNote.NonTaxableAmount,
                        TaxAmount        = creditNote.Total_Vat == null ? 0 : creditNote.Total_Vat.Value,
                        TotalAmount      = creditNote.Total_Net_Amount.Value,
                        IsBillActive     = true,
                        IsBillPrinted    = false,
                        PrintedTime      = DateTime.Now,
                        PrintedBy        = "",
                        EnteredBy        = creditNote.Created_By,
                        SyncStatus       = "Not Started",
                        SyncedDate       = DateTime.Now,
                        SyncedTime       = DateTime.Now.TimeOfDay,
                        SyncWithIrd      = false,
                        IsRealTime       = false
                    };

                    InvoiceMaterializedView invoiceMaterializedView = _context.InvoiceMaterializedView.FirstOrDefault(x => x.BillNo == creditNote.Reference_Number.Trim());
                    invoiceMaterializedView.IsBillActive          = false;
                    _context.Entry(invoiceMaterializedView).State = EntityState.Modified;

                    NavCreditMemo navCreditMemo = new NavCreditMemo()
                    {
                        id                     = creditNote.Id.ToString(),
                        number                 = creditNote.Credit_Note_Number,
                        postingno              = creditNote.Credit_Note_Number,
                        creditMemoDate         = creditNote.Trans_Date_Ad.Value.ToString("yyyy-MM-dd"),
                        customerNumber         = creditNote.MemberId,
                        customerName           = creditNote.Customer_Name,
                        vatregistrationnumber  = creditNote.Customer_Vat,
                        locationcode           = store.INITIAL,
                        accountabilitycenter   = store.INITIAL,
                        assigneduserid         = creditNote.Created_By,
                        externalDocumentNumber = creditNote.Reference_Number,
                        amountrounded          = creditNote.IsRoundup,
                        returnremarks          = creditNote.Credit_Note
                    };
                    _context.InvoiceMaterializedView.Add(view);
                    _context.SaveChanges();

                    //post to ird
                    //background task
                    BackgroundJob.Enqueue(() => SendDataToIRD(creditNote, store));
                    //Send data to NAV
                    Config config = ConfigJSON.Read();
                    if (!config.StopCreditNotePosting)
                    {
                        NavPostData navPostData = new NavPostData(_context, _mapper);
                        BackgroundJob.Enqueue(() => navPostData.PostCreditNote(navCreditMemo));
                    }

                    //for api return
                    TempData["StatusMessage"] = "Credit Note Added Successfully";
                    return(Ok(new { redirectUrl = "/CreditNote", Message = "Credit Note Added Successfully", InvoiceData = creditNote, StoreData = store }));
                }
                catch (Exception ex)
                {
                    if (ex.Message.Contains("UniqueCreditNoteNumber") || ex.InnerException.Message.Contains("UniqueCreditNoteNumber"))
                    {
                        return(await Index(creditNote));
                    }
                }
            }
            return(View(creditNote));
        }
Пример #9
0
        public void Execute(IJobExecutionContext context)
        {
            DateTime today = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, 0);
            bool     has_send;
            string   send_cards_str = "";

            using (DataContext _db = new DataContext())
            {
                var   _params = _db.Params.ToList();
                int   budget_invoice_invoice_day = int.Parse(_params.First(c => c.Name == "BudgetAbonentInvoiceDay").Value);
                int[] invoice_send_intervals     = _params.Where(c => c.Name == "InvoiceSendIntervals").Select(c => c.Value).First().Split(';').Select(c => int.Parse(c)).ToArray();

                string system_email          = _params.First(p => p.Name == "SystemEmail").Value;
                string system_email_password = _params.First(p => p.Name == "SystemEmailPassword").Value;
                string invoice_text          = _params.First(p => p.Name == "InvoiceText").Value;

                var abonents = _db.Customers.Where(c => c.Type == Models.CustomerType.Juridical)
                               .Where(c => c.Cards.Any(cc => cc.AutoInvoice && cc.CardStatus == CardStatus.Active)).Select(c => new
                {
                    AbonentName    = c.Name,
                    AbonentCode    = c.Code,
                    AbonentAddress = c.City + ", " + c.Address,
                    AbonentPhone   = c.Phone1,
                    AbonentEmail   = c.Email,
                    IsBudget       = c.IsBudget,
                    Id             = c.Id,
                    Cards          = c.Cards.Where(cc => cc.AutoInvoice).Select(cc => new
                    {
                        FinishDate = cc.FinishDate,
                        AbonentNum = cc.AbonentNum,
                        Id         = cc.Id,
                        Amount     = cc.Subscribtions.FirstOrDefault(s => s.Status).Amount
                    }).ToList()
                }).ToList();

                InvoicePdf         _invoice      = new InvoicePdf();
                List <LoggingItem> logging_items = new List <LoggingItem>();

                foreach (var abonent in abonents)
                {
                    InvoicePrint _invoicePrint = new InvoicePrint
                    {
                        AbonentAddress = abonent.AbonentAddress,
                        AbonentCode    = abonent.AbonentCode,
                        AbonentEmail   = abonent.AbonentEmail,
                        AbonentName    = abonent.AbonentName,
                        AbonentPhone   = abonent.AbonentPhone,
                        AbonentId      = abonent.Id,
                        StartDate      = today,
                        EndDate        = today.AddMonths(1),
                        Items          = new List <InvoicePrintItem>()
                    };

                    has_send = false;

                    if (abonent.IsBudget)
                    {
                        if (today.Day == budget_invoice_invoice_day)
                        {
                            int[] ids = abonent.Cards.Select(c => c.Id).ToArray();
                            _invoicePrint.Items.Add(new InvoicePrintItem {
                                Amount = abonent.Cards.Sum(c => c.Amount), Name = "სააბონენტო გადასახადი - " + String.Join(",", abonent.Cards.Select(c => c.AbonentNum))
                            });
                            _invoicePrint.Items.Add(new InvoicePrintItem {
                                Amount = (double)(_db.CardServices.Where(c => ids.Contains(c.CardId)).Where(c => c.IsActive).Sum(c => (decimal?)c.Amount) ?? 0), Name = "გაწეული მომსახურება"
                            });

                            has_send       = true;
                            send_cards_str = String.Join(",", abonent.Cards.Select(c => c.AbonentNum));
                        }
                    }
                    else
                    {
                        var send_cards = abonent.Cards.Where(c => invoice_send_intervals.Contains((c.FinishDate - today).Days)).ToList();
                        if (send_cards.Count > 0)
                        {
                            int[] ids = send_cards.Select(c => c.Id).ToArray();
                            _invoicePrint.Items.Add(new InvoicePrintItem {
                                Amount = send_cards.Sum(c => c.Amount), Name = "სააბონენტო გადასახადი - " + String.Join(",", send_cards.Select(c => c.AbonentNum))
                            });
                            _invoicePrint.Items.Add(new InvoicePrintItem {
                                Amount = (double)(_db.CardServices.Where(c => ids.Contains(c.CardId)).Where(c => c.IsActive).Sum(c => (decimal?)c.Amount) ?? 0), Name = "გაწეული მომსახურება"
                            });

                            has_send       = true;
                            send_cards_str = String.Join(",", send_cards.Select(c => c.AbonentNum));
                        }
                    }


                    if (has_send)
                    {
                        Invoice last_inv = _db.Invoices.OrderByDescending(c => c.Id).FirstOrDefault();
                        _invoicePrint.Num = last_inv == null?Utils.Utils.GetInvoiceNum("I0", DateTime.Now.Year) : Utils.Utils.GetInvoiceNum(last_inv.Num, last_inv.Tdate.Year);

                        _invoice.InvoiceData = _invoicePrint;
                        string file_short_name = "";
                        string file_name       = new InvoicePdf()
                        {
                            InvoiceData = _invoicePrint
                        }.Generate();
                        if (file_name == string.Empty)
                        {
                            _db.ChargeCrushLogs.Add(new ChargeCrushLog
                            {
                                Date               = today,
                                CardNum            = abonent.AbonentName,
                                ChargeCrushLogType = Models.ChargeCrushLogType.InvoiceNotSend,
                                Text               = "აბონენტი: " + abonent.AbonentName + ";" + abonent.AbonentEmail
                            });
                            continue;
                        }

                        bool res = Utils.Utils.SendEmail(new List <string>()
                        {
                            file_name
                        }, "GlobalTV ინვოისი", "mail." + system_email.Split('@')[1], 25, false, system_email,
                                                         system_email.Split('@')[0], system_email_password, new List <string>()
                        {
                            _invoicePrint.AbonentEmail
                        }, new List <string>(), invoice_text);
                        if (!res)
                        {
                            _db.ChargeCrushLogs.Add(new ChargeCrushLog
                            {
                                Date               = today,
                                CardNum            = abonent.AbonentName,
                                ChargeCrushLogType = Models.ChargeCrushLogType.InvoiceNotSend,
                                Text               = "აბონენტი: " + abonent.AbonentName + ";" + abonent.AbonentEmail
                            });
                            System.IO.File.Delete(file_name);
                            continue;
                        }

                        file_short_name = file_name.Substring(file_name.LastIndexOf('\\') + 1);
                        try
                        {
                            FileInfo fi = new System.IO.FileInfo(file_name);
                            Stream   fs = fi.OpenRead();
                            Utils.Utils.UploadFile(fs, _params.First(p => p.Name == "FTPHost").Value + "invoce/", _params.First(p => p.Name == "FTPLogin").Value, _params.First(p => p.Name == "FTPPassword").Value, file_short_name);
                            fs.Close();
                        }
                        catch (Exception ex)
                        {
                            _db.ChargeCrushLogs.Add(new ChargeCrushLog
                            {
                                Date               = today,
                                CardNum            = abonent.AbonentName,
                                ChargeCrushLogType = Models.ChargeCrushLogType.InvoiceNotSend,
                                Text               = "აბონენტი: " + abonent.AbonentName + ";" + abonent.AbonentEmail
                            });
                            continue;
                        }
                        finally
                        {
                            System.IO.File.Delete(file_name);
                        }

                        Invoice _inv = new Invoice
                        {
                            CustomerId  = _invoicePrint.AbonentId,
                            Num         = _invoicePrint.Num,
                            Tdate       = DateTime.Now,
                            FileName    = file_short_name,
                            AbonentNums = send_cards_str
                        };
                        _db.Invoices.Add(_inv);

                        logging_items.Add(new LoggingItem {
                            ColumnDisplay = "ინვოისი", OldValue = abonent.AbonentName, NewValue = abonent.AbonentCode
                        });
                    }
                }

                this.AddLoging(_db, LogType.Invoice, LogMode.Add, 1, 0, "ავტომატური ინვოისი", logging_items);
                _db.SaveChanges();
            }
        }
Пример #10
0
 private void B_Print_Click(object sender, EventArgs e)
 {
     InvoicePrint.Print(Form, SqlHandler.GetInvoicesPrint(GetInvoices()));
 }
Пример #11
0
        public IActionResult Billing([FromBody] SalesInvoiceBillingViewModel model)
        {
            try
            {
                //check if billing is not available
                if (model == null || model.bill.Count() == 0)
                {
                    return(NotFound());
                }

                //Check from salesInvoiceTmp table
                SalesInvoiceTmp salesInvoiceTmp = _context.SalesInvoiceTmp.FirstOrDefault(x => x.Id == model.salesInvoiceId);
                if (salesInvoiceTmp == null)
                {
                    return(NotFound());
                }


                using (var trans = _context.Database.BeginTransaction())
                {
                    SalesInvoice salesInvoice = new SalesInvoice();
                    try
                    {
                        //get store info
                        Store store = JsonConvert.DeserializeObject <Store>(HttpContext.Session.GetString("Store"));
                        //convert to sales invoice and save


                        //if (_context.ChangeTracker.HasChanges(.Any(x => x.Id == model.salesInvoiceId))
                        //    salesInvoice = _context.SalesInvoice.FirstOrDefault(x => x.Id == model.salesInvoiceId);
                        //else
                        salesInvoice    = _mapper.Map <SalesInvoice>(salesInvoiceTmp);
                        salesInvoice.Id = Guid.NewGuid();

                        salesInvoice.Total_Bill_Discount      = model.billDiscount;
                        salesInvoice.Total_Payable_Amount     = model.totalPayable;
                        salesInvoice.Total_Net_Amount_Roundup = model.totalNetAmountRoundUp;
                        salesInvoice.Tender_Amount            = model.tenderAmount;
                        salesInvoice.Change_Amount            = model.changeAmount;
                        salesInvoice.Invoice_Id     = _context.SalesInvoice.Where(x => x.Trans_Type == salesInvoice.Trans_Type).Select(x => x.Invoice_Id).DefaultIfEmpty(0).Max() + 1;
                        salesInvoice.Invoice_Number = SalesInvoiceNumberFormat(store, salesInvoice.Invoice_Id, salesInvoice.Trans_Type);
                        _context.SalesInvoice.Add(salesInvoice);


                        //get invoice items temp convert to sales invoice item and save them
                        IList <SalesInvoiceItemsTmp> itemtmp = _context.SalesInvoiceItemsTmp.Where(x => x.Invoice_Id == salesInvoiceTmp.Id).ToList();
                        foreach (var item in itemtmp)
                        {
                            item.Invoice = null;
                            SalesInvoiceItems salesItem = _mapper.Map <SalesInvoiceItems>(item);
                            salesItem.Id             = 0;
                            salesItem.Invoice_Id     = salesInvoice.Id;
                            salesItem.Invoice_Number = salesInvoice.Invoice_Number;
                            _context.SalesInvoiceItems.Add(salesItem);
                        }
                        _context.SaveChanges();

                        //check session
                        Settlement oldSettlement = _context.Settlement.FirstOrDefault(x => x.UserId == salesInvoice.Created_By && x.Status == "Open");
                        string     sessionId     = oldSettlement != null ? oldSettlement.SessionId : Guid.NewGuid().ToString();
                        string     crNumber      = salesInvoice.Invoice_Number;
                        //save bill amount information
                        foreach (var item in model.bill)
                        {
                            item.Invoice_Id     = salesInvoice.Id;
                            item.Invoice_Number = salesInvoice.Invoice_Number;
                            item.Invoice_Type   = salesInvoice.Trans_Type;
                            item.Terminal       = HttpContext.Session.GetString("Terminal");
                            if (item.Trans_Mode == "Cash")
                            {
                                item.Amount = item.Amount - salesInvoice.Change_Amount;
                            }
                            item.IsNavSync = false;


                            _context.SalesInvoiceBill.Add(item);


                            //if credit note amount is used then update credit note table
                            if (item.Trans_Mode == "Credit Note")
                            {
                                CreditNote creditNote = _context.CreditNote.FirstOrDefault(x => x.Credit_Note_Number == item.Account);
                                crNumber = item.Account;
                                if (creditNote != null)
                                {
                                    creditNote.Created_By            = User.Identity.Name;
                                    creditNote.Created_Date          = DateTime.Now;
                                    creditNote.Remarks               = "Claimed";
                                    _context.Entry(creditNote).State = EntityState.Modified;
                                }
                            }


                            //save to settlement table
                            decimal totalAmount = 0;
                            if (item.Trans_Mode == "Cash")
                            {
                                totalAmount = item.Amount;
                            }
                            else
                            {
                                totalAmount = item.Amount;
                            }

                            Settlement settlement = new Settlement()
                            {
                                SessionId = sessionId,

                                TransactionDate   = DateTime.Now,
                                PaymentMode       = item.Trans_Mode,
                                Amount            = item.Amount,
                                Status            = "Open",
                                VerifiedBy        = "",
                                VerifiedDate      = DateTime.Now,
                                TransactionNumber = salesInvoice.Invoice_Number,
                                Remarks           = "",
                                TerminalId        = Convert.ToInt32(HttpContext.Session.GetString("TerminalId")),
                                UserId            = salesInvoice.Created_By
                            };
                            _context.Settlement.Add(settlement);
                        }

                        //save to print table
                        InvoicePrint print = new InvoicePrint()
                        {
                            InvoiceNumber    = salesInvoice.Invoice_Number,
                            Type             = salesInvoice.Trans_Type,
                            FirstPrintedDate = DateTime.Now,
                            FirstPrintedBy   = User.Identity.Name,
                            PrintCount       = 1
                        };
                        _context.InvoicePrint.Add(print);



                        _context.SaveChanges();

                        //if everything seems good, then delete salesInvoiceTmp
                        _context.Remove(salesInvoiceTmp);

                        //total amount excludevat
                        decimal totalRateExcludeVat = 0;
                        foreach (var i in salesInvoice.SalesInvoiceItems)
                        {
                            totalRateExcludeVat += i.RateExcludeVat * i.Quantity.Value;
                        }
                        // salesInvoice.SalesInvoiceItems.Select(x => x.RateExcludeVat).Sum();

                        //save to invoiceMaterialview
                        InvoiceMaterializedView view = new InvoiceMaterializedView()
                        {
                            BillNo           = salesInvoice.Invoice_Number,
                            DocumentType     = salesInvoice.Trans_Type + " Invoice",
                            FiscalYear       = store.FISCAL_YEAR,
                            LocationCode     = store.INITIAL,
                            BillDate         = salesInvoice.Trans_Date_Ad.Value,
                            PostingTime      = salesInvoice.Trans_Time.Value,
                            CustomerCode     = salesInvoice.Customer_Id,
                            CustomerName     = salesInvoice.Customer_Name,
                            Vatno            = salesInvoice.Customer_Vat,
                            Amount           = totalRateExcludeVat,
                            Discount         = salesInvoice.TOTAL_DISCOUNT_EXC_VAT,
                            TaxableAmount    = salesInvoice.TaxableAmount,
                            NonTaxableAmount = salesInvoice.NonTaxableAmount,
                            TaxAmount        = salesInvoice.Total_Vat.Value,
                            TotalAmount      = salesInvoice.Total_Net_Amount.Value,
                            IsBillActive     = true,
                            IsBillPrinted    = true,
                            PrintedBy        = User.Identity.Name,
                            PrintedTime      = DateTime.Now,
                            EnteredBy        = salesInvoice.Created_By,
                            SyncStatus       = "Not Started",
                            SyncedDate       = DateTime.Now,
                            SyncedTime       = DateTime.Now.TimeOfDay,
                            SyncWithIrd      = false,
                            IsRealTime       = false
                        };
                        NavSalesInvoice navSalesInvoice = new NavSalesInvoice()
                        {
                            id                     = salesInvoice.Id.ToString(),
                            number                 = salesInvoice.Invoice_Number,
                            postingno              = salesInvoice.Invoice_Number,
                            shippingno             = salesInvoice.Invoice_Number,
                            orderDate              = salesInvoice.Trans_Date_Ad.Value.ToString("yyyy-MM-dd"),
                            customerNumber         = salesInvoice.MemberId,
                            customerName           = salesInvoice.Customer_Name,
                            vatregistrationnumber  = salesInvoice.Customer_Vat,
                            locationcode           = store.INITIAL,
                            accountabilitycenter   = store.INITIAL,
                            assigneduserid         = salesInvoice.Created_By,
                            externalDocumentNumber = crNumber,
                            amountrounded          = salesInvoice.Total_Net_Amount != salesInvoice.Total_Payable_Amount
                        };



                        _context.InvoiceMaterializedView.Add(view);
                        _context.SaveChanges();

                        trans.Commit();
                        //*********** background task
                        Config config = ConfigJSON.Read();
                        //Send data to IRD
                        if (!config.StopPostingIRD)
                        {
                            BackgroundJob.Enqueue(() => SendDataToIRD(salesInvoice, store));
                        }
                        //Send data to NAV

                        if (!config.StopInvoicePosting)
                        {
                            NavPostData navPostData = new NavPostData(_context, _mapper);
                            BackgroundJob.Enqueue(() => navPostData.PostSalesInvoice(navSalesInvoice));
                        }



                        //TempData["StatusMessage"] = "Bill Payment Successfull !!";
                        return(Ok(new { StatusMessage = "Bill Payment Successfull !!", InvoiceData = salesInvoice, StoreData = store, BillData = model.bill }));
                    }
                    catch (Exception ex)
                    {
                        trans.Rollback();
                        if (ex.Message.Contains("UniqueInvoiceNumber") || ex.InnerException.Message.Contains("UniqueInvoiceNumber"))
                        {
                            _context.Entry(salesInvoice).State = EntityState.Detached;
                            return(Billing(model));
                        }
                        else
                        {
                            return(BadRequest(ex.Message));
                        }
                    }
                };
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }