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); } }
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"); }
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 }); } }
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; //} }
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); } }