public IActionResult CheckDuplicateShipmentSettlement(CheckDuplicateShipmentSettlementCriteria criteria)
        {
            var          data   = acctSettlementPaymentService.CheckDuplicateShipmentSettlement(criteria);
            ResultHandle result = new ResultHandle {
                Status = data.Status, Message = data.Message
            };

            return(Ok(result));
        }
        public IActionResult SaveAndSendRequest(CreateUpdateSettlementModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            HandleState hs;

            //Check duplicate
            if (model.ShipmentCharge.Count > 0)
            {
                foreach (var item in model.ShipmentCharge)
                {
                    var shipment = new CheckDuplicateShipmentSettlementCriteria
                    {
                        SurchargeID = item.Id,
                        ChargeID    = item.ChargeId,
                        TypeCharge  = item.Type,
                        HBLID       = item.Hblid,
                        Partner     = item.Type.Equals(AccountingConstants.TYPE_CHARGE_BUY) ? item.PaymentObjectId : item.PayerId,
                        CustomNo    = item.ClearanceNo,
                        InvoiceNo   = item.InvoiceNo,
                        ContNo      = item.ContNo,
                        MBLNo       = item.MBL,
                        HBLNo       = item.HBL,
                        JobNo       = item.JobId
                    };
                    var _checkDuplicate = acctSettlementPaymentService.CheckDuplicateShipmentSettlement(shipment);
                    if (_checkDuplicate.Status)
                    {
                        ResultHandle _result = new ResultHandle {
                            Status = false, Message = _checkDuplicate.Message
                        };
                        return(BadRequest(_result));
                    }
                }
            }
            else
            {
                ResultHandle _result = new ResultHandle {
                    Status = false, Message = "Settlement Payment don't have any charge in this period, Please check it again!"
                };
                return(BadRequest(_result));
            }

            //Check exist thông tin Manager, Accountant của User requester
            AcctApproveSettlementModel settlementAppr = new AcctApproveSettlementModel
            {
                Requester = model.Settlement.Requester
            };
            var isExistsManager = acctSettlementPaymentService.CheckExistsInfoManagerOfRequester(settlementAppr);

            if (!isExistsManager.Success)
            {
                ResultHandle _result = new ResultHandle {
                    Status = false, Message = isExistsManager.Exception.Message
                };
                return(BadRequest(_result));
            }

            if (string.IsNullOrEmpty(model.Settlement.SettlementNo))//Insert Settlement Payment
            {
                model.Settlement.StatusApproval = AccountingConstants.STATUS_APPROVAL_REQUESTAPPROVAL;
                hs = acctSettlementPaymentService.AddSettlementPayment(model);
                if (hs.Code == 403)
                {
                    return(BadRequest(new ResultHandle {
                        Status = false, Message = stringLocalizer[LanguageSub.DO_NOT_HAVE_PERMISSION].Value
                    }));
                }
            }
            else //Update Settlement Payment
            {
                var isAllowUpdate = acctSettlementPaymentService.CheckUpdatePermissionBySettlementId(model.Settlement.Id);
                if (isAllowUpdate == false)
                {
                    return(BadRequest(new ResultHandle {
                        Status = false, Message = stringLocalizer[LanguageSub.DO_NOT_HAVE_PERMISSION].Value
                    }));
                }

                if (!model.Settlement.StatusApproval.Equals(AccountingConstants.STATUS_APPROVAL_NEW) && !model.Settlement.StatusApproval.Equals(AccountingConstants.STATUS_APPROVAL_DENIED))
                {
                    ResultHandle _result = new ResultHandle {
                        Status = false, Message = "Only allowed to edit the settlement payment status is New or Deny"
                    };
                    return(BadRequest(_result));
                }

                model.Settlement.StatusApproval = AccountingConstants.STATUS_APPROVAL_REQUESTAPPROVAL;
                hs = acctSettlementPaymentService.UpdateSettlementPayment(model);
                if (hs.Code == 403)
                {
                    return(BadRequest(new ResultHandle {
                        Status = false, Message = stringLocalizer[LanguageSub.DO_NOT_HAVE_PERMISSION].Value
                    }));
                }
            }

            var          message = HandleError.GetMessage(hs, Crud.Insert);
            ResultHandle result  = new ResultHandle {
                Status = hs.Success, Message = stringLocalizer[message].Value, Data = model
            };

            if (hs.Success)
            {
                AcctApproveSettlementModel approve = new AcctApproveSettlementModel
                {
                    SettlementNo = model.Settlement.SettlementNo,
                    Requester    = model.Settlement.Requester
                };
                var resultInsertUpdateApprove = acctSettlementPaymentService.InsertOrUpdateApprovalSettlement(approve);
                if (!resultInsertUpdateApprove.Success)
                {
                    ResultHandle _result = new ResultHandle {
                        Status = false, Message = resultInsertUpdateApprove.Exception.Message
                    };
                    return(BadRequest(_result));
                }
                return(Ok(result));
            }
            else
            {
                return(BadRequest(result));
            }
        }
        public IActionResult Update(CreateUpdateSettlementModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var isAllowUpdate = acctSettlementPaymentService.CheckUpdatePermissionBySettlementId(model.Settlement.Id);

            if (isAllowUpdate == false)
            {
                return(BadRequest(new ResultHandle {
                    Status = false, Message = stringLocalizer[LanguageSub.DO_NOT_HAVE_PERMISSION].Value
                }));
            }

            //Đã check bên trong function UpdateSettlementPayment
            //if (!model.Settlement.StatusApproval.Equals(Constants.STATUS_APPROVAL_NEW) && !model.Settlement.StatusApproval.Equals(Constants.STATUS_APPROVAL_DENIED))
            //{
            //    ResultHandle _result = new ResultHandle { Status = false, Message = "Only allowed to edit the settlement payment status is New or Deny" };
            //    return Ok(_result);
            //}

            //Check duplicate
            if (model.ShipmentCharge.Count > 0)
            {
                foreach (var item in model.ShipmentCharge)
                {
                    var shipment = new CheckDuplicateShipmentSettlementCriteria
                    {
                        SurchargeID = item.Id,
                        ChargeID    = item.ChargeId,
                        TypeCharge  = item.Type,
                        HBLID       = item.Hblid,
                        Partner     = item.Type.Equals(AccountingConstants.TYPE_CHARGE_BUY) ? item.PaymentObjectId : item.PayerId,
                        CustomNo    = item.ClearanceNo,
                        InvoiceNo   = item.InvoiceNo,
                        ContNo      = item.ContNo,
                        MBLNo       = item.MBL,
                        HBLNo       = item.HBL,
                        JobNo       = item.JobId
                    };
                    var _checkDuplicate = acctSettlementPaymentService.CheckDuplicateShipmentSettlement(shipment);
                    if (_checkDuplicate.Status)
                    {
                        ResultHandle _result = new ResultHandle {
                            Status = false, Message = _checkDuplicate.Message
                        };
                        return(BadRequest(_result));
                    }
                }
            }
            else
            {
                ResultHandle _result = new ResultHandle {
                    Status = false, Message = "Settlement Payment don't have any charge in this period, Please check it again!"
                };
                return(BadRequest(_result));
            }

            var hs = acctSettlementPaymentService.UpdateSettlementPayment(model);

            if (hs.Code == 403)
            {
                return(BadRequest(new ResultHandle {
                    Status = false, Message = stringLocalizer[LanguageSub.DO_NOT_HAVE_PERMISSION].Value
                }));
            }

            var          message = HandleError.GetMessage(hs, Crud.Update);
            ResultHandle result  = new ResultHandle {
                Status = hs.Success, Message = stringLocalizer[message].Value, Data = model
            };

            if (!hs.Success)
            {
                return(BadRequest(result));
            }
            return(Ok(result));
        }
        public IActionResult Add(CreateUpdateSettlementModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            //Check duplicate
            if (model.ShipmentCharge.Count > 0)
            {
                foreach (var item in model.ShipmentCharge)
                {
                    var shipment = new CheckDuplicateShipmentSettlementCriteria
                    {
                        SurchargeID = item.Id,
                        ChargeID    = item.ChargeId,
                        TypeCharge  = item.Type,
                        HBLID       = item.Hblid,
                        Partner     = item.Type.Equals(AccountingConstants.TYPE_CHARGE_BUY) ? item.PaymentObjectId : item.PayerId,
                        CustomNo    = item.ClearanceNo,
                        InvoiceNo   = item.InvoiceNo,
                        ContNo      = item.ContNo,
                        MBLNo       = item.MBL,
                        HBLNo       = item.HBL,
                        JobNo       = item.JobId
                    };
                    var _checkDuplicate = acctSettlementPaymentService.CheckDuplicateShipmentSettlement(shipment);
                    if (_checkDuplicate.Status)
                    {
                        ResultHandle _result = new ResultHandle {
                            Status = false, Message = _checkDuplicate.Message
                        };
                        return(BadRequest(_result));
                    }
                }
            }
            else
            {
                ResultHandle _result = new ResultHandle {
                    Status = false, Message = "Settlement Payment don't have any charge in this period, Please check it again!"
                };
                return(BadRequest(_result));
            }

            var hs = acctSettlementPaymentService.AddSettlementPayment(model);

            if (hs.Code == 403)
            {
                return(BadRequest(new ResultHandle {
                    Status = false, Message = stringLocalizer[LanguageSub.DO_NOT_HAVE_PERMISSION].Value
                }));
            }

            var          message = HandleError.GetMessage(hs, Crud.Insert);
            ResultHandle result  = new ResultHandle {
                Status = hs.Success, Message = stringLocalizer[message].Value, Data = model
            };

            if (!hs.Success)
            {
                return(BadRequest(result));
            }
            return(Ok(result));
        }