Ejemplo n.º 1
0
        private stp_acc_rpt_cover_selResult GetParentCA(tbl_acc_document_article article, int levelNo)
        {
            var parent = article.tbl_acc_chart_account;

            while (parent != null && parent.acc_chart_account_level_no != levelNo)
            {
                parent = parent.tbl_acc_chart_account2;
            }
            string code = "";

            var parentForCode = parent;

            while (parentForCode != null)
            {
                code          = parentForCode.acc_chart_account_child_code + code;
                parentForCode = parentForCode.tbl_acc_chart_account2;
            }

            if (parent == null)
            {
                return(null);
            }
            return(new stp_acc_rpt_cover_selResult()
            {
                acc_rpt_cover_acc_chart_account_code = code,
                acc_rpt_cover_acc_chart_account_credit = article.acc_document_article_credit,
                acc_rpt_cover_acc_chart_account_debt = article.acc_document_article_debt,
                acc_rpt_cover_acc_chart_account_id = parent.acc_chart_account_id,
                acc_rpt_cover_acc_chart_account_name = parent.acc_chart_account_name,
                acc_chart_account_level_no = levelNo
            });
        }
        public void CreateClosingAndOpeningAccountingDocument()
        {
            var db = DDB.NewContext();

            var fiscalYears   = db.tbl_glb_fiscal_year.OrderByDescending(x => x.glb_fiscal_year_id).ToList();
            var newFiscalYear = fiscalYears.First();

            if (GlobalVariables.current_fiscal_year_id != newFiscalYear.glb_fiscal_year_id)
            {
                throw new Exception(string.Format("سال مالی جاری سال {0} و آخرین سال مالی سال {1} می باشد. لطفا با آخرین سال مالی وارد برنامه شوید.", GlobalVariables.current_fiscal_year_name, newFiscalYear.glb_fiscal_year_name));
            }
            if (fiscalYears.Count == 1)
            {
                throw new Exception("برنامه تنها یک سال مالی دارد");
            }

            var oldFiscalYear = fiscalYears[1];

            GlobalVariables.current_fiscal_year_id = oldFiscalYear.glb_fiscal_year_id;
            new BLL <stp_acc_chart_account_calculate_debt_creditResult>().DoDataBaseOperation();
            GlobalVariables.current_fiscal_year_id = newFiscalYear.glb_fiscal_year_id;

            var documents = db.tbl_acc_document.ToList();

            Boolean closingDeleted = false;
            var     closings       = db.tbl_acc_document
                                     .Where
                                     (
                x =>
                x.acc_document_is_closing == true &&
                x.acc_document_glb_fiscal_year_id == oldFiscalYear.glb_fiscal_year_id
                                     ).ToList();

            if (closings.Count > 0)
            {
                closingDeleted = true;
                db.tbl_acc_document.DeleteObject(closings.First());
            }

            var openings = db.tbl_acc_document
                           .Where
                           (
                x =>
                x.acc_document_is_opening == true &&
                x.acc_document_glb_fiscal_year_id == newFiscalYear.glb_fiscal_year_id
                           ).ToList();

            if (openings.Count > 0)
            {
                db.tbl_acc_document.DeleteObject(openings.First());
            }

            long newDocumentCode = CreateNewDocumentCode(db, oldFiscalYear.glb_fiscal_year_id);
            var  newDocumentNo   = CreateNewDocumentNo(db, oldFiscalYear.glb_fiscal_year_id);

            if (closingDeleted && newDocumentCode > 1)
            {
                newDocumentCode--;
            }

            if (closingDeleted && newDocumentNo > 1)
            {
                newDocumentNo--;
            }

            var closingDocumentType  = FindAccDocumentType(db, "اخ");
            var openningDocumentType = FindAccDocumentType(db, "اف");

            string closingDescription  = "سند اختتامیه سال " + oldFiscalYear.glb_fiscal_year_name;
            string openningDescription = "سند افتتاحیه سال " + newFiscalYear.glb_fiscal_year_name;

            var closingDocument = new tbl_acc_document()
            {
                acc_document_acc_document_type_id = closingDocumentType.acc_document_type_id,
                acc_document_date                   = APMDateTime.dateWithNoSlash(APMDateTime.Today),
                acc_document_description            = closingDescription,
                acc_document_glb_branch_id          = GlobalVariables.current_branch_id,
                acc_document_glb_fiscal_year_id     = oldFiscalYear.glb_fiscal_year_id,
                acc_document_from_inventory         = false,
                acc_document_is_closing             = true,
                acc_document_is_opening             = false,
                acc_document_register_date          = APMDateTime.dateWithNoSlash(APMDateTime.Today),
                acc_document_register_time          = APMDateTime.SystemTime,
                acc_document_registerer_glb_user_id = GlobalVariables.current_user_id,
                acc_document_status_glb_coding_id   = (long)AccDocumentStatus.Temporary,
                acc_document_code                   = newDocumentCode.ToString(),
                acc_document_no = newDocumentNo
            };

            var openningDocument = new tbl_acc_document()
            {
                acc_document_acc_document_type_id = openningDocumentType.acc_document_type_id,
                acc_document_date                   = APMDateTime.dateWithNoSlash(APMDateTime.Today),
                acc_document_description            = openningDescription,
                acc_document_glb_branch_id          = GlobalVariables.current_branch_id,
                acc_document_glb_fiscal_year_id     = newFiscalYear.glb_fiscal_year_id,
                acc_document_from_inventory         = false,
                acc_document_is_closing             = false,
                acc_document_is_opening             = true,
                acc_document_register_date          = APMDateTime.dateWithNoSlash(APMDateTime.Today),
                acc_document_register_time          = APMDateTime.SystemTime,
                acc_document_registerer_glb_user_id = GlobalVariables.current_user_id,
                acc_document_status_glb_coding_id   = (long)AccDocumentStatus.Temporary,
                acc_document_code                   = (newDocumentCode + 1).ToString(),
                acc_document_no = 1
            };

            var accounts = db.tbl_acc_chart_account.ToList();

            foreach (tbl_acc_chart_account account in accounts)
            {
                if (!account.acc_chart_account_acc_detail_id.HasValue)
                {
                    continue;
                }

                double debt      = (account.acc_chart_account_debt.HasValue ? account.acc_chart_account_debt.Value : 0);
                double credit    = (account.acc_chart_account_credit.HasValue ? account.acc_chart_account_credit.Value : 0);
                double remaining = credit - debt;

                credit = (remaining > 0 ? remaining : 0);
                debt   = (remaining < 0 ? -remaining : 0);

                if (debt == credit)
                {
                    continue;
                }

                var closingArticle = new tbl_acc_document_article()
                {
                    acc_document_article_acc_chart_account_id = account.acc_chart_account_id,
                    acc_document_article_credit        = debt,
                    acc_document_article_debt          = credit,
                    acc_document_article_description   = closingDescription,
                    acc_document_article_glb_branch_id = GlobalVariables.current_branch_id,
                };
                closingDocument.tbl_acc_document_article.Add(closingArticle);

                var openningArticle = new tbl_acc_document_article()
                {
                    acc_document_article_acc_chart_account_id = account.acc_chart_account_id,
                    acc_document_article_credit        = credit,
                    acc_document_article_debt          = debt,
                    acc_document_article_description   = openningDescription,
                    acc_document_article_glb_branch_id = GlobalVariables.current_branch_id,
                };
                openningDocument.tbl_acc_document_article.Add(openningArticle);
            }
            db.tbl_acc_document.AddObject(closingDocument);
            db.tbl_acc_document.AddObject(openningDocument);

            db.SaveChanges();
        }