Exemplo n.º 1
0
        private void WriteModelValues(PeriodSetting model)
        {
            if (model == null)
            {
                throw new ArgumentNullException("model");
            }
            model.YearPart = ExtractYearPart();
            //model.Id = model.YearPart;
            model.StartDate    = StartDate;
            model.EndDate      = EndDate;
            model.PeriodStatus = SelectedStatus;

            //if (_modelState == ModelState.New)
            //{
            foreach (PaymentSequence seq in YearSequences)
            {
                bool exisitSeq = seq.Id != 0;    //==0 means it has not been sent to database.
                if (!exisitSeq)
                {
                    model.PaymentSequences.Add(seq);
                }
            }
            //}
            //else
            //{
            //    foreach (PaymentSequence seq in YearSequences)
            //    {
            //        bool exisitSeq = model.PaymentSequences.Any(ps => ps.Id == 0);
            //        model.PaymentSequences.Add(seq);
            //    }

            //}
        }
Exemplo n.º 2
0
        private void ReadModelValues(PeriodSetting model)
        {
            if (model == null)
            {
                throw new ArgumentNullException("model");
            }

            YearPart       = model.YearPart;
            StartDate      = model.StartDate;
            EndDate        = model.EndDate;
            SelectedStatus = model.PeriodStatus;
            _sequenceNo    = model.PaymentSequences.Count();

            foreach (PaymentSequence seq in model.PaymentSequences)
            {
                YearSequences.Add(seq);
            }
            if (SelectedStatus != null && SelectedStatus.Id == 1)
            {
                ClosedStatus = SelectedStatus.Description;
            }
            else
            {
                ClosedStatus = null;
            }
            RaisePropertyChanged("");
        }
Exemplo n.º 3
0
 private void Initialize()
 {
     _currnetModel   = new PeriodSetting();
     RulesViolations = new List <RuleViolation>();
     YearSequences   = new ObservableCollection <PaymentSequence>();
     ReadModelValues(_currnetModel);
     SetState(ModelState.New);
 }
Exemplo n.º 4
0
        private void LoadYearPayments(PeriodSetting selectedYear)
        {
            IQueryable <PaymentSequence> result =
                _unitOfWork.Payments.Query(x => x.PeriodSetting.Id == selectedYear.Id).Select(x => x.PaymentSequence);

            if (!result.Any())
            {
                string msg = Properties.Resources.MemberPaymentView_NoPaymentSequ;
                Helper.ShowMessage(msg);
                return;
            }
            PaymentSequences = new ObservableCollection <PaymentSequence>(result);
        }
Exemplo n.º 5
0
        public IActionResult SetPicturePeriod([FromBody] PeriodSetting setting)
        {
            var authenticatedUser = GetAuthenticatedUserNetname();

            var hasUpdatedPeriodSetting = _adminRepo.SetYearUpdatePicturePeriod(setting);

            _logRepo.LoggerAsync(authenticatedUser,
                                 hasUpdatedPeriodSetting ? Log.Action.ModifiedPictureUpdatePeriod : Log.Action.CreatePictureUpdatePeriod,
                                 null);


            return(Ok());
        }
Exemplo n.º 6
0
        private ObservableCollection <LoanType> LoadLoanTypes(PeriodSetting year)
        {
            ObservableCollection <LoanType> ltList = new ObservableCollection <LoanType>();
            var result = _loansRepository.Query(x => x.PeriodSetting.Id == year.Id)
                         .Select(s => s.LoanType)
                         .GroupBy(g => g.Code)
                         .Select(p => p.FirstOrDefault());

            foreach (var item in result)
            {
                ltList.Add(item);
            }
            return(ltList);
        }
Exemplo n.º 7
0
        private PeriodSetting GetCurrentYear()
        {
            PeriodSetting currnet = null;

            try
            {
                var c = _unitOfWork.PeriodSettings.Query(x => x.PeriodStatus.Id == OpenStatus.Id).Single();
                currnet = c;
            }
            catch (InvalidOperationException)
            {
                //Sowallo as we sure nothing happend other than that there are no open year.
            }
            return(currnet);
        }
Exemplo n.º 8
0
        private void Search()
        {
            if (string.IsNullOrEmpty(SearchField))
            {
                return;
            }
            IQueryable <PeriodSetting> result = _repository.Query(setting => setting.YearPart == SearchField);

            if (result == null || result.Count() != 1)
            {
                return;
            }
            _currnetModel = result.First();
            ReadModelValues(_currnetModel);
            SetState(ModelState.Saved);
        }
Exemplo n.º 9
0
        private ObservableCollection <PostLoan> CreatePostedLoans(PeriodSetting future, PaymentSequence sequence)
        {
            ObservableCollection <PostLoan> posLoansList = new ObservableCollection <PostLoan>();

            foreach (var loan in CurrentLoans)
            {
                if (loan.Selected)
                {
                    PostLoan pl = new PostLoan(loan.Selected, loan.MemberCode, loan.MemberName,
                                               loan.LoanTypeId, loan.LoanTypeDescription,
                                               future.YearPart, future.YearPart, sequence.Id, sequence.SequenceDescription,
                                               loan.LoanAmount);
                    posLoansList.Add(pl);
                }
            }
            return(posLoansList);
        }
Exemplo n.º 10
0
        /// <summary>
        /// 取得節次列表
        /// </summary>
        /// <param name="strPeriodList"></param>
        /// <returns></returns>
        public static List<PeriodSetting> GetPeriodList(string strPeriodList)
        {
            //1	8:10	9:00
            //2	9:10	10:00
            //3	10:10	11:00
            //4	11:10	12:00
            //5	13:10	14:00
            //6	14:10	15:00
            //7	15:10	16:00
            //8	16:10	17:00

            List<PeriodSetting> Periods = new List<PeriodSetting>();

            if (!string.IsNullOrWhiteSpace(strPeriodList))
            {
                XElement elmPeriodList = XElement.Load(new StringReader(strPeriodList));

                foreach (XElement elmPeriod in elmPeriodList.Elements("Period"))
                {
                    PeriodSetting Period = new PeriodSetting(elmPeriod);

                    Periods.Add(Period);
                }
            }
            else
            {
                Periods.Add(new PeriodSetting(1, 8,10,50));
                Periods.Add(new PeriodSetting(2, 9, 10, 50));
                Periods.Add(new PeriodSetting(3, 10, 10, 50));
                Periods.Add(new PeriodSetting(4, 11, 10, 50));

                Periods.Add(new PeriodSetting(5, 13, 10, 50));
                Periods.Add(new PeriodSetting(6, 14, 10, 50));
                Periods.Add(new PeriodSetting(7, 15, 10, 50));
                Periods.Add(new PeriodSetting(8, 16, 10, 50));
            }

            return Periods;
        }
Exemplo n.º 11
0
        ObservableCollection <PaymentSequence> GetSequences(PeriodSetting year)
        {
            var yearSeqeunces = _unitOfWork.PaymentSequences.Query(ps => ps.PeriodSetting.Id == year.Id);

            return(new ObservableCollection <PaymentSequence>(yearSeqeunces));
        }
Exemplo n.º 12
0
        private void LoadStatment(int memberCode, PeriodSetting year)
        {
            _internalStatementDetails = new HashSet <MemberStatmentDetail>();
            List <MemberStatmentDetail> msdList = new List <MemberStatmentDetail>();
            string  statementYear      = null;
            int     searchedMemberCode = 0;
            string  searchedMemberName = null;
            decimal netTotals          = 0.0M;

            var yearPayments  = _unitOfWork.Payments.Query(x => x.PeriodSetting.Id == year.Id);
            int fieldsCounter = 0;

            foreach (var yearPayment in yearPayments)
            {
                if (fieldsCounter == 0) //Assgin once
                {
                    statementYear = yearPayment.PeriodSetting.YearPart;
                }

                var pymentDetails = _unitOfWork.PaymentTransactions.Query
                                    (
                    x => x.Payment.PaymentNo == yearPayment.PaymentNo
                    &&
                    x.FamilyMember.Code == memberCode
                                    );
                foreach (var payDetail in pymentDetails)
                {
                    if (fieldsCounter == 0) //Assgin once
                    {
                        searchedMemberCode = payDetail.MemberCode;
                        searchedMemberName = payDetail.FamilyMember.FullName;
                        fieldsCounter++;
                    }
                    //Get loans paying history for this payment detail.
                    var loanHistory = _unitOfWork.LoanPayments.Query(
                        x => x.PaymentTransaction.TransNo == payDetail.TransNo
                        &&
                        x.FamilyMember.Code == payDetail.FamilyMember.Code).ToList();

                    int loansHisotoryCount = loanHistory.Count();
                    switch (loansHisotoryCount)
                    {
                    case 0:
                        AddNoLoansHeaderRow(yearPayment, payDetail);
                        netTotals += payDetail.NetPayments;
                        continue;

                    case 1:
                        AddOneLoanRow(yearPayment, payDetail, loanHistory);
                        netTotals += payDetail.NetPayments;
                        continue;

                    default:
                        AddManyLoansRow(yearPayment, payDetail, loanHistory);
                        netTotals += payDetail.NetPayments;
                        break;
                    }
                }
            }
            Statment = new MemberStatmentReport(
                statementYear, searchedMemberCode, searchedMemberName, netTotals, _internalStatementDetails);
        }
Exemplo n.º 13
0
        private async Task CreatePaymentDetails(Payment payment)
        {
            if (payment == null)
            {
                throw new ArgumentNullException("payment");
            }
            await Task.Run(() =>
            {
                bool isFirstLine = true;
                RepositoryBase <FamilyMember> familyMemberRepos = _unitOfWork.FamilyMembers;
                RepositoryBase <PaymentSequence> sequRepos      = _unitOfWork.PaymentSequences;
                RepositoryBase <PeriodSetting> periodRepos      = _unitOfWork.PeriodSettings;
                RepositoryBase <PaymentStatus> payStatusRepos   = _unitOfWork.PaymentStatuses;
                RepositoryBase <PaymentStatus> paymRepos        = _unitOfWork.PaymentStatuses;
                PaymentSequence paySequ   = payment.PaymentSequence;
                PeriodSetting currentYear = payment.PeriodSetting;
                RepositoryBase <PaymentTransaction> detailsRepos = _unitOfWork.PaymentTransactions;

                int counter = 0;
                //Start:
                _uiLoansHistory.Clear();
                List <FamilyMember> eligibleMembers = GetEligibleMembers();
                //List<LoansHistory> tempLoansHistory = new List<LoansHistory>();

                foreach (FamilyMember familyMember in eligibleMembers)
                {
                    isFirstLine = true;
                    decimal memberLoansPayment = 0.0M;
                    PaymentTransaction detail  = CreateMemberDetail(payment, familyMember);

                    #region "Old"

                    //detail.DetailNo = Guid.NewGuid();
                    //detail.PaymentNo = payment.PaymentNo;
                    //detail.FamilyMember = familyMember;
                    //detail.ShareNumbers = familyMember.Shares;

                    #endregion

                    List <Loan> memberLoans = GetMemberLoans(payment, familyMember);
                    foreach (Loan loan in memberLoans)
                    {
                        #region "Old"

                        //var order = GetLoanOrder(payment, loan);
                        //if (order == null) throw new InvalidOperationException("You must register payment orders for all types of loans");
                        //paymentAmountDue = PayMemberLoans(detail, tempLoansHistory, familyMember, paymentAmountDue, loan, order);

                        #endregion

                        memberLoansPayment += PayLoan(loan, detail);
                    }
                    detail.AmountDue   = memberLoansPayment;
                    detail.NetPayments = detail.NetPayments - detail.AmountDue;
                    //((payment.Amount * detail.ShareNumbers) - detail.AmountDue);
                    detailsRepos.Add(detail);
                    var progMeta = new Tuple <double, double, string>(counter, eligibleMembers.Count,
                                                                      familyMember.FullName);
                    ShowData(detail, isFirstLine, progMeta);

                    #region "Old algorithm "

                    //if (holderLoans.Count == 0)
                    //{
                    //    //******* Warning: Get an official confirmation for this policy.********//

                    //    // If no loans found; either this ShareHolder has no loans completely,
                    //    //or has no loans for just this payment.
                    //    //and in the latter, we will retrive all INPAYING loans.

                    //    holderLoans = loansRepos.Query
                    //        (
                    //          x => x.ShareHolder.Code == sharHolder.Code &&
                    //          x.StatusId == 2
                    //        ).ToList();
                    //}

                    //decimal paymentAmountDue = 0.0M;
                    //if (holderLoans.Count() > 0) //If no loans, terminate.
                    //{
                    //    //Get the payment orders of this payment.
                    //    var paymentOrders = ordersRepos.Query(x => x.Payment.PaymentNo == payment.PaymentNo);

                    //    foreach (var loan in holderLoans)
                    //    {
                    //        decimal tempAmountDue = 0.0M;
                    //        //Get the admin order regrad this specific loan.
                    //        var order = paymentOrders.Where(x => x.LoanType.Code == loan.LoanType.Code).SingleOrDefault();

                    //        if (order != null)
                    //        {
                    //            tempAmountDue = (loan.Amount * order.EarnPercent) / 100;
                    //            paymentAmountDue += (loan.Amount * order.EarnPercent) / 100;
                    //        }
                    //        else
                    //        {
                    //            tempAmountDue = loan.Amount;
                    //            paymentAmountDue += loan.Amount;
                    //        }
                    //        loan.Paid = tempAmountDue;
                    //        loan.Balance = loan.Amount - loan.Paid;

                    //    }
                    //    //amountDue = holderLoans.Sum(x => x.Amount);
                    //}

                    #endregion

                    counter++;
                }
                PaymentStatus status  = payStatusRepos.GetById(2);                   //Under Review Status.
                payment.PaymentStatus = status;
            }
                           );
        }