public ActionResult CreateUpdateTransectionAccount(TransectionAccountModel transectionAccountModel)
        {
            if (!ModelState.IsValid)
            {
                return(ShowErrorMessage(GetModelErrors(ModelState)));
            }

            var isPayByUserExist = FarmManagementEntities.PersonalAccounts.Any(x => x.UserId == transectionAccountModel.PayByUserId);

            if (!isPayByUserExist)
            {
                return(ShowErrorMessage("Selected Pay By employee doesn't have personal account."));
            }

            var transectionAccount = new TransectionAccount();

            transectionAccount.Id          = transectionAccountModel.Id;
            transectionAccount.UserId      = transectionAccountModel.UserId;
            transectionAccount.PayByUserId = transectionAccountModel.PayByUserId;
            transectionAccount.Balance     = transectionAccountModel.Balance;
            transectionAccount.Date        = transectionAccountModel.Date;

            var userAccount = FarmManagementEntities.TransectionPersonalAccounts.Where(x => x.UserId == transectionAccountModel.UserId)
                              .OrderByDescending(x => x.InsertDate).First();
            var userPersonalAccount = new TransectionPersonalAccount();

            userPersonalAccount.Debit          = transectionAccountModel.Balance;
            userPersonalAccount.Balance        = userAccount.Balance - transectionAccountModel.Balance;
            userPersonalAccount.Date           = transectionAccountModel.Date;
            userPersonalAccount.InsertDate     = DateTime.Now;
            userPersonalAccount.IsAddedByAdmin = false;
            userPersonalAccount.UserId         = transectionAccountModel.UserId;
            FarmManagementEntities.TransectionPersonalAccounts.Add(userPersonalAccount);


            var payByUserAccount = FarmManagementEntities.TransectionPersonalAccounts.Where(x => x.UserId == transectionAccountModel.PayByUserId)
                                   .OrderByDescending(x => x.InsertDate).FirstOrDefault();
            var payByUserPersonalAccount = new TransectionPersonalAccount();

            payByUserPersonalAccount.Credit         = transectionAccountModel.Balance;
            payByUserPersonalAccount.Balance        = (payByUserAccount == null ? 0 : payByUserAccount.Balance) + transectionAccountModel.Balance;
            payByUserPersonalAccount.Date           = transectionAccountModel.Date;
            payByUserPersonalAccount.InsertDate     = DateTime.Now;
            payByUserPersonalAccount.UserId         = transectionAccountModel.PayByUserId;
            payByUserPersonalAccount.IsAddedByAdmin = false;
            FarmManagementEntities.TransectionPersonalAccounts.Add(payByUserPersonalAccount);

            if (transectionAccountModel.Id == 0)
            {
                transectionAccount.InsertDate = DateTime.Now;
                FarmManagementEntities.TransectionAccounts.Add(transectionAccount);
            }

            FarmManagementEntities.SaveChanges();

            var message = string.Format(Constant.SuccessMessage, transectionAccountModel.Id > 0 ? "updated" : "added");

            return(ShowSuccessMessage(message));
        }
        private void ManageEmployeeBalance(decimal amount)
        {
            var lastTransAccount = FarmManagementEntities.TransectionPersonalAccounts.Where(x => x.UserId == LoggedInUser.UserId)
                                   .OrderByDescending(x => x.InsertDate).FirstOrDefault();

            var transectionAccount = new TransectionPersonalAccount
            {
                UserId     = LoggedInUser.UserId,
                Balance    = (lastTransAccount == null ? 0 : lastTransAccount.Balance) - amount,
                Debit      = amount,
                Date       = DateTime.Now,
                InsertDate = DateTime.Now
            };

            FarmManagementEntities.TransectionPersonalAccounts.Add(transectionAccount);
        }
        public ActionResult CreateUpdateBankLoan(LoanReceivableFromBankModel bankLoanModel)
        {
            if (!ModelState.IsValid)
            {
                return(ShowErrorMessage(GetModelErrors(ModelState)));
            }

            var bankLoan = new LoanReceivableFromBank();

            bankLoan.LoanId              = bankLoanModel.LoanId;
            bankLoan.Amount              = bankLoanModel.Amount;
            bankLoan.NoOfInstallment     = bankLoanModel.NoOfInstallment;
            bankLoan.InterestRate        = bankLoanModel.InterestRate;
            bankLoan.TotalAmountTobePaid = bankLoanModel.TotalAmountTobePaid;
            bankLoan.AccountId           = bankLoanModel.AccountId;
            bankLoan.UserId              = bankLoanModel.UserId;
            bankLoan.LoanReceiveDate     = bankLoanModel.LoanReceiveDate;
            bankLoan.LoanEndDate         = bankLoanModel.LoanEndDate;
            bankLoan.Description         = bankLoanModel.Description;

            var userAccount = FarmManagementEntities.TransectionPersonalAccounts.Where(x => x.UserId == bankLoanModel.UserId)
                              .OrderByDescending(x => x.InsertDate).ToList().First();
            var userPersonalAccount = new TransectionPersonalAccount();

            userPersonalAccount.Credit         = bankLoanModel.Amount;
            userPersonalAccount.Balance        = userAccount.Balance + bankLoanModel.Amount;
            userPersonalAccount.Date           = bankLoanModel.LoanReceiveDate;
            userPersonalAccount.InsertDate     = DateTime.Now;
            userPersonalAccount.IsAddedByAdmin = false;
            userPersonalAccount.UserId         = bankLoanModel.UserId;
            FarmManagementEntities.TransectionPersonalAccounts.Add(userPersonalAccount);

            if (bankLoanModel.Id == 0)
            {
                bankLoan.InsertDate = DateTime.Now;
                FarmManagementEntities.LoanReceivableFromBanks.Add(bankLoan);
            }

            FarmManagementEntities.SaveChanges();

            var message = string.Format(Constant.SuccessMessage, bankLoanModel.Id > 0 ? "updated" : "added");

            return(ShowSuccessMessage(message));
        }
        public ActionResult CreateUpdateTransectionPersonalAccount(TransectionPersonalAccountModel transectionAccountModel)
        {
            if (!ModelState.IsValid)
            {
                return(ShowErrorMessage(GetModelErrors(ModelState)));
            }

            var lastTransAccount = FarmManagementEntities.TransectionPersonalAccounts.Where(x => x.UserId == transectionAccountModel.EmployeeId)
                                   .OrderByDescending(x => x.InsertDate).ToList().FirstOrDefault();
            var lastTransAccountBalance = (lastTransAccount == null ? 0 : lastTransAccount.Balance);

            var transectionAccount = new TransectionPersonalAccount();

            transectionAccount.UserId         = transectionAccountModel.EmployeeId;
            transectionAccount.Date           = transectionAccountModel.Date;
            transectionAccount.IsAddedByAdmin = true;

            var isCredit = (TransectionType)transectionAccountModel.AccountTransectionType == TransectionType.Credit;

            if (isCredit)
            {
                transectionAccount.Credit  = transectionAccountModel.Amount;
                transectionAccount.Balance = lastTransAccountBalance + transectionAccountModel.Amount;
            }
            else
            {
                transectionAccount.Debit   = transectionAccountModel.Amount;
                transectionAccount.Balance = lastTransAccountBalance - transectionAccountModel.Amount;
            }

            if (transectionAccountModel.Id == 0)
            {
                transectionAccount.InsertDate = DateTime.Now;
                FarmManagementEntities.TransectionPersonalAccounts.Add(transectionAccount);
            }

            FarmManagementEntities.SaveChanges();

            var message = string.Format(Constant.SuccessMessage, transectionAccountModel.Id > 0 ? "updated" : "added");

            return(ShowSuccessMessage(message));
        }
        public ActionResult CreateUpdateEmployeeLoan(LoanReceivableFromEmployeeModel employeeLoanModel)
        {
            if (!ModelState.IsValid)
            {
                return(ShowErrorMessage(GetModelErrors(ModelState)));
            }

            var employeeLoan = new LoanReceivableFromEmployee();

            employeeLoan.LoanId        = employeeLoanModel.LoanId;
            employeeLoan.AmountReceive = employeeLoanModel.AmountReceive;
            employeeLoan.AccountId     = employeeLoanModel.AccountId;
            employeeLoan.UserId        = employeeLoanModel.UserId;
            employeeLoan.Date          = employeeLoanModel.Date;

            var userAccount = FarmManagementEntities.TransectionPersonalAccounts.Where(x => x.UserId == employeeLoanModel.UserId)
                              .OrderByDescending(x => x.InsertDate).ToList().First();
            var userPersonalAccount = new TransectionPersonalAccount();

            userPersonalAccount.Credit         = employeeLoanModel.AmountReceive;
            userPersonalAccount.Balance        = userAccount.Balance + employeeLoanModel.AmountReceive;
            userPersonalAccount.Date           = employeeLoanModel.Date;
            userPersonalAccount.InsertDate     = DateTime.Now;
            userPersonalAccount.IsAddedByAdmin = false;
            userPersonalAccount.UserId         = employeeLoanModel.UserId;
            FarmManagementEntities.TransectionPersonalAccounts.Add(userPersonalAccount);

            if (employeeLoanModel.Id == 0)
            {
                employeeLoan.InsertDate = DateTime.Now;
                FarmManagementEntities.LoanReceivableFromEmployees.Add(employeeLoan);
            }

            FarmManagementEntities.SaveChanges();

            var message = string.Format(Constant.SuccessMessage, employeeLoanModel.Id > 0 ? "updated" : "added");

            return(ShowSuccessMessage(message));
        }