[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()); }
//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); }
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); }
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)); }