예제 #1
0
 protected void LoadMethod(object obj)
 {
     try
     {
         if (SelectedScheme != null)
         {
             Scheme = new MembershipScheme()
             {
                 SchemeId        = SelectedScheme.SchemeId,
                 SchemeName      = SelectedScheme.SchemeName,
                 ValidOnHolidays = SelectedScheme.ValidOnHolidays,
                 ValidOnWeekends = SelectedScheme.ValidOnWeekends,
                 ValidHours      = SelectedScheme.ValidHours,
                 Limit           = SelectedScheme.Limit,
                 Discount        = SelectedScheme.Discount,
                 ValidityPeriod  = SelectedScheme.ValidityPeriod
             };
             SetAction(ButtonAction.Selected);
         }
     }
     catch (Exception ex)
     {
         while (ex.InnerException != null)
         {
             ex = ex.InnerException;
         }
         MessageBox.Show(ex.Message, MessageBoxCaption, MessageBoxButton.OK, MessageBoxImage.Error);
     }
 }
예제 #2
0
 protected void UndoMethod(object obj)
 {
     try
     {
         SelectedScheme = null;
         Scheme         = new MembershipScheme();
         SetAction(ButtonAction.Init);
     }
     catch (Exception ex)
     {
         while (ex.InnerException != null)
         {
             ex = ex.InnerException;
         }
         MessageBox.Show(ex.Message, MessageBoxCaption, MessageBoxButton.OK, MessageBoxImage.Error);
     }
 }
        List <dynamic> GetTimeSpentInEachSession(TimeSpan InTime, TimeSpan OutTime, MembershipScheme scheme, ParkingIn PIN)
        {
            DateTime       Start  = PIN.InDate;
            DateTime       End    = PIN.InDate;
            TimeSpan       Minute = new TimeSpan(0, 1, 0);
            List <dynamic> TimeSpentInEachSession = new List <dynamic>();

            foreach (var session in scheme.ValidHoursList)
            {
                TimeSpan TimeSpent = new TimeSpan(0, 0, 0);
                if (InTime >= session.Start && InTime <= session.End)
                {
                    if (OutTime <= session.End.Add(Minute))
                    {
                        TimeSpent = OutTime.Subtract(InTime);
                        End       = PIN.InDate.Add(OutTime);
                    }
                    else
                    {
                        TimeSpent = session.End.Add(Minute).Subtract(InTime);
                        End       = PIN.InDate.Add(session.End.Add(Minute));
                    }
                    Start = PIN.InDate.Add(InTime);
                }
                else if (InTime < session.Start)
                {
                    if (OutTime <= session.End.Add(Minute))
                    {
                        TimeSpent = OutTime.Subtract(session.Start);
                        End       = PIN.InDate.Add(OutTime);
                    }
                    else
                    {
                        TimeSpent = session.End.Add(Minute).Subtract(session.Start);
                        End       = PIN.InDate.Add(session.End.Add(Minute));
                    }
                    Start = PIN.InDate.Add(session.Start);
                }
                TimeSpentInEachSession.Add(new { session.SkipValidityPeriod, session.IgnoreLimit, TimeSpent = Convert.ToInt32(TimeSpent.TotalMinutes), Start, End });
            }
            return(TimeSpentInEachSession);
        }
        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
                });
            }
        }