예제 #1
0
        /// <summary>
        /// Add Agent To The Accounting chart ..
        /// If note type = 1 "Debit" add under A/R .. else 2 "Credit" addd under A/P
        /// </summary>
        /// <param name="agentId">Agent Id</param>
        /// <param name="agentType">Agent Note Type</param>
        /// <returns></returns>
        public static string AddAgentToChart(int agentId, byte agentType)
        {
            string parentAccountId = "", accountId;

            if (agentType == 1) //Debit Note .. A/R
            {
                parentAccountId = ((int)AccountingChartEnum.Agents).ToString();
            }
            else
            {
                parentAccountId = ((int)AccountingChartEnum.Agents).ToString();
            }

            AgentVm agentObj  = AgentHelper.GetAgentInfo(agentId);
            string  accNameEn = agentObj.AgentNameEn;
            string  accNameAr = string.IsNullOrEmpty(agentObj.AgentNameAr) ? agentObj.AgentNameEn : agentObj.AgentNameAr;

            //Add new accountId to the chart
            accountId = AccountingChartHelper
                        .AddAccountToChart(accNameEn, accNameEn, parentAccountId);

            AccountingChartHelper.AddAccountIdToObj(accountId, "Agent", agentId, "AgentId");

            return(accountId);
        }
예제 #2
0
        private static void AddExpenseReceiptToTrans(CashInVm cashInVmObj)
        {
            string creditAccId = AccountingChartHelper.GetAccountIdByPkAndTbName(cashInVmObj.CurrencyId, "Currency", "CurrencyId");

            if (string.IsNullOrEmpty(creditAccId))
            {
                string parentAccountId = ((int)AccountingChartEnum.Cash).ToString();
                //Add new accountId to the chart
                creditAccId = AccountingChartHelper
                              .AddAccountToChart(cashInVmObj.CurrencySign, cashInVmObj.CurrencySign, parentAccountId);
                AccountingChartHelper.AddAccountIdToObj(creditAccId, "Currency", cashInVmObj.CurrencyId, "CurrencyId");
            }


            AccTransactionVm accTrans = new AccTransactionVm()
            {
                CreateDate        = DateTime.Now,
                CreateBy          = EasyFreight.DAL.AdminHelper.GetCurrentUserId(),
                TransactionName   = "Cash Out Receipt Number " + cashInVmObj.ReceiptCode,
                TransactionNameAr = "ايصال صرف نقدية رقم " + cashInVmObj.ReceiptCode
            };

            AccountingEntities db = new AccountingEntities();
            var expensesLibList   = db.ExpenseLibs.Select(x => new { x.ExpenseId, x.AccountId }).ToList();

            AccTransactionDetailVm accTransDetDebit;

            //Loop through expenses for debit accounts
            foreach (var item in cashInVmObj.CashOutReceiptExpenses)
            {
                string debitAccId = expensesLibList.Where(x => x.ExpenseId == item.ExpenseId).FirstOrDefault().AccountId;
                accTransDetDebit = new AccTransactionDetailVm()
                {
                    AccountId    = debitAccId,
                    DebitAmount  = item.PaidAmount.Value,
                    CurrencyId   = cashInVmObj.CurrencyId,
                    CreditAmount = 0
                };
                accTrans.AccTransactionDetails.Add(accTransDetDebit);
            }

            // Add Cash as credit
            AccTransactionDetailVm accTransDetCredit = new AccTransactionDetailVm()
            {
                AccountId    = creditAccId,
                CreditAmount = cashInVmObj.ReceiptAmount.Value,
                CurrencyId   = cashInVmObj.CurrencyId,
                DebitAmount  = 0
            };

            accTrans.AccTransactionDetails.Add(accTransDetCredit);



            int transId = AccountingHelper.AddTransaction(accTrans);

            //Update TransId in invoice table
            AccountingChartHelper.AddTransIdToObj(transId, "CashOutReceipt", cashInVmObj.ReceiptId, "ReceiptId");
        }
예제 #3
0
        public static string AddEditExpense(int expenseId, string expenseNameEn, string expenseNameAr)
        {
            string             isSaved = "";
            AccountingEntities db      = new AccountingEntities();
            ExpenseLib         expenseLibDb;

            if (expenseId != 0)
            {
                expenseLibDb = db.ExpenseLibs.Where(x => x.ExpenseId == expenseId).FirstOrDefault();
            }
            else
            {
                expenseLibDb = new ExpenseLib();
            }

            expenseLibDb.ExpenseNameEn = expenseNameEn;
            expenseLibDb.ExpenseNameAr = expenseNameAr;

            if (expenseId == 0)
            {
                db.ExpenseLibs.Add(expenseLibDb);
            }

            using (TransactionScope transaction = new TransactionScope())
            {
                try
                {
                    db.SaveChanges();
                    if (expenseId == 0)
                    {
                        expenseId = expenseLibDb.ExpenseId;
                        string parentAccountId = ((int)AccountingChartEnum.GeneralAndAdministrativeExpenses).ToString();
                        string accountId       = AccountingChartHelper.AddAccountToChart(expenseNameEn, expenseNameAr, parentAccountId);
                        AccountingChartHelper.AddAccountIdToObj(accountId, "ExpenseLib", expenseId, "ExpenseId");

                        isSaved = expenseId.ToString();
                    }

                    transaction.Complete();
                }
                catch (DbEntityValidationException e)
                {
                    isSaved = "false " + e.Message;
                }
                catch (Exception e)
                {
                    isSaved = "false " + e.Message;
                }
            }

            return(isSaved);
        }
예제 #4
0
        public static string AddCashToChart(int currencyId)
        {
            string             parentAccountId = "", accountId;
            AccountingEntities db = new AccountingEntities();
            var currObj = db.CurrencyAccs.Where(x => x.CurrencyId == currencyId).FirstOrDefault();

            parentAccountId = ((int)AccountingChartEnum.Cash).ToString();
            //Add new accountId to the chart
            accountId = AccountingChartHelper
                        .AddAccountToChart(currObj.CurrencySign, currObj.CurrencySign, parentAccountId);
            AccountingChartHelper.AddAccountIdToObj(accountId, "Currency", currObj.CurrencyId, "CurrencyId");

            return(accountId);
        }
예제 #5
0
        public static string AddConsigneeToChart(int consigneeId)
        {
            string parentAccountId = "", accountId;

            parentAccountId = ((int)AccountingChartEnum.AccountsRecievable).ToString();
            var carrVm = ConsigneeHelper.GetConsigneeInfo(consigneeId);

            string accNameEn = carrVm.ConsigneeNameEn;
            string accNameAr = string.IsNullOrEmpty(carrVm.ConsigneeNameAr) ? carrVm.ConsigneeNameEn : carrVm.ConsigneeNameAr;

            //Add new accountId to the chart
            accountId = AccountingChartHelper
                        .AddAccountToChart(accNameEn, accNameEn, parentAccountId);

            AccountingChartHelper.AddAccountIdToObj(accountId, "Consignee", consigneeId, "ConsigneeId");

            return(accountId);
        }
예제 #6
0
        public static string AddShipperToChart(int shipeprId)
        {
            string parentAccountId = "", accountId;

            parentAccountId = ((int)AccountingChartEnum.AccountsRecievable).ToString();
            var carrVm = ShipperHelper.GetShipperInfo(shipeprId);

            string accNameEn = carrVm.ShipperNameEn;
            string accNameAr = string.IsNullOrEmpty(carrVm.ShipperNameAr) ? carrVm.ShipperNameAr : carrVm.ShipperNameEn;

            //Add new accountId to the chart
            accountId = AccountingChartHelper
                        .AddAccountToChart(accNameEn, accNameEn, parentAccountId);

            AccountingChartHelper.AddAccountIdToObj(accountId, "Shipper", shipeprId, "ShipperId");

            return(accountId);
        }
예제 #7
0
        public static string AddContractorToChart(int contrId)
        {
            string parentAccountId = "", accountId;

            parentAccountId = ((int)AccountingChartEnum.APContractors).ToString();
            var carrVm = ContractorHelper.GetContractorInfo(contrId);

            string accNameEn = carrVm.ContractorNameEn;
            string accNameAr = string.IsNullOrEmpty(carrVm.ContractorNameAr) ? carrVm.ContractorNameEn : carrVm.ContractorNameAr;

            //Add new accountId to the chart
            accountId = AccountingChartHelper
                        .AddAccountToChart(accNameEn, accNameEn, parentAccountId);

            AccountingChartHelper.AddAccountIdToObj(accountId, "Contractor", contrId, "ContractorId");

            return(accountId);
        }
예제 #8
0
        /// <summary>
        /// Add Bank Account to The Accounting chart
        /// </summary>
        /// <param name="bankId">Bank Id .. optional .. if 0 .. will get it in code</param>
        /// <param name="bankAccountId">Bank Account Id</param>
        /// <returns>The Accounting chart Account Number</returns>
        public static string AddBankAccountToChart(int bankId, int bankAccountId)
        {
            string debitAccId;
            string parentAccountId = ((int)AccountingChartEnum.CashInBanks).ToString();

            if (bankId == 0)
            {
                AccountingEntities db = new AccountingEntities();
                bankId = db.BankAccounts.Where(x => x.BankAccId == bankAccountId).FirstOrDefault().BankId;
            }

            BankVm        bankInfo    = BankHelper.GetBankInfo(bankId);
            BankAccountVm bankAccount = bankInfo.BankAccounts.Where(x => x.BankAccId == bankAccountId).FirstOrDefault();
            string        accNameEn   = bankAccount.AccountName + " (" + bankAccount.AccountNumber + ")";

            //Add new accountId to the chart
            debitAccId = AccountingChartHelper
                         .AddAccountToChart(accNameEn, accNameEn, parentAccountId);

            AccountingChartHelper.AddAccountIdToObj(debitAccId, "BankAccount", bankAccountId, "BankAccId");

            return(debitAccId);
        }
예제 #9
0
        internal static string GetTaxDepositAccountId(byte orderFrom, int?shipperId, int?consigneeId)
        {
            string accountNameEn = "", accountNameAr = "", accountId = "";

            if (orderFrom == 1) //export
            {
                var shipper = ShipperHelper.GetShipperInfo(shipperId.Value);
                accountId = shipper.TaxDepositAccountId;
                if (string.IsNullOrEmpty(accountId))
                {
                    accountNameEn = shipper.ShipperNameEn + " Tax Deposit";
                    accountNameAr = string.IsNullOrEmpty(shipper.ShipperNameAr) ? accountNameEn  : shipper.ShipperNameAr + " ضريبة الخصم ";
                    string parentAccountId = ((int)AccountingChartEnum.TaxDepositDebit).ToString();
                    //Add new accountId to the chart
                    accountId = AccountingChartHelper.AddAccountToChart(accountNameEn, accountNameAr, parentAccountId);
                    //update AccountId column shipper table
                    AccountingChartHelper.AddAccountIdToObj(accountId, "shipper", shipper.ShipperId, "ShipperId", "TaxDepositAccountId");
                }
            }
            else if (orderFrom == 2) //import
            {
                var consignee = ConsigneeHelper.GetConsigneeInfo(consigneeId.Value);
                accountId = consignee.TaxDepositAccountId;
                if (string.IsNullOrEmpty(accountId))
                {
                    accountNameEn = consignee.ConsigneeNameEn + " Tax Deposit";
                    accountNameAr = string.IsNullOrEmpty(consignee.ConsigneeNameAr) ? accountNameEn + " Tax Deposit" : consignee.ConsigneeNameAr + " ضريبة الخصم ";
                    string parentAccountId = ((int)AccountingChartEnum.TaxDepositDebit).ToString();
                    //Add new accountId to the chart
                    accountId = AccountingChartHelper.AddAccountToChart(accountNameEn, accountNameAr, parentAccountId);
                    //update AccountId column shipper table
                    AccountingChartHelper.AddAccountIdToObj(accountId, "consignee", consignee.ConsigneeId, "ConsigneeId", "TaxDepositAccountId");
                }
            }

            return(accountId);
        }
예제 #10
0
        internal static void AddReceiptToTransTable(string debitAccountId, CashInVm cashInVmObj, bool IsOpenBalancePayment = false)
        {
            //Check Payment type
            string creditAccId = "";
            byte   paymentType = cashInVmObj.PaymentTermId;

            switch (paymentType)
            {
            case 1:     //cash
                creditAccId = AccountingChartHelper.GetAccountIdByPkAndTbName(cashInVmObj.CurrencyId, "Currency", "CurrencyId");
                if (string.IsNullOrEmpty(creditAccId))
                {
                    string parentAccountId = ((int)AccountingChartEnum.Cash).ToString();
                    //Add new accountId to the chart
                    creditAccId = AccountingChartHelper
                                  .AddAccountToChart(cashInVmObj.CurrencySign, cashInVmObj.CurrencySign, parentAccountId);
                    AccountingChartHelper.AddAccountIdToObj(creditAccId, "Currency", cashInVmObj.CurrencyId, "CurrencyId");
                }
                break;

            case 3:     // Bank Cash Deposit
                int bankAccountId = cashInVmObj.BankAccId.Value;
                int bankId        = cashInVmObj.BankId.Value;
                creditAccId = AccountingChartHelper.GetAccountIdByPkAndTbName(bankAccountId, "BankAccount", "BankAccId");
                if (string.IsNullOrEmpty(creditAccId))
                {
                    creditAccId = AccountingChartHelper.AddBankAccountToChart(bankId, bankAccountId);
                }
                break;

            case 4:     //Check
                creditAccId = ((int)AccountingChartEnum.NotesPayable).ToString();
                break;

            default:
                break;
            }

            AccTransactionVm accTrans = new AccTransactionVm()
            {
                CreateDate        = DateTime.Now,
                CreateBy          = EasyFreight.DAL.AdminHelper.GetCurrentUserId(),
                TransactionName   = "Cash Out Receipt Number " + cashInVmObj.ReceiptCode + (IsOpenBalancePayment ? " pay open balance " : ""),
                TransactionNameAr = "ايصال صرف نقدية رقم " + cashInVmObj.ReceiptCode
            };

            AccTransactionDetailVm accTransDetDebit = new AccTransactionDetailVm()
            {
                AccountId    = debitAccountId,
                CreditAmount = 0,
                CurrencyId   = cashInVmObj.CurrencyId,
                DebitAmount  = cashInVmObj.ReceiptAmount.Value
            };

            accTrans.AccTransactionDetails.Add(accTransDetDebit);

            AccTransactionDetailVm accTransDetCredit = new AccTransactionDetailVm()
            {
                AccountId    = creditAccId,
                CreditAmount = cashInVmObj.ReceiptAmount.Value,
                CurrencyId   = cashInVmObj.CurrencyId,
                DebitAmount  = 0
            };

            accTrans.AccTransactionDetails.Add(accTransDetCredit);


            int transId = AccountingHelper.AddTransaction(accTrans);

            //Update TransId in invoice table
            AccountingChartHelper.AddTransIdToObj(transId, "CashOutReceipt", cashInVmObj.ReceiptId, "ReceiptId");
        }
예제 #11
0
        //public static OpenBalanceVm GetOpenBalanceForCash()
        //{
        //    OpenBalanceVm balanceVm = new OpenBalanceVm();
        //    balanceVm.TbName = "Currency";
        //    balanceVm.LibItemId = 0;
        //    balanceVm.CreateDate = DateTime.Now;
        //    balanceVm.IsCreditAgent = false;

        //    AccountingEntities db = new AccountingEntities();

        //    //Get Currency List
        //    var currList = db.CurrencyAccs.ToList();
        //    OpenBalanceDetailVm openBalanceDet;

        //    foreach (var item in currList)
        //    {
        //        string accountId = AccountingChartHelper.GetAccountIdByPkAndTbName(item.CurrencyId, "Currency", "CurrencyId");
        //        //Get Transaction details for open balance
        //        var accTanDet = db.AccTransactionDetails.Include("AccTransaction")
        //            .Where(x => x.AccountId == accountId && x.AccTransaction.TransactionName == "open balance").ToList();
        //        openBalanceDet = new OpenBalanceDetailVm();
        //        openBalanceDet.CurrencyId = item.CurrencyId;
        //        openBalanceDet.CurrencySign = item.CurrencySign;
        //        openBalanceDet.CurrencyAccountId = item.AccountId;
        //        //check if has open balance for this currency
        //        var openAccTran = accTanDet.Where(x => x.CurrencyId == item.CurrencyId).FirstOrDefault();
        //        if (openAccTran != null)
        //        {
        //            openBalanceDet.TransDetailId = openAccTran.TransDetailId;
        //            openBalanceDet.CreditAmount = openAccTran.CreditAmount;
        //            openBalanceDet.DebitAmount = openAccTran.DebitAmount;
        //        }

        //        balanceVm.OpenBalanceDetails.Add(openBalanceDet);
        //    }



        //    return balanceVm;
        //}

        public static string AddEditOpenBalance(OpenBalanceVm openBalanceVm)
        {
            string isSaved = "true";

            string accountId = "";
            string tbName, pkName; int libId; bool isCreditAgent = false;

            libId  = openBalanceVm.LibItemId;
            tbName = openBalanceVm.TbName;
            pkName = openBalanceVm.PkName;
            if (openBalanceVm.IsCreditAgent != null)
            {
                isCreditAgent = openBalanceVm.IsCreditAgent.Value;
            }

            //Get AccountId
            accountId = AccountingChartHelper.GetAccountIdByPkAndTbName(libId, tbName, pkName);
            if (string.IsNullOrEmpty(accountId))
            {
                switch (tbName)
                {
                case "Agent":
                    byte agentType;
                    if (isCreditAgent == false)
                    {
                        agentType = 1;     //debit note A/R
                    }
                    else
                    {
                        agentType = 2;     //Credit note A/P
                    }
                    accountId = AccountingChartHelper.AddAgentToChart(libId, agentType);
                    break;

                case "Carrier":
                    accountId = AccountingChartHelper.AddCarrierToChart(libId);
                    break;

                case "Contractor":
                    accountId = AccountingChartHelper.AddContractorToChart(libId);
                    break;

                case "Shipper":
                    accountId = AccountingChartHelper.AddShipperToChart(libId);
                    break;

                case "Consignee":
                    accountId = AccountingChartHelper.AddConsigneeToChart(libId);
                    break;

                case "Currency":
                    accountId = AccountingChartHelper.AddCashToChart(libId);
                    break;

                case "BankAccount":
                    accountId = AccountingChartHelper.AddBankAccountToChart(0, libId);
                    break;

                case "AccountingChart":
                    accountId = AccountingChartHelper.AddBankAccountToChart(0, libId);
                    break;
                }

                AccountingChartHelper.AddAccountIdToObj(accountId, tbName, libId, pkName);
            }

            openBalanceVm.AccountId = accountId;

            int            transId = openBalanceVm.TransId;
            AccTransaction accTran;

            AccountingEntities db = new AccountingEntities();

            if (transId != 0)
            {
                accTran = db.AccTransactions.Include("AccTransactionDetails").Where(x => x.TransId == transId).FirstOrDefault();
                //delete all tran details and add it later
                foreach (var item in accTran.AccTransactionDetails.ToList())
                {
                    db.AccTransactionDetails.Remove(item);
                }
            }
            else
            {
                accTran =
                    new AccTransaction()
                {
                    CreateBy        = AdminHelper.GetCurrentUserId(),
                    CreateDate      = DateTime.Now,
                    TransactionName = "open balance"
                };
            }

            Mapper.CreateMap <OpenBalanceDetailVm, AccTransactionDetail>();
            AccTransactionDetail accTranDetail;

            foreach (var item in openBalanceVm.OpenBalanceDetails.Where(x => x.DebitAmount != null || x.CreditAmount != null))
            {
                accTranDetail = new AccTransactionDetail();

                item.AccountId = accountId;
                Mapper.Map(item, accTranDetail);
                accTran.AccTransactionDetails.Add(accTranDetail);
            }

            if (transId == 0)
            {
                db.AccTransactions.Add(accTran);
            }

            try
            {
                db.SaveChanges();
            }

            catch (DbEntityValidationException e)
            {
                isSaved = "false " + e.Message;
            }
            catch (Exception e)
            {
                isSaved = "false " + e.Message;
            }
            return(isSaved);
        }