Ejemplo n.º 1
0
        /// <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);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        /// <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;
            //            }
            //        }
            //    }
            //}
        }