/// <summary> /// Payment made to specified Shipment/AWB /// </summary> /// <param name="soaPayment"></param> /// <param name="shipmentPayments"></param> public void MakePayment(StatementOfAccountPayment soaPayment, List <Payment> shipmentPayments) { StatementOfAccountPayment _soaPayment = new StatementOfAccountPayment() { StatementOfAccountPaymentId = Guid.NewGuid(), StatementOfAccountId = soaPayment.StatementOfAccountId, PaymentDate = soaPayment.PaymentDate, OrNo = soaPayment.OrNo, Amount = soaPayment.Amount, PaymentTypeId = soaPayment.PaymentTypeId, CheckBankName = soaPayment.CheckBankName, CheckNo = soaPayment.CheckNo, CheckDate = soaPayment.CheckDate, ReceivedById = soaPayment.ReceivedById, Remarks = soaPayment.Remarks, CreatedBy = soaPayment.CreatedBy, CreatedDate = DateTime.Now, ModifiedBy = soaPayment.ModifiedBy, ModifiedDate = DateTime.Now, RecordStatus = (int)RecordStatus.Active }; soaPaymentService.Add(_soaPayment); PaymentBL paymentService = new PaymentBL(_unitOfWork); foreach (var payment in shipmentPayments) { payment.PaymentId = Guid.NewGuid(); payment.CreatedDate = DateTime.Now; payment.ModifiedDate = DateTime.Now; payment.RecordStatus = (int)RecordStatus.Active; payment.StatementOfAccountPaymentId = _soaPayment.StatementOfAccountPaymentId; paymentService.Add(payment); } // update Shipments to paid when no more balance List <Shipment> shipments = shipmentService.FilterActiveBy(x => x.StatementOfAccountId == soaPayment.StatementOfAccountId && x.DateOfFullPayment == null).ToList(); if (shipments != null) { List <ShipmentModel> models = shipmentService.EntitiesToModels(shipments); models = shipmentService.ComputeBalances(models, null); foreach (var item in models) { // TODO bug not updating if (item.PreviousBalance <= 0) { item.DateOfFullPayment = DateTime.Now; item.ModifiedBy = soaPayment.ModifiedBy; item.ModifiedDate = DateTime.Now; var entity = shipmentService.ModelToEntity(item); shipmentService.Edit(entity); } } } }
/// <summary> /// Payment made to all. Distribute amount to Shipments/AWBs /// </summary> /// <param name="soaPayment"></param> public void MakePayment(StatementOfAccountPayment soaPayment, StatementOfAccountModel model) { StatementOfAccountPayment _soaPayment = new StatementOfAccountPayment() { StatementOfAccountPaymentId = Guid.NewGuid(), StatementOfAccountId = soaPayment.StatementOfAccountId, PaymentDate = soaPayment.PaymentDate, OrNo = soaPayment.OrNo, Amount = soaPayment.Amount, PaymentTypeId = soaPayment.PaymentTypeId, CheckBankName = soaPayment.CheckBankName, CheckNo = soaPayment.CheckNo, CheckDate = soaPayment.CheckDate, ReceivedById = soaPayment.ReceivedById, Remarks = soaPayment.Remarks, CreatedBy = soaPayment.CreatedBy, CreatedDate = DateTime.Now, ModifiedBy = soaPayment.ModifiedBy, ModifiedDate = DateTime.Now, RecordStatus = (int)RecordStatus.Active }; soaPaymentService.Add(_soaPayment); // TODO move this to CreateSOA //if (model.StatementOfAccountId == null || model.StatementOfAccountId == Guid.Empty) //{ // model = EntityToModel(FilterActiveBy(x => x.StatementOfAccountId == soaPayment.StatementOfAccountId).FirstOrDefault()); // if (shipmentService == null) // shipmentService = new ShipmentBL(this._unitOfWork); // model.CurrentShipments = shipmentService.EntitiesToModels(shipmentService.FilterActiveBy(x => x.StatementOfAccountId == model.StatementOfAccountId).OrderByDescending(x => x.DateAccepted).ToList()); // var previousSoaIds = FilterActiveBy(x => x.CompanyId == model.CompanyId && x.StatementOfAccountId != model.StatementOfAccountId).OrderBy(x => x.SoaDueDate).Select(x => x.StatementOfAccountId); // if (previousSoaIds != null) // { // foreach (var previousSoaId in previousSoaIds) // { // model.PreviousShipments.AddRange(shipmentService.EntitiesToModels(shipmentService.FilterActiveBy(x => x.StatementOfAccountId == previousSoaId).OrderByDescending(x => x.DateAccepted).ToList())); // } // } //} //// get current and unpaid Shipments of the current SOA //List<ShipmentModel> unpaid = new List<ShipmentModel>(); //unpaid.AddRange(model.CurrentShipments); //unpaid.AddRange(model.PreviousShipments); //if (unpaid != null) //{ // unpaid = shipmentService.ComputeBalances(unpaid, null); // decimal balance = 0; // decimal amountToPay = 0; // decimal availableAmount = soaPayment.Amount; // foreach (var item in unpaid.OrderBy(x => x.DateAccepted).ToList()) // { // if (item.DateOfFullPayment == null) // { // balance = item.CurrentBalance; // if (availableAmount >= balance) // { // amountToPay = balance; // } // else // { // amountToPay = availableAmount; // } // Payment paymentModel = new Payment() // { // PaymentId = Guid.NewGuid(), // ShipmentId = item.ShipmentId, // PaymentDate = soaPayment.PaymentDate, // OrNo = soaPayment.OrNo, // Amount = amountToPay, // PaymentTypeId = soaPayment.PaymentTypeId, // CheckBankName = soaPayment.CheckBankName, // CheckNo = soaPayment.CheckNo, // CheckDate = soaPayment.CheckDate, // ReceivedById = soaPayment.ReceivedById, // Remarks = soaPayment.Remarks, // CreatedBy = soaPayment.CreatedBy, // CreatedDate = DateTime.Now, // ModifiedBy = soaPayment.ModifiedBy, // ModifiedDate = DateTime.Now, // RecordStatus = (int)RecordStatus.Active, // StatementOfAccountPaymentId = _soaPayment.StatementOfAccountPaymentId // }; // paymentService.Add(paymentModel); // if (balance == amountToPay) // { // var shipment = shipmentService.GetById(item.ShipmentId); // shipment.DateOfFullPayment = DateTime.Now; // shipment.ModifiedBy = soaPayment.ModifiedBy; // shipment.ModifiedDate = DateTime.Now; // shipmentService.Edit(shipment); // } // availableAmount = availableAmount - amountToPay; // if (availableAmount <= 0) // { // break; // } // } // } //} }