[HttpPost, Route("update")] //, AmigoTenantClaimsAuthorize(ActionCode = ConstantsSecurity.ActionCode.PaymentPeriodUpdate)]
        public async Task <ResponseDTO> Update(PPHeaderSearchByContractPeriodDTO paymentPeriod)
        {
            if (ModelState.IsValid)
            {
                var response = await _paymentPeriodApplicationService.UpdatePaymentPeriodAsync(paymentPeriod);

                return(response);
            }
            return(ModelState.ToResponse());
        }
Example #2
0
        //public async Task<ResponseDTO> ValidateEntityRegister(PaymentPeriodRegisterRequest request)
        //{
        //    bool isValid = true;
        //    Expression<Func<PaymentPeriodRegisterRequest, bool>> queryFilter = p => true;
        //    var errorMessage = "";
        //    queryFilter = queryFilter.And(p => p.PaymentPeriodCode == request.PaymentPeriodCode);
        //    var paymentPeriod = await _paymentPeriodDataAccess.FirstOrDefaultAsync(queryFilter);

        //    if (paymentPeriod != null)
        //    {
        //        isValid = false;
        //        errorMessage = "PaymentPeriod already Exists";
        //    }

        //    //Existe un Lease para el mismo tenant Activo o Futuro
        //    if (isValid)
        //    {
        //        queryFilter = p => p.TenantId == request.TenantId;
        //        queryFilter = queryFilter.And(p => p.PaymentPeriodStatusCode == Constants.EntityStatus.PaymentPeriod.Active || p.PaymentPeriodStatusCode == Constants.EntityStatus.PaymentPeriod.Future);
        //        paymentPeriod = await _paymentPeriodDataAccess.FirstOrDefaultAsync(queryFilter);

        //        if (paymentPeriod != null)
        //        {
        //            isValid = false;
        //            errorMessage = "Already Exists a tenant associated to other Lease Active or Future";
        //        }
        //    }

        //    //Validate Period
        //    if (isValid)
        //    {
        //        Expression<Func<PeriodDTO, bool>> queryFilterPeriod = p => true;
        //        queryFilterPeriod = queryFilterPeriod.And(p => p.EndDate < request.EndDate);
        //        var period = await _periodApplicationService.GetLastPeriodAsync();

        //        if (period != null && period.Data.EndDate < request.EndDate)
        //        {
        //            isValid = false;
        //            errorMessage = "There is no period configurated to support the end date of this Lease, please create period";
        //        }
        //    }


        //    var response = new ResponseDTO()
        //    {
        //        IsValid = string.IsNullOrEmpty(errorMessage),
        //        Messages = new List<ApplicationMessage>()
        //    };

        //    response.Messages.Add(new ApplicationMessage()
        //    {
        //        Key = string.IsNullOrEmpty(errorMessage) ? "Ok" : "Error",
        //        Message = errorMessage
        //    });

        //    return response;
        //}

        public async Task <ResponseDTO> ValidateEntityUpdate(PPHeaderSearchByContractPeriodDTO request)
        {
            var errorMessage = "";
            //Expression<Func<PaymentPeriodRegisterRequest, bool>> queryFilter = p => p.RowStatus;
            //queryFilter = queryFilter.And(p => p.PaymentPeriodId != request.PaymentPeriodId);
            //queryFilter = queryFilter.And(p => p.TenantId == request.TenantId);
            //queryFilter = queryFilter.And(p => p.PaymentPeriodStatusCode == Constants.EntityStatus.PaymentPeriod.Active || p.PaymentPeriodStatusCode == Constants.EntityStatus.PaymentPeriod.Future);

            bool isValid = true;

            if (!request.PPDetail.Any(q => q.PaymentPeriodStatusCode == Constants.EntityStatus.PaymentPeriod.Pending && q.IsSelected.Value))
            {
                isValid      = false;
                errorMessage = "No existe ningun pendiente que este seleccionado";
            }

            if (request.PPDetail.Any(q =>
                                     q.PaymentPeriodStatusCode == Constants.EntityStatus.PaymentPeriod.Pending &&
                                     q.PaymentTypeCode == Constants.GeneralTableCode.PaymentType.OnAccount &&
                                     (!q.IsSelected.Value || !q.IsSelected.HasValue)))
            {
                isValid      = false;
                errorMessage = "No puedes grabar un Payment On Account sin seleccionarlo";
            }

            if (request.PPDetail.Any(q =>
                                     q.PaymentPeriodStatusCode == Constants.EntityStatus.PaymentPeriod.Pending &&
                                     q.PaymentAmount == 0))
            {
                isValid      = false;
                errorMessage = "No puedes grabar un Payment con monto en cero";
            }

            //var paymentPeriod = await _paymentPeriodDataAccess.FirstOrDefaultAsync(queryFilter);

            //if (paymentPeriod != null)
            //{
            //    isValid = false;
            //    errorMessage = "Already Exists a tenant associated to other Lease Active or Future";
            //}

            var response = new ResponseDTO()
            {
                IsValid  = string.IsNullOrEmpty(errorMessage),
                Messages = new List <ApplicationMessage>()
            };

            response.Messages.Add(new ApplicationMessage()
            {
                Key     = string.IsNullOrEmpty(errorMessage) ? "Ok" : "Error",
                Message = errorMessage
            });

            return(response);
        }
Example #3
0
        public async Task <ResponseDTO> UpdatePaymentPeriodAsync(PPHeaderSearchByContractPeriodDTO paymentsPeriod)
        {
            //Map to Command
            var response = await ValidateEntityUpdate(paymentsPeriod);

            var entityStatusPayed = await _entityStatusApplicationService.GetEntityStatusByEntityAndCodeAsync(Constants.EntityCode.PaymentPeriod, Constants.EntityStatus.PaymentPeriod.Payed);

            if (response.IsValid)
            {
                //Execute Command
                var command        = _mapper.Map <PPHeaderSearchByContractPeriodDTO, PaymentPeriodHeaderCommand>(paymentsPeriod);
                var commandDetails = new List <PaymentPeriodDetailCommand>();
                foreach (var item in paymentsPeriod.PPDetail)
                {
                    var commandDetail = _mapper.Map <PPDetailSearchByContractPeriodDTO, PaymentPeriodDetailCommand>(item);
                    if (item.PaymentPeriodId <= 0)
                    {
                        commandDetail.TableStatus = DTOs.Requests.Common.ObjectStatus.Added;
                    }
                    else
                    {
                        commandDetail.TableStatus = DTOs.Requests.Common.ObjectStatus.Modified;
                    }

                    commandDetails.Add(commandDetail);

                    ////if ((item.IsSelected.HasValue && item.IsSelected.Value) || item.TableStatus == DTOs.Requests.Common.ObjectStatus.Added)
                    //if ((item.IsSelected.HasValue && item.IsSelected.Value) && item.PaymentPeriodId <= 0)
                    //{
                    //    //TODO: CAMBIAR LOGICA PARA MODIFICAR O ADD AGREGAR
                    //    var commandDetail = _mapper.Map<PPDetailSearchByContractPeriodDTO, PaymentPeriodDetailCommand>(item);
                    //    if (item.IsRequired.Value || item.IsSelected.Value)
                    //        commandDetail.PaymentPeriodStatusId = entityStatusPayed.EntityStatusId;

                    //    //commandDetail.TableStatus = commandDetail.TableStatus == DTOs.Requests.Common.ObjectStatus.Added ? DTOs.Requests.Common.ObjectStatus.Added : DTOs.Requests.Common.ObjectStatus.Modified;
                    //    commandDetails.Add(commandDetail);
                    //}
                    //else
                    //{
                    //    //Puede entrar sin necesidad de estar Modificado
                    //    if (item.TableStatus == DTOs.Requests.Common.ObjectStatus.Modified && item.PaymentPeriodId > 0)
                    //    {
                    //        var commandDetail = _mapper.Map<PPDetailSearchByContractPeriodDTO, PaymentPeriodDetailCommand>(item);

                    //        //var paymentPeriodoDetail = new PaymentPeriodDetailCommand();
                    //        //paymentPeriodoDetail.PaymentPeriodId = item.PaymentPeriodId;
                    //        //paymentPeriodoDetail.PaymentAmount = item.PaymentAmount;
                    //        //paymentPeriodoDetail.Comment = item.Comment;
                    //        //paymentPeriodoDetail.ConceptId = item.ConceptId;
                    //        //paymentPeriodoDetail.UpdatedBy = paymentsPeriod.UserId;
                    //        //paymentPeriodoDetail.UpdatedDate = DateTime.Now;
                    //        commandDetail.TableStatus = DTOs.Requests.Common.ObjectStatus.Modified;
                    //        commandDetails.Add(commandDetail);
                    //    }
                    //}
                }
                command.PPDetail = commandDetails;
                var resp = await _bus.SendAsync(command);

                return(ResponseBuilder.Correct(resp));
            }

            return(response);
        }
Example #4
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));
        }