Exemplo n.º 1
0
    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);
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
 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   = "";
 }
Exemplo n.º 5
0
        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
                });
            }
        }
Exemplo n.º 9
0
        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);
            }
        }