Пример #1
0
 public VoucherSalesInvoiceVM()
 {
     try
     {
         MessageBoxCaption = "Voucher Sales Invoice";
         nepDate           = new DateConverter(GlobalClass.TConnectionString);
         CurDate           = DateTime.Today;
         CurTime           = DateTime.Now.ToString("hh:mm tt");
         VSDetail          = new TParkingSalesDetails();
         VSDetailList      = new ObservableCollection <TParkingSalesDetails>();
         VSDetailList.CollectionChanged += VSDetailList_CollectionChanged;
         timer          = new DispatcherTimer();
         timer.Interval = new TimeSpan(0, 0, 1);
         timer.Tick    += timer_Tick;
         timer.Start();
         NewCommand   = new RelayCommand(ExecuteNew);
         SaveCommand  = new RelayCommand(ExecuteSave, CanExecuteSave);
         UndoCommand  = new RelayCommand(ExecuteUndo);
         PrintCommand = new RelayCommand(ExecutePrint, CanExecutePrint);
         SetAction(ButtonAction.Init);
         using (SqlConnection conn = new SqlConnection(GlobalClass.TConnectionString))
         {
             VTypeList    = new ObservableCollection <VoucherType>(conn.Query <VoucherType>("SELECT VoucherId, VoucherName, Rate, Value, ValidStart, ValidEnd, Validity, VoucherInfo, SkipVoucherGeneration, ISNULL(NonVat,0 ) NonVat FROM VoucherTypes"));
             CustomerList = new ObservableCollection <Party>(conn.Query <Party>("SELECT DISTINCT BillTo Name, BillToAdd Address, BillToPan PAN FROM ParkingSales where BillTo IS NOT NULL"));
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(GlobalClass.GetRootException(ex).Message, MessageBoxCaption, MessageBoxButton.OK, MessageBoxImage.Error);
     }
 }
Пример #2
0
 private void ExecuteUndo(object obj)
 {
     VSales       = new TParkingSales();
     VSDetail     = new TParkingSalesDetails();
     VSDetailList = new ObservableCollection <TParkingSalesDetails>();
     VSDetailList.CollectionChanged += VSDetailList_CollectionChanged;
     VSDetail.PropertyChanged       += VSDetail_PropertyChanged;
     FocusedElement = (short)Focusable.Invoice;
     InvoiceNo      = string.Empty;
     SetAction(ButtonAction.Init);
     OnPropertyChanged("IsEntryMode");
 }
Пример #3
0
        private void AddVoucher(object obj)
        {
            if (VSDetail.ProdId == 0)
            {
                MessageBox.Show("Please Select a Voucher first.", MessageBoxCaption, MessageBoxButton.OK, MessageBoxImage.Exclamation);
                return;
            }
            else if (VSDetail.Quantity == 0)
            {
                MessageBox.Show("Please enter the quantity first.", MessageBoxCaption, MessageBoxButton.OK, MessageBoxImage.Exclamation);
                return;
            }
            else if (VSDetailList.Any(x => x.ProdId == VSDetail.ProdId))
            {
                MessageBox.Show("Selected Voucher is already added.", MessageBoxCaption, MessageBoxButton.OK, MessageBoxImage.Exclamation);
                return;
            }
            GenerateVoucher = !SelectedVoucherType.SkipVoucherGeneration;
            var vsDetail = new TParkingSalesDetails
            {
                FYID        = GlobalClass.FYID,
                PType       = 'V',
                ProdId      = VSDetail.ProdId,
                Description = VSDetail.Description,
                Quantity    = VSDetail.Quantity,
                QuantityStr = VSDetail.QuantityStr,
                Rate        = VSDetail.Rate,
                RateStr     = VSDetail.RateStr,
                Amount      = VSDetail.Amount,
                Taxable     = SelectedVoucherType.NonVat ? 0 : VSDetail.Amount,
                NonTaxable  = SelectedVoucherType.NonVat ? VSDetail.Amount :0,
                Remarks     = VSDetail.Remarks
            };

            vsDetail.VAT       = vsDetail.Taxable * GlobalClass.VAT / 100;
            vsDetail.NetAmount = vsDetail.Amount + vsDetail.VAT;
            VSDetailList.Add(vsDetail);
            VSDetail = new TParkingSalesDetails();
            VSDetail.PropertyChanged += VSDetail_PropertyChanged;
            FocusedElement            = (short)Focusable.VoucherType;
        }
        public FunctionResponse ExecuteSave(BarCodeTransfer obj)
        {
            int            Session   = obj.Session;
            List <Voucher> Vouchers  = obj.Vouchers;
            string         barcode   = obj.barcode;
            MemberDiscount mDiscount = obj.mDiscount;
            ParkingOut     POUT      = obj.POUT;

            GlobalClass.GetUser(POUT.UID);

            string  strSQL;
            decimal Taxable, VAT, Amount, Discount = 0, NonTaxable, Rate, Quantity;
            string  BillNo = string.Empty;

            try
            {
                using (SqlConnection conn = new SqlConnection(ConnectionDbInfo.ConnectionString))
                {
                    conn.Open();
                    using (SqlTransaction tran = conn.BeginTransaction())
                    {
                        POUT.SESSION_ID = Session;
                        POUT.FYID       = GlobalClass.FYID;
                        POUT.Save(tran);
                        if (POUT.CashAmount > 0)
                        {
                            BillNo   = InvoicePrefix + GlobalClass.GetInvoiceNo(InvoicePrefix, tran);
                            Quantity = POUT.ChargedHours;
                            if (Vouchers.Count > 0)
                            {
                                Discount = Vouchers.Sum(x => x.Value);
                            }
                            else if (mDiscount != null && !string.IsNullOrEmpty(mDiscount.MemberId))
                            {
                                Discount = mDiscount.DiscountAmount;
                            }
                            else if (POUT.CashAmount < POUT.ChargedAmount)
                            {
                                Discount = POUT.ChargedAmount - POUT.CashAmount;
                            }
                            Amount     = POUT.ChargedAmount / (1 + (GlobalClass.VAT / 100));
                            Discount   = Discount / (1 + (GlobalClass.VAT / 100));
                            Rate       = Amount / Quantity;
                            NonTaxable = 0;
                            Taxable    = Amount - (NonTaxable + Discount);
                            VAT        = Taxable * GlobalClass.VAT / 100;

                            TParkingSales PSales = new TParkingSales
                            {
                                BillNo      = BillNo,
                                TDate       = POUT.OutDate,
                                TMiti       = POUT.OutMiti,
                                TTime       = POUT.OutTime,
                                BillTo      = POUT.BILLTO,
                                BILLTOADD   = POUT.BILLTOADD,
                                BILLTOPAN   = POUT.BILLTOPAN,
                                Amount      = Amount,
                                Discount    = Discount,
                                NonTaxable  = NonTaxable,
                                Taxable     = Taxable,
                                VAT         = VAT,
                                GrossAmount = POUT.CashAmount,
                                PID         = POUT.PID,
                                UID         = POUT.UID,
                                SESSION_ID  = POUT.SESSION_ID,
                                FYID        = GlobalClass.FYID,
                                TaxInvoice  = TaxInvoice
                            };
                            PSales.Save(tran);
                            TParkingSalesDetails PSalesDetails = new TParkingSalesDetails
                            {
                                BillNo      = BillNo,
                                PType       = 'P',
                                Description = "Parking Charge",
                                FYID        = GlobalClass.FYID,
                                Quantity    = Quantity,
                                Rate        = Rate,
                                Amount      = Amount,
                                Discount    = Discount,
                                NonTaxable  = NonTaxable,
                                Taxable     = Taxable,
                                VAT         = VAT,
                                NetAmount   = POUT.CashAmount,
                            };
                            PSalesDetails.Save(tran);

                            conn.Execute("UPDATE tblSequence SET CurNo = CurNo + 1 WHERE VNAME = @VNAME AND FYID = @FYID", new { VNAME = InvoicePrefix, FYID = GlobalClass.FYID }, transaction: tran);


                            GlobalClass.SetUserActivityLog(tran, "Exit", "New", VCRHNO: BillNo, WorkDetail: "Bill No : " + BillNo);
                            //SyncFunctions.LogSyncStatus(tran, BillNo, GlobalClass.FYNAME);
                        }
                        if (Vouchers.Count > 0)
                        {
                            strSQL = "INSERT INTO VoucherDiscountDetail (BillNo, FYID, VoucherNo, DiscountAmount, UID) VALUES (@BillNo, @FYID, @VoucherNo, @DiscountAmount, @UID)";
                            foreach (Voucher v in Vouchers)
                            {
                                conn.Execute(strSQL, new
                                {
                                    BillNo         = string.IsNullOrEmpty(BillNo) ? "CS1" : BillNo,
                                    FYID           = GlobalClass.FYID,
                                    VoucherNo      = v.VoucherNo,
                                    DiscountAmount = v.Value,
                                    UID            = POUT.UID
                                }, transaction: tran);
                                conn.Execute("UPDATE ParkingVouchers SET ScannedTime = GETDATE() WHERE VoucherNo = @VoucherNo", v, tran);
                            }
                        }
                        else if (mDiscount != null && !string.IsNullOrEmpty(mDiscount.MemberId))
                        {
                            mDiscount.BillNo = string.IsNullOrEmpty(BillNo) ? "MS1" : BillNo;
                            mDiscount.Save(tran);
                        }
                        tran.Commit();
                        //if (!string.IsNullOrEmpty(SyncFunctions.username) && POUT.CashAmount > 0)
                        //{
                        //    SyncFunctions.SyncSalesData(SyncFunctions.getBillObject(BillNo), 1);
                        //}
                    }
                    //if (!string.IsNullOrEmpty(BillNo))
                    //{
                    //    RawPrinterHelper.SendStringToPrinter(GlobalClass.PrinterName, ((char)27).ToString() + ((char)112).ToString() + ((char)0).ToString() + ((char)64).ToString() + ((char)240).ToString(), "Receipt");   //Open Cash Drawer
                    //    PrintBill(BillNo.ToString(), conn, (TaxInvoice) ? "TAX INVOICE" : "ABBREVIATED TAX INVOCE");
                    //    if (TaxInvoice)
                    //    {
                    //        PrintBill(BillNo.ToString(), conn, "INVOICE");
                    //    }
                    //}

                    return(new FunctionResponse()
                    {
                        status = "ok", Message = "Saved Successfully"
                    });
                }
            }
            catch (Exception ex)
            {
                return(new FunctionResponse()
                {
                    status = "error", Message = ex.Message
                });
            }
        }
Пример #5
0
        private void PrintTicket(Graphics G)
        {
            int          i       = 40;
            Pen          LinePen = new Pen(Brushes.Black);
            StringFormat format  = new StringFormat();

            format.Alignment     = StringAlignment.Center;
            format.LineAlignment = StringAlignment.Center;

            G.DrawRectangle(LinePen, new Rectangle(10, 30, PrintWidth - 60, PrintHeight - 90));
            G.DrawLine(LinePen, new Point(10, 150), new Point(PrintWidth - 50, 150));
            G.DrawLine(LinePen, new Point(10, 280), new Point(PrintWidth - 50, 280));
            G.DrawLine(LinePen, new Point(10, 310), new Point(PrintWidth - 50, 310));
            G.DrawLine(LinePen, new Point(10, 800), new Point(PrintWidth - 50, 800));
            G.DrawLine(LinePen, new Point(10, 830), new Point(PrintWidth - 50, 830));
            G.DrawLine(LinePen, new Point(10, 930), new Point(PrintWidth - 50, 930));

            G.DrawLine(LinePen, new Point(60, 280), new Point(60, 830));
            G.DrawLine(LinePen, new Point(450, 280), new Point(450, 830));
            G.DrawLine(LinePen, new Point(550, 280), new Point(550, 930));
            G.DrawLine(LinePen, new Point(650, 280), new Point(650, 800));


            G.DrawString(CompanyName, new Font(new FontFamily(Font), 14, FontStyle.Bold), Brushes.Black, new RectangleF(0, i, PrintWidth, 17), format);
            i += 22;

            G.DrawString(CompanyAddress, new Font(new FontFamily(Font), 9), Brushes.Black, new RectangleF(0, i, PrintWidth, 17), format);
            i += 20;

            G.DrawString("PAN : " + CompanyPan, new Font(new FontFamily(Font), 9), Brushes.Black, new RectangleF(0, i, PrintWidth, 20), format);
            i += 20;

            G.DrawString(InvoiceTitle, new Font(new FontFamily(Font), 10, FontStyle.Bold), Brushes.Black, new RectangleF(0, i, PrintWidth, 20), format);
            i += 20;

            G.DrawString(DuplicateCaption, new Font(new FontFamily(Font), 10), Brushes.Black, new RectangleF(0, i, PrintWidth, 20), format);
            i += 30;

            G.DrawString("Bill No", new Font(new FontFamily(Font), 9), Brushes.Black, new RectangleF(15, i, 100, 20));
            G.DrawString(string.Format(": {0}", PSales.BillNo), new Font(new FontFamily(Font), 9, FontStyle.Bold), Brushes.Black, new RectangleF(105, i, 200, 20));
            G.DrawString("Date", new Font(new FontFamily(Font), 9), Brushes.Black, new RectangleF(PrintWidth - 200, i, 50, 20));
            G.DrawString(": " + PSales.TMiti, new Font(new FontFamily(Font), 9, FontStyle.Bold), Brushes.Black, new RectangleF(PrintWidth - 140, i, 100, 20));
            i += 20;

            G.DrawString("Customer Name", new Font(new FontFamily(Font), 9), Brushes.Black, new RectangleF(15, i, 100, 20));
            G.DrawString(": " + PSales.BillTo, new Font(new FontFamily(Font), 9, FontStyle.Bold), Brushes.Black, new RectangleF(105, i, PrintWidth - 125, 20));
            i += 20;

            G.DrawString("Address", new Font(new FontFamily(Font), 9), Brushes.Black, new RectangleF(15, i, 100, 20));
            G.DrawString(": " + PSales.BILLTOADD, new Font(new FontFamily(Font), 9, FontStyle.Bold), Brushes.Black, new RectangleF(105, i, PrintWidth - 125, 20));
            i += 20;

            G.DrawString("PAN No", new Font(new FontFamily(Font), 9), Brushes.Black, new RectangleF(15, i, 100, 20));
            G.DrawString(": " + PSales.BILLTOPAN, new Font(new FontFamily(Font), 9, FontStyle.Bold), Brushes.Black, new RectangleF(105, i, PrintWidth - 125, 20));
            i += 20;
            G.DrawString("Ref No", new Font(new FontFamily(Font), 9), Brushes.Black, new RectangleF(15, i, 100, 20));
            G.DrawString(": " + PSales.RefBillNo, new Font(new FontFamily(Font), 9, FontStyle.Bold), Brushes.Black, new RectangleF(105, i, PrintWidth - 125, 20));
            i += 20;
            G.DrawString("C/N Remarks", new Font(new FontFamily(Font), 9), Brushes.Black, new RectangleF(15, i, 100, 20));
            G.DrawString(": " + PSales.Remarks, new Font(new FontFamily(Font), 9, FontStyle.Bold), Brushes.Black, new RectangleF(105, i, PrintWidth - 125, 20));

            i += 35;


            G.DrawString("S.N. ", new Font(new FontFamily(Font), 9, FontStyle.Bold), Brushes.Black, new RectangleF(15, i, 50, 20), format);
            G.DrawString("Particulars", new Font(new FontFamily(Font), 9, FontStyle.Bold), Brushes.Black, new RectangleF(60, i, 400, 20), format);
            G.DrawString("Quantity", new Font(new FontFamily(Font), 9, FontStyle.Bold), Brushes.Black, new RectangleF(450, i, 100, 20), format);
            G.DrawString("Rate", new Font(new FontFamily(Font), 9, FontStyle.Bold), Brushes.Black, new RectangleF(550, i, 100, 20), format);
            G.DrawString("Amount", new Font(new FontFamily(Font), 9, FontStyle.Bold), Brushes.Black, new RectangleF(650, i, 120, 20), format);

            i += 25;
            format.Alignment = StringAlignment.Far;
            for (int j = 0; j < PSDetails.Count; j++)
            {
                TParkingSalesDetails psd = PSDetails[j];
                G.DrawString((j + 1).ToString(), new Font(new FontFamily(Font), 9), Brushes.Black, new RectangleF(10, i, 45, 20), format);
                G.DrawString(psd.Description, new Font(new FontFamily(Font), 9), Brushes.Black, new RectangleF(65, i, 400, 20));
                G.DrawString(psd.Quantity.ToString("#0.00"), new Font(new FontFamily(Font), 9), Brushes.Black, new RectangleF(450, i, 95, 20), format);
                G.DrawString(psd.Rate.ToString("#0.00"), new Font(new FontFamily(Font), 9), Brushes.Black, new RectangleF(550, i, 95, 20), format);
                G.DrawString(psd.Amount.ToString("#,##,##0.00"), new Font(new FontFamily(Font), 9), Brushes.Black, new RectangleF(650, i, 120, 20), format);
                i += 18;
            }
            i = 810;
            G.DrawString(PSDetails.Sum(x => x.Quantity).ToString("#0.00"), new Font(new FontFamily(Font), 9, FontStyle.Bold), Brushes.Black, new RectangleF(450, i, 95, 20), format);
            G.DrawString(PSales.Amount.ToString("#,##,##0.00"), new Font(new FontFamily(Font), 9), Brushes.Black, new RectangleF(650, i, 120, 20), format);

            i += 25;
            G.DrawString("In Words :", new Font(new FontFamily(Font), 9, FontStyle.Bold), Brushes.Black, new RectangleF(10, i, 95, 20));
            G.DrawString(InWords, new Font(new FontFamily(Font), 9), Brushes.Black, new RectangleF(10, i + 20, 500, 60));

            G.DrawString("Taxable :", new Font(new FontFamily(Font), 9), Brushes.Black, new RectangleF(550, i, 95, 20));
            G.DrawString(PSales.Taxable.ToString("#,##,##0.00"), new Font(new FontFamily(Font), 9, FontStyle.Bold), Brushes.Black, new RectangleF(650, i, 120, 20), format);
            i += 18;

            G.DrawString("Non Taxable :", new Font(new FontFamily(Font), 9), Brushes.Black, new RectangleF(550, i, 95, 20));
            G.DrawString(PSales.NonTaxable.ToString("#,##,##0.00"), new Font(new FontFamily(Font), 9, FontStyle.Bold), Brushes.Black, new RectangleF(650, i, 120, 20), format);
            i += 18;

            G.DrawString("VAT :", new Font(new FontFamily(Font), 9), Brushes.Black, new RectangleF(550, i, 95, 20));
            G.DrawString(PSales.VAT.ToString("#,##,##0.00"), new Font(new FontFamily(Font), 9, FontStyle.Bold), Brushes.Black, new RectangleF(650, i, 120, 20), format);
            i += 18;

            G.DrawString("Net Amount :", new Font(new FontFamily(Font), 9), Brushes.Black, new RectangleF(550, i, 95, 20));
            G.DrawString(PSales.GrossAmount.ToString("#,##,##0.00"), new Font(new FontFamily(Font), 9, FontStyle.Bold), Brushes.Black, new RectangleF(650, i, 120, 20), format);
            i += 18;


            G.DrawLine(LinePen, new Point(45, 1075), new Point(205, 1075));
            G.DrawString("Prepared By : " + PSales.Description, new Font(new FontFamily(Font), 9), Brushes.Black, new RectangleF(50, 1080, 200, 20));

            G.DrawLine(LinePen, new Point(PrintWidth - 225, 1075), new Point(PrintWidth - 65, 1075));
            G.DrawString("Received By", new Font(new FontFamily(Font), 9), Brushes.Black, new RectangleF(PrintWidth - 220, 1080, 150, 20));

            //G.DrawString(PIN.VType.Description, new Font(new FontFamily("Segoe UI"), 11, FontStyle.Bold), Brushes.Black, new RectangleF(0, i, 300, 18), format);
            //i += 20;
            //G.DrawString(string.Format("Date : {0} ({1})", PIN.InDate.ToString("MM/dd/yyyy"), PIN.InMiti), new Font(new FontFamily("Segoe UI"), 9), Brushes.Black, new RectangleF(10, i, 300, 18));
            //i += 17;
            //G.DrawString(string.Format("Time : {0}", PIN.InTime), new Font(new FontFamily("Segoe UI"), 9), Brushes.Black, new RectangleF(10, i, 300, 18));

            //if (!string.IsNullOrEmpty(PIN.PlateNo))
            //{
            //    i += 17;
            //    G.DrawString(string.Format("Plate No : {0}", PIN.PlateNo), new Font(new FontFamily("Segoe UI"), 9), Brushes.Black, new RectangleF(10, i, 300, 18));
            //}

            //i += 22;

            //Barcode barcode = new Barcode()
            //{
            //    Alignment = AlignmentPositions.CENTER,
            //    Width = 250,
            //    Height = 50,
            //    RotateFlipType = RotateFlipType.RotateNoneFlipNone,
            //    BackColor = Color.White,
            //    ForeColor = Color.Black,
            //    LabelFont = new Font(new FontFamily("Segoe UI"), 8)
            //};

            //Image img = barcode.Encode(TYPE.CODE128, PIN.Barcode);

            //G.DrawImage(img, new Point(10, i));
            //i += 50;
            //format.Alignment = StringAlignment.Center;
            //G.DrawString(PIN.Barcode, new Font(new FontFamily("Segoe UI"), 9), Brushes.Black, new RectangleF(10, i, 290, 24), format);
            //i += 15;

            //G.DrawString("For your own convenience, Please do not loose this slip.", new Font(new FontFamily("Segoe UI"), 7), Brushes.Black, new RectangleF(10, i, 290, 24), format);
            //i += 25;

            //G.DrawString("Terms & conditions:", new Font(new FontFamily("Segoe UI Semibold"), 5), Brushes.Black, new RectangleF(10, i, 300, 10));
            //i += 12;

            //int Sno = 1;
            //foreach (PSlipTerms tc in GlobalClass.TCList)
            //{
            //    G.DrawString(string.Format("{0}. {1}", Sno, tc.Description), new Font(new FontFamily("Segoe UI"), 5), Brushes.Black, new RectangleF(10, i, 290, tc.Height));
            //    Sno++;
            //    i += tc.Height;
            //}
        }
Пример #6
0
        private void ExecuteSave(object obj)
        {
            string  strSQL;
            decimal Taxable, VAT, Amount, Discount, NonTaxable, Rate, Quantity;
            string  BillNo = string.Empty;

            try
            {
                using (SqlConnection conn = new SqlConnection(GlobalClass.TConnectionString))
                {
                    conn.Open();
                    using (SqlTransaction tran = conn.BeginTransaction())
                    {
                        //PIN.PID = conn.ExecuteScalar<int>("SELECT CurNo FROM tblSequence WHERE VNAME = 'PID' AND FYID = " + GlobalClass.FYID, transaction: tran);
                        PIN.PID     = Convert.ToInt32(GetInvoiceNo("PID", tran));
                        PIN.Barcode = string.Empty;
                        PIN.Save(tran);
                        POUT.PID = PIN.PID;
                        POUT.Save(tran);
                        if (POUT.CashAmount > 0)
                        {
                            BillNo     = InvoicePrefix + GetInvoiceNo(InvoicePrefix, tran);
                            Quantity   = POUT.ChargedHours;
                            Amount     = POUT.CashAmount / (1 + (GlobalClass.VAT / 100));
                            Rate       = Amount / Quantity;
                            Discount   = 0;
                            NonTaxable = 0;
                            Taxable    = Amount - (NonTaxable + Discount);
                            VAT        = Taxable * GlobalClass.VAT / 100;
                            TParkingSales PSales = new TParkingSales
                            {
                                BillNo      = BillNo,
                                TDate       = POUT.OutDate,
                                TMiti       = POUT.OutMiti,
                                TTime       = POUT.OutTime,
                                BillTo      = POUT.BILLTO,
                                BILLTOADD   = POUT.BILLTOADD,
                                BILLTOPAN   = POUT.BILLTOPAN,
                                Amount      = Amount,
                                Discount    = Discount,
                                NonTaxable  = NonTaxable,
                                Taxable     = Taxable,
                                VAT         = VAT,
                                GrossAmount = POUT.CashAmount,
                                PID         = POUT.PID,
                                UID         = POUT.UID,
                                SESSION_ID  = POUT.SESSION_ID,
                                FYID        = GlobalClass.FYID,
                                TaxInvoice  = TaxInvoice
                            };
                            PSales.Save(tran);
                            TParkingSalesDetails PSalesDetails = new TParkingSalesDetails
                            {
                                BillNo      = BillNo,
                                FYID        = GlobalClass.FYID,
                                Quantity    = Quantity,
                                Rate        = Rate,
                                Amount      = Amount,
                                Discount    = Discount,
                                NonTaxable  = NonTaxable,
                                Taxable     = Taxable,
                                VAT         = VAT,
                                NetAmount   = POUT.CashAmount,
                                ProdId      = 0,
                                Description = "Parking Charge",
                                PType       = 'P'
                            };
                            PSalesDetails.Save(tran);

                            conn.Execute("UPDATE tblSequence SET CurNo = CurNo + 1 WHERE VNAME = 'PID' AND FYID = " + GlobalClass.FYID, transaction: tran);
                            conn.Execute("UPDATE tblSequence SET CurNo = CurNo + 1 WHERE VNAME = @VNAME AND FYID = @FYID", new { VNAME = InvoicePrefix, FYID = GlobalClass.FYID }, transaction: tran);
                            GlobalClass.SetUserActivityLog("Exit", "New", VCRHNO: BillNo, WorkDetail: "PID : " + PIN.PID);
                            SyncFunctions.LogSyncStatus(tran, BillNo, GlobalClass.FYNAME);
                        }
                        tran.Commit();
                        if (!string.IsNullOrEmpty(SyncFunctions.username))
                        {
                            SyncFunctions.SyncSalesData(SyncFunctions.getBillObject(BillNo), 1);
                        }
                    }
                    if (!string.IsNullOrEmpty(BillNo))
                    {
                        if (!GlobalClass.NoRawPrinter)
                        {
                            RawPrinterHelper.SendStringToPrinter(GlobalClass.PrinterName, ((char)27).ToString() + ((char)112).ToString() + ((char)0).ToString() + ((char)64).ToString() + ((char)240).ToString(), "Receipt");   //Open Cash Drawer
                        }
                        POutVMTouch.PrintBill(BillNo.ToString(), conn, (TaxInvoice) ? "TAX INVOICE" : "ABBREVIATED TAX INVOCE");
                        if (TaxInvoice)
                        {
                            POutVMTouch.PrintBill(BillNo.ToString(), conn, "INVOICE");
                        }
                    }
                    ExecuteUndo(null);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, MessageBoxCaption, MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }