public IActionResult Create(CreateMoneyTransferDto model)
        {
            if (ModelState.IsValid)
            {
                if (!Utility.ValidYMobileNo(model.PartnerId))
                {
                    model.Error   = "رقم موبايل خاطئ";
                    model.PayType = new CommonCodeRepo(_db).GetCodesByType("pay.type");
                    return(View(model));
                }
                if (model.Amount <= 0)
                {
                    model.Error   = "المبلغ غير صحيح";
                    model.PayType = new CommonCodeRepo(_db).GetCodesByType("pay.type");
                    return(View(model));
                }
                var result = GetBasicInfo(model.PartnerId, model.Amount);
                if (result.Error != "N/A")
                {
                    model.Error   = result.Error;
                    model.PayType = new CommonCodeRepo(_db).GetCodesByType("pay.type");
                    return(View(model));
                }
                result.AmountName    = new MonyToString().NumToStr(result.Amount);
                result.PayTypeName   = new CommonCodeRepo(_db).GetCodesById(model.PayTypeId, "pay.type").Name;
                result.PayTypeId     = model.PayTypeId;
                result.PayNo         = model.PayNo;
                result.PayDate       = model.PayDate;
                result.PayBank       = model.PayBank;
                result.Note          = model.Note;
                result.BillNo        = model.BillNo;
                result.RequestNo     = model.RequestNo;
                result.RequestAmount = model.RequestAmount;
                result.PayType       = new CommonCodeRepo(_db).GetCodesByType("pay.type");
                return(View("Confirmation", result));
            }
            var payTypes = new CommonCodeRepo(_db).GetCodesByType("pay.type");

            model.PayType = payTypes;
            return(View(model));
        }
        public IActionResult Create()
        {
            var currentRoleId = _partnerManager.GetCurrentUserRole(this.HttpContext);
            var permission    = _partnerActivity.GetPartAct("MoneyTransfer.Create", currentRoleId);

            if (permission == null)
            {
                _toastNotification.AddErrorToastMessage("ليس لديك الصلاحيات الكافية", new ToastrOptions {
                    Title = ""
                });
                return(Redirect(Request.Headers["Referer"].ToString()));
            }
            var model = new CreateMoneyTransferDto();
            var currentPartAccount = _partnerManager.GetCurrentUserAccount(this.HttpContext);
            var currentPart        = _partnerManager.GetPartnerByAccount(currentPartAccount);

            model.CreatorBalance = currentPart.Balance - currentPart.Reserved;
            var payTypes = new CommonCodeRepo(_db).GetCodesByType("pay.type");

            model.PayType = payTypes;
            model.PayDate = DateTime.Today;
            return(View(model));
        }
        public CreateMoneyTransferDto GetBasicInfo(string pId, double amount = 0)
        {
            if (pId.Length != 9)
            {
                return new CreateMoneyTransferDto {
                           Error = "رقم خاطئ"
                }
            }
            ;
            var validateResult = _partnerManager.Validate(pId);

            if (validateResult.Success)
            {
                var currentId = _partnerManager.GetCurrentUserId(this.HttpContext);

                var partner       = validateResult.Partner;
                var currentRoleId = _partnerManager.GetCurrentUserRole(this.HttpContext);
                var permission    = _partnerActivity.GetPartAct("MoneyTransfer.Create", currentRoleId);
                if (permission == null)
                {
                    return(new CreateMoneyTransferDto {
                        Error = "ليس لديك الصلاحية الكافية"
                    });
                }

                if (permission.Details == null || permission.Details?.Count == 0)
                {
                    return(new CreateMoneyTransferDto {
                        Error = "لم يتم تعريف هذا الاجراء او ليس لديك الصلاحية الكافية"
                    });
                }

                var moneyTransferSettings = permission.Details.Find(x => x.ToRole.Id == partner.Role.Id);
                if (moneyTransferSettings == null)
                {
                    return new CreateMoneyTransferDto {
                               Error = "لم يتم تعريف هذا الاجراء او ليس لديك الصلاحية الكافية"
                    }
                }
                ;

                if (permission.Scope.Id == "CurOpOnly")
                {
                    return(new CreateMoneyTransferDto {
                        Error = "نظرا للقيود التي تم تعريفها على العملية لا يمكنك تنفيذ الاجراء"
                    });
                }
                if (permission.Scope.Id == "Exclusive" && partner.RefPartner.Id != currentId)
                {
                    return(new CreateMoneyTransferDto {
                        Error = "ليس لديك الصلاحية الكافية لنقل رصيد الى هذه الجهة"
                    });
                }

                var model = new CreateMoneyTransferDto
                {
                    PartnerId       = partner.Id,
                    PartnerName     = partner.Name,
                    PartnerRoleName = partner.Role.Name,
                    PartnerBalance  = partner.Balance,
                    TaxPercent      = moneyTransferSettings.TaxPercent,
                    BonusPercent    = moneyTransferSettings.BonusPercent,
                    BounsTaxPercent = moneyTransferSettings.BonusTaxPercent,
                    FixedFactor     = moneyTransferSettings.FixedFactor,
                    Error           = "N/A"
                };
                if (amount <= 0)
                {
                    return(model);
                }

                if (moneyTransferSettings.MaxValue > 0 && amount > moneyTransferSettings.MaxValue)
                {
                    model.Error = $"المبلغ اكبر من الاحد الاعلى المسموح به {moneyTransferSettings.MaxValue.ToString("N0")} ";
                    return(model);
                }
                if (moneyTransferSettings.MinValue > 0 && amount < moneyTransferSettings.MinValue)
                {
                    model.Error = $"المبلغ اقل من الاحد الادنى المسموح به {moneyTransferSettings.MinValue.ToString("N0")} ";
                    return(model);
                }

                var currParAccountd = _partnerManager.GetCurrentUserAccount(this.HttpContext);
                var currPart        = _partnerManager.GetPartnerByAccount(currParAccountd);
                model.CreateorId       = currPart.Id;
                model.CreateorName     = currPart.Name;
                model.CreateorRoleId   = currPart.Role.Id;
                model.CreateorRoleName = currPart.Role.Name;
                model.CreatorBalance   = currPart.Balance - currPart.Reserved;
                if (moneyTransferSettings.CheckBalanceRequired)
                {
                    if (amount > model.CreatorBalance)
                    {
                        model.Error = $"رصيدك غير كافي { model.CreatorBalance.ToString("N0") } ";
                        return(model);
                    }
                }

                var netAmount      = amount * (moneyTransferSettings.FixedFactor <= 0 ? 1 : moneyTransferSettings.FixedFactor);
                var taxAmount      = netAmount * (moneyTransferSettings.TaxPercent / 100);
                var bounsAmount    = netAmount * (moneyTransferSettings.BonusPercent / 100);
                var bounsTaxAmount = bounsAmount * (moneyTransferSettings.BonusTaxPercent / 100);
                var recievedAmount = netAmount;

                model.Amount         = amount;
                model.NetAmount      = netAmount;
                model.TaxAmount      = taxAmount;
                model.BounsAmount    = bounsAmount;
                model.BounsTaxAmount = bounsTaxAmount;
                model.ReceivedAmount = recievedAmount;

                return(model);
            }
            else
            {
                return(new CreateMoneyTransferDto {
                    Error = "غير موجود"
                });
            }
        }
        public IActionResult Confirmation(CreateMoneyTransferDto model)
        {
            if (model.Id > 0)
            {
                model.Error = "تم التحويل مسبقا";
                return(View(model));
            }
            var moneyTransfer = new MoneyTransfer();

            moneyTransfer.Partner          = _partnerManager.GetPartnerById(model.PartnerId);
            moneyTransfer.PayType.Id       = model.PayTypeId;
            moneyTransfer.PayNo            = model.PayNo;
            moneyTransfer.PayDate          = model.PayDate;
            moneyTransfer.PayBank          = model.PayBank;
            moneyTransfer.CreatedBy        = _partnerManager.GetPartnerById(_partnerManager.GetCurrentUserId(this.HttpContext));
            moneyTransfer.AccessChannel.Id = "web";
            moneyTransfer.Amount           = model.Amount;
            moneyTransfer.BillNo           = model.BillNo;
            moneyTransfer.RequestNo        = model.RequestNo;
            moneyTransfer.RequestAmount    = model.RequestAmount;
            moneyTransfer.Note             = model.Note;
            moneyTransfer.NetAmount        = model.NetAmount;
            moneyTransfer.TaxPercent       = model.TaxPercent;
            moneyTransfer.TaxAmount        = model.TaxAmount;
            moneyTransfer.BonusPercent     = model.BonusPercent;
            moneyTransfer.BounsAmount      = model.BounsAmount;
            moneyTransfer.BounsTaxPercent  = model.BounsTaxPercent;
            moneyTransfer.BounsTaxAmount   = model.BounsTaxAmount;
            moneyTransfer.ReceivedAmount   = model.ReceivedAmount;

            var result = new MoneyTransferRepo(_db, _partnerManager, _partnerActivity).Create(moneyTransfer);

            if (result.Success)
            {
                model.Id = result.AffectedCount;
                ModelState.SetModelValue("Id", new ValueProviderResult("" + result.AffectedCount + "", CultureInfo.InvariantCulture));
                //CreatePDF(model.Id);
                moneyTransfer.NetAmount         = Math.Round(moneyTransfer.NetAmount, 2);
                moneyTransfer.Partner.Balance   = _partnerManager.GetBalance(moneyTransfer.Partner.Account);
                moneyTransfer.CreatedBy.Balance = _partnerManager.GetBalance(moneyTransfer.CreatedBy.Account);
                new NotificationRepo(_db, _partnerManager).SendNotification <MoneyTransfer>("MoneyTransfer.Create", result.AffectedCount, moneyTransfer);
                return(View(model));
            }
            else
            {
                if (result.AffectedCount == -500)
                {
                    model.Error = "لم يتم تعريف هذا الاجراء او ليس لديك الصلاحية الكافية";
                }
                else if (result.AffectedCount == -501)
                {
                    model.Error = $"رصيدك غير كافي { model.CreatorBalance.ToString("N0") } ";
                }
                else if (result.AffectedCount == -502)
                {
                    model.Error = $"المبلغ اقل من الاحد الادنى المسموح به";
                }
                if (result.AffectedCount == -503)
                {
                    model.Error = $"المبلغ اكبر من الاحد الاعلى المسموح به";
                }
            }
            return(View(model));
        }