Ejemplo n.º 1
0
        public async Task <ResponseDTO <PPDetailSearchByContractPeriodDTO> > CalculateOnAccountByContractAndPeriodAsync(PaymentPeriodSearchByContractPeriodRequest search)
        {
            Expression <Func <PPSearchByContractPeriodDTO, bool> > queryFilter = c => true;

            if (search.PeriodId.HasValue)
            {
                queryFilter = queryFilter.And(p => p.PeriodId == search.PeriodId);
            }
            if (search.ContractId.HasValue)
            {
                queryFilter = queryFilter.And(p => p.ContractId == search.ContractId);
            }

            var header = await _paymentPeriodSearchByContractDataAccess.FirstOrDefaultAsync(queryFilter);

            var onAccountPaymenType = await _generalTableApplicationService.GetGeneralTableByEntityAndCodeAsync(Constants.GeneralTableName.PaymentType, Constants.GeneralTableCode.PaymentType.OnAccount);

            var concept = await _conceptApplicationService.GetConceptByCodeAsync(Constants.ConceptCode.OnAccount);

            var entityStatusPayment = await _entityStatusApplicationService.GetEntityStatusByEntityAndCodeAsync(Constants.EntityCode.PaymentPeriod, Constants.EntityStatus.PaymentPeriod.Pending);

            var onAccountDetail = new PPDetailSearchByContractPeriodDTO();

            if (header != null)
            {
                if (header != null)
                {
                    onAccountDetail.PaymentPeriodId         = -2;
                    onAccountDetail.ContractId              = header.ContractId;
                    onAccountDetail.PeriodId                = header.PeriodId;
                    onAccountDetail.PaymentAmount           = 0;
                    onAccountDetail.PaymentTypeId           = onAccountPaymenType.GeneralTableId;
                    onAccountDetail.PaymentTypeValue        = onAccountPaymenType.Value;
                    onAccountDetail.PaymentTypeCode         = onAccountPaymenType.Code;
                    onAccountDetail.PaymentTypeName         = onAccountPaymenType.Code;
                    onAccountDetail.PaymentPeriodStatusCode = Constants.EntityStatus.PaymentPeriod.Pending;
                    onAccountDetail.PaymentPeriodStatusId   = entityStatusPayment.EntityStatusId;
                    onAccountDetail.IsRequired              = false;
                    onAccountDetail.IsSelected              = false;
                    onAccountDetail.TableStatus             = DTOs.Requests.Common.ObjectStatus.Added;
                    onAccountDetail.PaymentDescription      = onAccountPaymenType.Value;
                    onAccountDetail.ConceptId               = concept.Data.ConceptId;
                    onAccountDetail.TenantId                = header.TenantId;
                    onAccountDetail.PaymentPeriodStatusName = Constants.EntityStatus.PaymentPeriodStatusName.Pending;
                    return(ResponseBuilder.Correct(onAccountDetail));
                }
            }
            return(null);
        }
Ejemplo n.º 2
0
        public async Task <ResponseDTO <PPDetailSearchByContractPeriodDTO> > CalculateLateFeeByContractAndPeriodAsync(PaymentPeriodSearchByContractPeriodRequest search)
        {
            Expression <Func <PPSearchByContractPeriodDTO, bool> > queryFilter = c => true;

            if (search.PeriodId.HasValue)
            {
                queryFilter = queryFilter.And(p => p.PeriodId == search.PeriodId);
            }
            if (search.ContractId.HasValue)
            {
                queryFilter = queryFilter.And(p => p.ContractId == search.ContractId);
            }

            var header = await _paymentPeriodSearchByContractDataAccess.FirstOrDefaultAsync(queryFilter);

            var lateFeePaymenType = await _generalTableApplicationService.GetGeneralTableByEntityAndCodeAsync(Constants.GeneralTableName.PaymentType, Constants.GeneralTableCode.PaymentType.LateFee);

            var concept = await _conceptApplicationService.GetConceptByCodeAsync(Constants.ConceptCode.LateFee);

            var entityStatusPayment = await _entityStatusApplicationService.GetEntityStatusByEntityAndCodeAsync(Constants.EntityCode.PaymentPeriod, Constants.EntityStatus.PaymentPeriod.Pending);

            var lateFeeDetail = new PPDetailSearchByContractPeriodDTO();

            if (header != null)
            {
                //var header = paymentsPeriod.FirstOrDefault();
                var delayDays = DateTime.Today.Subtract(header.PeriodDueDate.Value).TotalDays;

                queryFilter = queryFilter.And(p => p.PaymentTypeCode == Constants.GeneralTableCode.PaymentType.LateFee);
                var existLateFeeInDB = await _paymentPeriodSearchByContractDataAccess.FirstOrDefaultAsync(queryFilter);

                if (header != null)
                {
                    if (existLateFeeInDB == null && delayDays > 0)
                    {
                        lateFeeDetail.PaymentPeriodId         = -1;
                        lateFeeDetail.ContractId              = header.ContractId;
                        lateFeeDetail.PeriodId                = header.PeriodId;
                        lateFeeDetail.PaymentAmount           = 25 * (decimal?)delayDays;
                        lateFeeDetail.PaymentTypeId           = lateFeePaymenType.GeneralTableId;
                        lateFeeDetail.PaymentTypeValue        = lateFeePaymenType.Value;
                        lateFeeDetail.PaymentTypeCode         = lateFeePaymenType.Code;
                        lateFeeDetail.PaymentTypeName         = lateFeePaymenType.Code;
                        lateFeeDetail.PaymentPeriodStatusCode = Constants.EntityStatus.PaymentPeriod.Pending;
                        lateFeeDetail.PaymentPeriodStatusId   = entityStatusPayment.EntityStatusId;
                        lateFeeDetail.IsRequired              = false;
                        lateFeeDetail.IsSelected              = false;
                        lateFeeDetail.TableStatus             = DTOs.Requests.Common.ObjectStatus.Added;
                        lateFeeDetail.PaymentDescription      = lateFeePaymenType.Value;
                        lateFeeDetail.ConceptId               = concept.Data.ConceptId;
                        lateFeeDetail.TenantId                = header.TenantId;
                        lateFeeDetail.PaymentPeriodStatusName = Constants.EntityStatus.PaymentPeriodStatusName.Pending;
                        return(ResponseBuilder.Correct(lateFeeDetail));
                    }
                    else if (existLateFeeInDB != null)
                    {
                        var entity = _mapper.Map <PPSearchByContractPeriodDTO, PPDetailSearchByContractPeriodDTO>(existLateFeeInDB);
                        entity.PaymentAmount = 25 * (decimal?)delayDays;
                        entity.TableStatus   = DTOs.Requests.Common.ObjectStatus.Modified;
                        return(ResponseBuilder.Correct(entity));
                    }
                }
            }
            return(null);
        }
Ejemplo n.º 3
0
        public async Task <ResponseDTO <PPHeaderSearchByContractPeriodDTO> > SearchPaymentPeriodByContractAsync(PaymentPeriodSearchByContractPeriodRequest search)
        {
            Expression <Func <PPSearchByContractPeriodDTO, bool> > queryFilter = c => true;

            if (search.PeriodId.HasValue)
            {
                queryFilter = queryFilter.And(p => p.PeriodId == search.PeriodId);
            }

            if (search.ContractId.HasValue)
            {
                queryFilter = queryFilter.And(p => p.ContractId == search.ContractId);
            }

            var paymentsPeriod = await _paymentPeriodSearchByContractDataAccess.ListAsync(queryFilter);

            var lateFeePaymenType = await _generalTableApplicationService.GetGeneralTableByEntityAndCodeAsync(Constants.GeneralTableName.PaymentType, Constants.GeneralTableCode.PaymentType.LateFee);

            var entityStatusPayment = await _entityStatusApplicationService.GetEntityStatusByEntityAndCodeAsync(Constants.EntityCode.PaymentPeriod, Constants.EntityStatus.PaymentPeriod.Pending);

            var concept = await _conceptApplicationService.GetConceptByCodeAsync(Constants.ConceptCode.LateFee);

            var ppHeaderSearchByContractPeriodDTO = new PPHeaderSearchByContractPeriodDTO();

            if (paymentsPeriod.Any())
            {
                var header = paymentsPeriod.FirstOrDefault();
                ppHeaderSearchByContractPeriodDTO.HouseName      = header.HouseName;
                ppHeaderSearchByContractPeriodDTO.PeriodCode     = header.PeriodCode;
                ppHeaderSearchByContractPeriodDTO.PeriodId       = header.PeriodId;
                ppHeaderSearchByContractPeriodDTO.TenantFullName = header.TenantFullName;
                ppHeaderSearchByContractPeriodDTO.ContractId     = header.ContractId;
                ppHeaderSearchByContractPeriodDTO.DueDate        = header.DueDate;
                ppHeaderSearchByContractPeriodDTO.Email          = header.Email;

                var detailList        = new List <PPDetailSearchByContractPeriodDTO>();
                var lateFeeDetail     = new PPDetailSearchByContractPeriodDTO();
                var delayDays         = DateTime.Today.Subtract(header.PeriodDueDate.Value).TotalDays;
                var isLateFeeIncluded = false;
                var existLateFeeInDB  = paymentsPeriod.Any(q => q.PaymentTypeCode == Constants.GeneralTableCode.PaymentType.LateFee);

                foreach (var item in paymentsPeriod)
                {
                    var detail = new PPDetailSearchByContractPeriodDTO();
                    detail.ContractId              = item.ContractId;
                    detail.PaymentPeriodId         = item.PaymentPeriodId;
                    detail.PaymentTypeValue        = item.PaymentTypeValue;
                    detail.PaymentAmount           = item.PaymentAmount;
                    detail.PaymentDescription      = item.PaymentDescription;
                    detail.PaymentPeriodStatusCode = item.PaymentPeriodStatusCode;
                    detail.PaymentPeriodStatusName = item.PaymentPeriodStatusName;
                    detail.IsRequired              = item.IsRequired;
                    detail.PaymentTypeCode         = item.PaymentTypeCode;
                    detail.IsSelected              = item.IsRequired.Value && item.PaymentPeriodStatusCode == Constants.EntityStatus.PaymentPeriod.Pending ? true : false;
                    detail.InvoiceDetailId         = item.InvoiceDetailId;
                    detail.InvoiceId   = item.InvoiceId;
                    detail.InvoiceNo   = item.InvoiceNo;
                    detail.InvoiceDate = item.InvoiceDate;
                    detailList.Add(detail);

                    if (!existLateFeeInDB &&
                        delayDays > 0 &&
                        detail.PaymentTypeCode == Constants.GeneralTableCode.PaymentType.Rent)
                    {
                        lateFeeDetail.PaymentPeriodId         = -1;
                        lateFeeDetail.ContractId              = header.ContractId;
                        lateFeeDetail.PeriodId                = header.PeriodId;
                        lateFeeDetail.PaymentAmount           = 25 * (decimal?)delayDays;
                        lateFeeDetail.PaymentTypeId           = lateFeePaymenType.GeneralTableId;
                        lateFeeDetail.PaymentTypeValue        = lateFeePaymenType.Value;
                        lateFeeDetail.PaymentTypeCode         = lateFeePaymenType.Code;
                        lateFeeDetail.PaymentTypeName         = lateFeePaymenType.Code;
                        lateFeeDetail.PaymentPeriodStatusCode = Constants.EntityStatus.PaymentPeriod.Pending;
                        lateFeeDetail.PaymentPeriodStatusId   = entityStatusPayment.EntityStatusId;
                        lateFeeDetail.IsRequired              = false;
                        lateFeeDetail.IsSelected              = false;
                        lateFeeDetail.TableStatus             = DTOs.Requests.Common.ObjectStatus.Added;
                        lateFeeDetail.PaymentDescription      = lateFeePaymenType.Value;
                        lateFeeDetail.ConceptId               = concept.Data.ConceptId;
                        lateFeeDetail.TenantId                = header.TenantId;
                        lateFeeDetail.PaymentPeriodStatusName = Constants.EntityStatus.PaymentPeriodStatusName.Pending;

                        if (item.PaymentTypeSequence + 1 == lateFeePaymenType.Sequence)
                        {
                            //Inserting at Final
                            detailList.Add(lateFeeDetail);
                            isLateFeeIncluded = true;
                        }
                    }
                }

                //Inserting at Final
                if (!isLateFeeIncluded && lateFeeDetail.PaymentPeriodId.HasValue)
                {
                    detailList.Add(lateFeeDetail);
                }


                ppHeaderSearchByContractPeriodDTO.PPDetail = detailList;
            }

            return(ResponseBuilder.Correct(ppHeaderSearchByContractPeriodDTO));
        }