public decimal CalculateTotalPayable(IEnumerable <Item> items, Membership member, string promoCode) { var memberDiscountPercentage = MemberDiscount.GetInPercentage(member); var promoDiscountPercentage = PromoCodeDiscount.GetInPercentage(promoCode); var totalPayable = items.Sum(item => ItemSalePrice.Calculate(item, memberDiscountPercentage, promoDiscountPercentage)); this.loggingService.Log(LogLevel.Info, $"logging info"); return(totalPayable); }
public void Gets_discounts_per_type_of_membership( MemberType memberType, int expectedDiscount) { var member = new Membership { Type = memberType }; var actual = MemberDiscount.GetInPercentage(member); Assert.AreEqual(actual, expectedDiscount); }
public async void ExecuteFinishCommand() { try { if (PIN == null || POUT == null) { DependencyService.Get <IMessage>().ShortAlert("No Vehicle to exit"); return; } if (POUT.PID == 0 || PIN.PID == 0) { DependencyService.Get <IMessage>().ShortAlert("No vehicle entered to exit."); return; } var ans = await App.Current.MainPage.DisplayAlert("Confirm", "Are you sure to Exit Vehicle?", "Yes", "No"); if (!ans) { return; } IsLoading = true; var transferData = new BarCodeTransfer() { barcode = Barcode, Vouchers = Vouchers, mDiscount = mDiscount, PIN = PIN, POUT = POUT, Session = GlobalClass.User.Session }; var res = await ParkingDetailsConnection.SavePOUT(transferData); if (res.status == "ok") { DependencyService.Get <IMessage>().ShortAlert("Vehicle exited Successfully"); POUT = new ParkingOut(); PIN = new ParkingIn(); Vouchers = new List <Voucher>(); mDiscount = new MemberDiscount(); } else if (res.status == "error") { DependencyService.Get <IMessage>().ShortAlert(res.Message); } else { DependencyService.Get <IMessage>().ShortAlert("Error: Server Connection Problem"); } IsLoading = false; } catch (Exception ex) { IsLoading = false; DependencyService.Get <IMessage>().ShortAlert(ex.Message); } }
public HomePageVM() { Test = "Test"; IsLoading = false; LoadingMessage = "Loading!! Please wait....."; Barcode = ""; LoadCommand = new Command(ExecuteLoad); FinishCommand = new Command(ExecuteFinishCommand); StampCommand = new Command(ExecuteStampCommand); StaffCommand = new Command(ExecuteStaffCommand); BackCommand = new Command(ExecuteBackCommand); ViewStaffBarcode = new Command(ExecuteViewStaffBarcode); PIN = new ParkingIn(); POUT = new ParkingOut(); ParkingDetails = new BarCodeTransfer(); Vouchers = new List <Voucher>(); mDiscount = new MemberDiscount(); StaffBarcode = ""; }
public async void ExecuteStaffCommand() { try { //IsStaffBarcode = false; if (string.IsNullOrEmpty(StaffBarcode)) { DependencyService.Get <IMessage>().ShortAlert("Invalid Barcode. Please Try Again"); return; } POUT.SESSION_ID = GlobalClass.User.Session; POUT.STAFF_BARCODE = StaffBarcode; var transferData = new BarCodeTransfer() { barcode = Barcode, Vouchers = Vouchers, mDiscount = mDiscount, PIN = PIN, POUT = POUT, Session = GlobalClass.User.Session }; var res = await ParkingDetailsConnection.SaveStaffOrStampPOUT(transferData); if (res.status == "ok") { IsStaffBarcode = false; DependencyService.Get <IMessage>().ShortAlert("Vehicle exited Successfully"); POUT = new ParkingOut(); PIN = new ParkingIn(); Vouchers = new List <Voucher>(); mDiscount = new MemberDiscount(); } else if (res.status == "error") { DependencyService.Get <IMessage>().ShortAlert(res.Message); } } catch (Exception ex) { DependencyService.Get <IMessage>().ShortAlert(ex.Message); } }
public FunctionResponse ValidateMember(BarCodeTransfer obj) { try { string barcode = obj.barcode; List <Voucher> Vouchers = obj.Vouchers; MemberDiscount mDiscount = obj.mDiscount; ParkingIn PIN = obj.PIN; ParkingOut POUT = obj.POUT; if (mDiscount != null && !string.IsNullOrEmpty(mDiscount.MemberId)) { return new FunctionResponse() { status = "error", Message = "Member already accepted." } } ; TimeSpan InTime = DateTime.Parse(PIN.InTime).TimeOfDay; TimeSpan OutTime = DateTime.Parse(POUT.OutTime).TimeOfDay; decimal DiscountAmount = 0; decimal DiscountHour = 0; int Interval; using (SqlConnection conn = new SqlConnection(GlobalClass.DataConnectionString)) { Member m = conn.Query <Member>("SELECT MemberId, MemberName, SchemeId, ExpiryDate, ActivationDate, Barcode, Address FROM Members WHERE Barcode = @MemberId ", new { MemberId = barcode.ToString() }).FirstOrDefault(); if (m == null) { return(new FunctionResponse() { status = "error", Message = "The member does not exists." }); } else if (m.ActivationDate > POUT.OutDate || m.ExpiryDate < POUT.OutDate) { return(new FunctionResponse() { status = "error", Message = "The membership is expired or not yet activated." }); } MembershipScheme scheme = conn.Query <MembershipScheme>("SELECT * FROM MembershipScheme WHERE SchemeId = @SchemeId", m).FirstOrDefault(); if (scheme == null) { return(new FunctionResponse() { status = "error", Message = "Membership scheme does not exists." }); } else if (!scheme.ValidOnWeekends && POUT.OutDate.DayOfWeek == DayOfWeek.Saturday) { return(new FunctionResponse() { status = "error", Message = "The Membership is not valid on Weekends" }); } else if (!scheme.ValidOnHolidays && conn.ExecuteScalar <int>("SELECT COUNT(*) FROM Holiday WHERE HolidayDate = @HolidayDate", new { HolidayDate = POUT.OutDate }) > 0) { return(new FunctionResponse() { status = "error", Message = "The Membership is not valid on Public Holidays" }); } List <dynamic> TimeSpentInEachSession = GetTimeSpentInEachSession(InTime, OutTime, scheme, PIN); Interval = conn.ExecuteScalar <int>("SELECT ISNULL(SUM(MDD.Interval - MDD.SkipInterval),0) Interval FROM MemberDiscountDetail MDD JOIN ParkingOutDetails POD ON MDD.PID = POD.PID WHERE MemberId = @MemberId AND POD.OutDate = @OutDate", new { MemberId = m.MemberId, OutDate = POUT.OutDate }); if (Interval >= scheme.Limit && !TimeSpentInEachSession.Any(x => x.SkipValidityPeriod && x.TimeSpent > 0)) { return(new FunctionResponse() { status = "error", Message = "Free Entrance for the Member has exceeded for day." }); } mDiscount = new MemberDiscount { MemberId = m.MemberId, SchemeId = m.SchemeId, FYID = POUT.FYID, PID = PIN.PID, }; POUT.BILLTO = m.MemberName; POUT.BILLTOADD = m.Address; if (TimeSpentInEachSession.Any(x => x.SkipValidityPeriod)) { mDiscount.SkipInterval = TimeSpentInEachSession.Where(x => x.SkipValidityPeriod).Sum(x => x.TimeSpent); } int DiscountInterval = scheme.Limit - Interval + mDiscount.SkipInterval; foreach (dynamic session in TimeSpentInEachSession.Where(x => x.TimeSpent > 0)) { if (session.IgnoreLimit) { CalculateParkingCharge(conn, session.Start, session.End, POUT.Rate_ID, PIN.VehicleType, ref DiscountAmount, ref DiscountHour); DiscountInterval -= session.TimeSpent; } else { CalculateParkingCharge(conn, session.Start, (DiscountInterval < session.TimeSpent) ? session.Start.AddMinutes(DiscountInterval) : session.End, POUT.Rate_ID, PIN.VehicleType, ref DiscountAmount, ref DiscountHour); DiscountInterval -= (DiscountInterval < session.TimeSpent) ? DiscountInterval : session.TimeSpent; } mDiscount.Interval += DiscountHour * 60; mDiscount.DiscountAmount += DiscountAmount * scheme.Discount / 100; DiscountHour = 0; DiscountAmount = 0; } POUT.CashAmount = POUT.ChargedAmount = POUT.ChargedAmount - mDiscount.DiscountAmount; obj.mDiscount = mDiscount; return(new FunctionResponse() { status = "ok", result = obj }); } //if (POUT.CashAmount == 0) // ExecuteSave(null); //PoleDisplay.WriteToDisplay(POUT.CashAmount, PoleDisplayType.AMOUNT); }catch (Exception ex) { return(new FunctionResponse() { status = "error", Message = ex.Message }); } }
public FunctionResponse ValidateVoucher(BarCodeTransfer obj) { try { string barcode = obj.barcode; List <Voucher> Vouchers = obj.Vouchers; MemberDiscount mDiscount = obj.mDiscount; ParkingIn PIN = obj.PIN; ParkingOut POUT = obj.POUT; if (Vouchers.Any(x => x.Barcode.ToUpper() == barcode.ToUpper().ToString())) { return new FunctionResponse() { status = "error", Message = "Voucher already accepted." } } ; using (SqlConnection conn = new SqlConnection(GlobalClass.DataConnectionString)) { Voucher v = conn.Query <Voucher>("SELECT VoucherNo, Barcode, VoucherId, Value, ExpDate, ValidStart, ValidEnd, ScannedTime FROM ParkingVouchers WHERE Barcode = @Barcode", new { Barcode = barcode.ToString() }).FirstOrDefault(); if (v == null) { return(new FunctionResponse() { status = "error", Message = "InValid Voucher" }); } else if (v.ScannedTime == null) { return(new FunctionResponse() { status = "error", Message = "Voucher already redeemed." }); } else if (!VoucherTypes.Any(x => x.VoucherId == v.VoucherId && x.VehicleType == PIN.VehicleType)) { return(new FunctionResponse() { status = "error", Message = "The Voucher is not valid for current Entrance Type." }); } else if (v.ExpDate < CurDate) { return(new FunctionResponse() { status = "error", Message = "Voucher has expired." }); } else { TimeSpan outTime = Convert.ToDateTime(POUT.OutTime).TimeOfDay; if (v.ValidStart < v.ValidEnd) { if (outTime < v.ValidStart || outTime > v.ValidEnd) { return(new FunctionResponse() { status = "error", Message = "Voucher is not valid for current Shift." }); } } else { if (outTime < v.ValidStart && outTime > v.ValidEnd) { return(new FunctionResponse() { status = "error", Message = "Voucher is not valid for current Shift." }); } } v.Value = (POUT.ChargedAmount > v.Value) ? v.Value : POUT.ChargedAmount; POUT.CashAmount = POUT.CashAmount - v.Value; //PIN.Barcode = string.Empty; Vouchers.Add(v); return(new FunctionResponse() { status = "ok", result = obj }); //if (POUT.CashAmount == 0) // ExecuteSave(null); //PoleDisplay.WriteToDisplay(POUT.CashAmount, PoleDisplayType.AMOUNT); } } }catch (Exception ex) { return(new FunctionResponse() { status = "error", Message = ex.Message }); } }
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 }); } }
public async void ExecuteLoad() { try { if (string.IsNullOrEmpty(Barcode)) { DependencyService.Get <IMessage>().ShortAlert("Enter Correct barcode "); return; } IsLoading = true; var res = new FunctionResponse(); if (Barcode.ToString().StartsWith("#")) { if (POUT.PID == 0) { DependencyService.Get <IMessage>().ShortAlert("Voucher cannot be accepted. No Vehicle barcode scanned."); IsLoading = false; return; } if (Vouchers.Any(x => x.Barcode.ToUpper() == Barcode.ToUpper().ToString())) { DependencyService.Get <IMessage>().ShortAlert("Voucher already Accepted."); IsLoading = false; return; } var transferData = new BarCodeTransfer() { barcode = Barcode.ToUpper(), Vouchers = Vouchers, mDiscount = mDiscount, PIN = PIN, POUT = POUT }; res = await ParkingDetailsConnection.UploadVoucherCode(transferData); if (res.status == "ok") { DependencyService.Get <IMessage>().ShortAlert("Voucher Discount applied Successfully"); } } else if (Barcode.ToUpper().ToString().StartsWith(GlobalClass.MemberBarcodePrefix)) { if (POUT.PID == 0) { DependencyService.Get <IMessage>().LongAlert("MemberCard cannot be accepted. No Vehicle barcode scanned."); IsLoading = false; return; } if (mDiscount != null && !string.IsNullOrEmpty(mDiscount.MemberId)) { DependencyService.Get <IMessage>().ShortAlert("Member already Accepted."); IsLoading = false; return; } var transferData = new BarCodeTransfer() { barcode = Barcode.ToUpper(), Vouchers = Vouchers, mDiscount = mDiscount, PIN = PIN, POUT = POUT }; res = await ParkingDetailsConnection.UploadMemberCode(transferData); if (res.status == "ok") { DependencyService.Get <IMessage>().ShortAlert("Member Discount applied successfully"); } } else { var transferData = new BarCodeTransfer() { barcode = Barcode.ToUpper(), PIN = PIN, POUT = POUT }; res = await ParkingDetailsConnection.LoadParkingOutAsync(transferData); if (res.status == "error") { PIN = new ParkingIn(); POUT = new ParkingOut(); Vouchers = new List <Voucher>(); mDiscount = new MemberDiscount(); } if (res.status == "ok") { DependencyService.Get <IMessage>().ShortAlert("Details Loaded Successfully"); } } if (res.status == "ok") { ParkingDetails = JsonConvert.DeserializeObject <BarCodeTransfer>(res.result.ToString()); if (ParkingDetails != null) { PIN = ParkingDetails.PIN; POUT = ParkingDetails.POUT; POUT.UID = GlobalClass.User.UID; POUT.SESSION_ID = GlobalClass.User.Session; Vouchers = ParkingDetails.Vouchers; mDiscount = ParkingDetails.mDiscount; Barcode = ""; } } else { DependencyService.Get <IMessage>().ShortAlert(res.Message); } IsLoading = false; }catch (Exception ex) { IsLoading = false; DependencyService.Get <IMessage>().ShortAlert(ex.Message); } }