public void DeleteJournal(JournalMasterViewModel journal)
        {
            JournalMaster entity = _journalMasterRepository.GetById(journal.Id);

            _journalMasterRepository.Delete(entity);
            _unitOfWork.SaveChanges();
        }
        public JournalMasterViewModel RetrieveJournalByCode(string code)
        {
            JournalMaster          result       = _journalMasterRepository.GetMany(jm => jm.Code == code).FirstOrDefault();
            JournalMasterViewModel mappedResult = new JournalMasterViewModel();

            return(Map(result, mappedResult));
        }
 public void InsertJournal(JournalMasterViewModel journal)
 {
     JournalMaster entity = new JournalMaster();
     Map(journal, entity);
     _journalMasterRepository.AttachNavigation<JournalMaster>(entity.Parent);
     _journalMasterRepository.Add(entity);
     _unitOfWork.SaveChanges();
 }
 public void UpdateJournal(JournalMasterViewModel journal)
 {
     JournalMaster entity = _journalMasterRepository.GetById(journal.Id);
     Map(journal, entity);
     _journalMasterRepository.AttachNavigation<JournalMaster>(entity.Parent);
     _journalMasterRepository.Update(entity);
     _unitOfWork.SaveChanges();
 }
示例#5
0
        private void Properties_EditValueChanged(object sender, EventArgs e)
        {
            JournalMasterViewModel selectedJournal = lookUpJournal.GetSelectedDataRow() as JournalMasterViewModel;

            this.Code                = "REF_CAT_JOURNAL_" + selectedJournal.Code;
            this.CategoryName        = this.SelectedChildren == null ? selectedJournal.Name : this.CategoryName;
            this.CategoryDescription = this.SelectedChildren == null ? selectedJournal.Name : this.CategoryDescription;
        }
示例#6
0
        public void UpdateJournal(JournalMasterViewModel journal)
        {
            JournalMaster entity = _journalMasterRepository.GetById(journal.Id);

            Map(journal, entity);
            _journalMasterRepository.AttachNavigation <JournalMaster>(entity.Parent);
            _journalMasterRepository.Update(entity);
            _unitOfWork.SaveChanges();
        }
示例#7
0
        public void InsertJournal(JournalMasterViewModel journal)
        {
            JournalMaster entity = new JournalMaster();

            Map(journal, entity);
            _journalMasterRepository.AttachNavigation <JournalMaster>(entity.Parent);
            _journalMasterRepository.Add(entity);
            _unitOfWork.SaveChanges();
        }
示例#8
0
 public override void RefreshDataView()
 {
     if (!bgwMain.IsBusy)
     {
         MethodBase.GetCurrentMethod().Info("Fecthing journal data...");
         _selectedJournalMaster = null;
         FormHelpers.CurrentMainForm.UpdateStatusInformation("Memuat data jurnal...", false);
         bgwMain.RunWorkerAsync();
     }
 }
        private void lookUpFilterJournal_EditValueChanged(object sender, EventArgs e)
        {
            gvBalanceHelper.ViewCaption = "-";
            JournalMasterViewModel selectedJournal = lookUpFilterJournal.GetSelectedDataRow() as JournalMasterViewModel;

            if (selectedJournal != null)
            {
                gvBalanceHelper.ViewCaption = string.Format(ViewCaptionFormat, selectedJournal.Name);
            }
        }
示例#10
0
        private void bgwMain_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Result is Exception)
            {
                this.ShowError("Proses memuat data gagal!");
            }

            if (gvJournalMaster.RowCount > 0)
            {
                SelectedJournalMaster = gvJournalMaster.GetRow(0) as JournalMasterViewModel;
            }

            FormHelpers.CurrentMainForm.UpdateStatusInformation("Memuat data jurnal selesai", true);
        }
        protected bool IsCurrentJournalValid(JournalMasterViewModel currentJournal, string codeToCompare)
        {
            if (currentJournal.Code == codeToCompare)
            {
                return(true);
            }

            if (currentJournal.Parent != null)
            {
                return(IsCurrentJournalValid(currentJournal.Parent, codeToCompare));
            }

            return(false);
        }
        public void RecalculateBalanceJournal(int month, int year, int userId)
        {
            // harus pake using, dibiarin aja gak usah try catch commit rollback, kata nya sih udah otomatis
            using (var trans = _unitOfWork.BeginTransaction())
            {
                try
                {
                    BalanceJournalViewModel prevCalculated = RetrieveBalanceJournalHeader(month, year);
                    if (prevCalculated != null)
                    {
                        DeleteBalanceJournal(prevCalculated.Id, userId);
                    }

                    DateTime firstDay  = new DateTime(year, month, 1);
                    DateTime lastDay   = firstDay.AddMonths(1).AddSeconds(-1);
                    DateTime prevMonth = firstDay.AddDays(-1);

                    List <JournalMaster>          listAllJournal       = _journalMasterRepository.GetAll().ToList();
                    List <JournalMasterViewModel> mappedListAllJournal = new List <JournalMasterViewModel>();
                    Map(listAllJournal, mappedListAllJournal);

                    Reference catJournalService = _referenceRepository.GetMany(r => r.Code == DbConstant.REF_CAT_JOURNAL_SERVICE).FirstOrDefault();
                    Reference catJournalCost    = _referenceRepository.GetMany(r => r.Code == DbConstant.REF_CAT_JOURNAL_COST).FirstOrDefault();
                    Reference catJournalIncome  = _referenceRepository.GetMany(r => r.Code == DbConstant.REF_CAT_JOURNAL_INCOME).FirstOrDefault();

                    List <string> catJournalServiceCodeList = _referenceRepository.GetMany(r => r.ParentId == catJournalService.Id).Select(r => r.Value).ToList();
                    List <string> catJournalCostCodeList    = _referenceRepository.GetMany(r => r.ParentId == catJournalCost.Id).Select(r => r.Value).ToList();
                    List <string> catJournalIncomeCodeList  = _referenceRepository.GetMany(r => r.ParentId == catJournalIncome.Id).Select(r => r.Value).ToList();

                    // calculate neraca
                    // ------------------------------------------------------------------------------
                    // List semua akun jurnal dari tabel transaksi
                    List <TransactionDetail> listTransaction = _transactionDetailRepository.GetMany(t =>
                                                                                                    t.Parent.TransactionDate >= firstDay && t.Parent.TransactionDate <= lastDay &&
                                                                                                    t.Parent.Status == (int)DbConstant.DefaultDataStatus.Active).ToList();

                    var journalTransactionList = listTransaction.DistinctBy(t => t.JournalId).Select(t => t.JournalId);
                    List <BalanceJournalDetailViewModel> tempListBalanceDetailViewModel = new List <BalanceJournalDetailViewModel>();
                    foreach (var item in journalTransactionList)
                    {
                        BalanceJournalDetailViewModel detailViewModel = new BalanceJournalDetailViewModel();
                        detailViewModel.JournalId = item;
                        tempListBalanceDetailViewModel.Add(detailViewModel);
                    }
                    // end init semua akun

                    // 1. Ambil Saldo Awal dari Saldo Akhir Bulan Sebelumnya
                    BalanceJournal lastJournal = _balanceJournalRepository.GetMany(bj =>
                                                                                   bj.Month == prevMonth.Month && bj.Year == prevMonth.Year &&
                                                                                   bj.Status == (int)DbConstant.DefaultDataStatus.Active).FirstOrDefault();

                    if (lastJournal != null)
                    {
                        // check apakah semua jurnal di last journal ada di temp list
                        List <BalanceJournalDetail> lastJournalDetail = _balanceJournalDetailRepository.GetMany(bjd => bjd.ParentId == lastJournal.Id).ToList();
                        foreach (var item in lastJournalDetail)
                        {
                            if (tempListBalanceDetailViewModel.Where(temp => temp.JournalId == item.JournalId).Count() == 0)
                            {
                                JournalMasterViewModel mappedJournal = new JournalMasterViewModel();
                                tempListBalanceDetailViewModel.Add(new BalanceJournalDetailViewModel
                                {
                                    Journal   = Map(item.Journal, mappedJournal),
                                    JournalId = item.JournalId
                                });
                            }
                        }

                        // update temp list untuk saldo awal
                        foreach (var item in tempListBalanceDetailViewModel)
                        {
                            BalanceJournalDetail entityDetail = lastJournalDetail.Where(i => i.JournalId == item.JournalId).FirstOrDefault();
                            if (entityDetail == null)
                            {
                                continue;
                            }

                            item.FirstDebit  = entityDetail.LastDebit;
                            item.FirstCredit = entityDetail.LastCredit;
                        }
                    }

                    // 2. Ambil mutasi Debet Kredit dari transaksi bulan berjalan
                    foreach (var item in listTransaction)
                    {
                        if (tempListBalanceDetailViewModel.Where(t => t.JournalId == item.JournalId).Count() == 0)
                        {
                            tempListBalanceDetailViewModel.Add(new BalanceJournalDetailViewModel
                            {
                                JournalId = item.JournalId
                            });
                        }

                        BalanceJournalDetailViewModel currentViewModel = tempListBalanceDetailViewModel.Where(t => t.JournalId == item.JournalId).FirstOrDefault();
                        int currentIndex = tempListBalanceDetailViewModel.IndexOf(currentViewModel);
                        currentViewModel.MutationDebit        = (currentViewModel.MutationDebit ?? 0);
                        currentViewModel.MutationCredit       = (currentViewModel.MutationCredit ?? 0);
                        currentViewModel.ReconciliationDebit  = (currentViewModel.ReconciliationDebit ?? 0);
                        currentViewModel.ReconciliationCredit = (currentViewModel.ReconciliationCredit ?? 0);

                        if (!item.Parent.IsReconciliation)
                        {
                            currentViewModel.MutationCredit += (item.Credit ?? 0);
                            currentViewModel.MutationDebit  += (item.Debit ?? 0);
                        }
                        else
                        {
                            currentViewModel.ReconciliationDebit  += (item.Debit ?? 0);
                            currentViewModel.ReconciliationCredit += (item.Credit ?? 0);
                        }

                        tempListBalanceDetailViewModel[currentIndex] = currentViewModel;
                    }

                    // 4. Hitung Saldo Akhir
                    decimal?      incomeAmount  = 0;
                    decimal?      serviceAmount = 0;
                    decimal?      costAmount    = 0;
                    List <string> cachedCode    = new List <string>();
                    foreach (var item in tempListBalanceDetailViewModel)
                    {
                        // update saldo awal (saldo akhir + mutasi)
                        item.BalanceAfterMutationDebit  = (item.MutationDebit ?? 0);
                        item.BalanceAfterMutationCredit = (item.MutationCredit ?? 0);

                        decimal totalAfterReconciliation =
                            ((item.BalanceAfterMutationDebit ?? 0) + (item.ReconciliationDebit ?? 0)) -
                            ((item.BalanceAfterMutationCredit ?? 0) + (item.ReconciliationCredit ?? 0));
                        if (totalAfterReconciliation > 0)
                        {
                            item.BalanceAfterReconciliationDebit  = totalAfterReconciliation;
                            item.BalanceAfterReconciliationCredit = 0;
                        }
                        else
                        {
                            item.BalanceAfterReconciliationDebit  = 0;
                            item.BalanceAfterReconciliationCredit = Math.Abs(totalAfterReconciliation);
                        }

                        item.LastDebit  = (item.FirstDebit ?? 0) + item.BalanceAfterReconciliationDebit;
                        item.LastCredit = (item.FirstCredit ?? 0) + item.BalanceAfterReconciliationCredit;
                    }

                    // 5. Insert Keb Balance Header & Balance Detail
                    BalanceJournal newBalanceHeader = new BalanceJournal();
                    newBalanceHeader.Month        = month;
                    newBalanceHeader.Year         = year;
                    newBalanceHeader.Status       = (int)DbConstant.DefaultDataStatus.Active;
                    newBalanceHeader.CreateDate   = newBalanceHeader.ModifyDate = DateTime.Now;
                    newBalanceHeader.CreateUserId = newBalanceHeader.ModifyUserId = userId;
                    _balanceJournalRepository.AttachNavigation <User>(newBalanceHeader.CreateUser);
                    _balanceJournalRepository.AttachNavigation <User>(newBalanceHeader.ModifyUser);
                    newBalanceHeader = _balanceJournalRepository.Add(newBalanceHeader);
                    _unitOfWork.SaveChanges();

                    foreach (var item in tempListBalanceDetailViewModel)
                    {
                        item.Journal = null;
                        BalanceJournalDetail newBalanceDetail = new BalanceJournalDetail();
                        Map(item, newBalanceDetail);
                        newBalanceDetail.ParentId = newBalanceHeader.Id;
                        _balanceJournalDetailRepository.AttachNavigation <BalanceJournal>(newBalanceDetail.Parent);
                        _balanceJournalDetailRepository.AttachNavigation <JournalMaster>(newBalanceDetail.Journal);
                        _balanceJournalDetailRepository.Add(newBalanceDetail);
                    }

                    _unitOfWork.SaveChanges();

                    List <BalanceJournalDetailViewModel> mappedResult = RetrieveBalanceJournalDetailsByHeaderId(newBalanceHeader.Id);

                    foreach (var item in tempListBalanceDetailViewModel)
                    {
                        foreach (var journalIncomeCode in catJournalIncomeCodeList)
                        {
                            List <int> cachedItems = new List <int>();
                            foreach (var itemBalance in mappedResult.Where(m => !m.IsChecked))
                            {
                                if (IsCurrentJournalValid(itemBalance.Journal, journalIncomeCode))
                                {
                                    decimal currentAmount = (itemBalance.LastCredit ?? 0) - (itemBalance.LastDebit ?? 0);
                                    incomeAmount += currentAmount;

                                    cachedItems.Add(itemBalance.Id);
                                }
                            }

                            foreach (var iCache in cachedItems)
                            {
                                BalanceJournalDetailViewModel current = mappedResult.Where(m => m.Id == iCache).FirstOrDefault();
                                int iCacheIndex = mappedResult.IndexOf(current);
                                current.IsChecked         = true;
                                mappedResult[iCacheIndex] = current;
                            }
                        }

                        foreach (var journalServiceCode in catJournalServiceCodeList)
                        {
                            List <int> cachedItems = new List <int>();
                            foreach (var itemBalance in mappedResult.Where(m => !m.IsChecked))
                            {
                                if (IsCurrentJournalValid(itemBalance.Journal, journalServiceCode))
                                {
                                    decimal currentAmount = (itemBalance.LastCredit ?? 0) - (itemBalance.LastDebit ?? 0);
                                    serviceAmount += currentAmount;

                                    cachedItems.Add(itemBalance.Id);
                                }
                            }

                            foreach (var iCache in cachedItems)
                            {
                                BalanceJournalDetailViewModel current = mappedResult.Where(m => m.Id == iCache).FirstOrDefault();
                                int iCacheIndex = mappedResult.IndexOf(current);
                                current.IsChecked         = true;
                                mappedResult[iCacheIndex] = current;
                            }
                        }

                        foreach (var journalCostCode in catJournalCostCodeList)
                        {
                            List <int> cachedItems = new List <int>();
                            foreach (var itemBalance in mappedResult.Where(m => !m.IsChecked))
                            {
                                if (IsCurrentJournalValid(itemBalance.Journal, journalCostCode))
                                {
                                    decimal currentAmount = (itemBalance.LastCredit ?? 0) - (itemBalance.LastDebit ?? 0);
                                    costAmount += currentAmount;

                                    cachedItems.Add(itemBalance.Id);
                                }
                            }

                            foreach (var iCache in cachedItems)
                            {
                                BalanceJournalDetailViewModel current = mappedResult.Where(m => m.Id == iCache).FirstOrDefault();
                                int iCacheIndex = mappedResult.IndexOf(current);
                                current.IsChecked         = true;
                                mappedResult[iCacheIndex] = current;
                            }
                        }
                    }

                    //profitloss
                    decimal?profitLossAmount          = incomeAmount + serviceAmount + costAmount;
                    BalanceJournalDetail profitDetail = new BalanceJournalDetail();
                    profitDetail.ParentId = newBalanceHeader.Id;
                    JournalMasterViewModel profitLossCurrentMonthJournal = mappedListAllJournal.Where(j => j.Code == "2.03.05").FirstOrDefault();
                    profitDetail.JournalId = profitLossCurrentMonthJournal.Id;
                    if (profitLossAmount > 0)
                    {
                        profitDetail.LastDebit = profitLossAmount;
                    }
                    else
                    {
                        profitDetail.LastCredit = Math.Abs(profitLossAmount.Value);
                    }
                    _balanceJournalDetailRepository.AttachNavigation <BalanceJournal>(profitDetail.Parent);
                    _balanceJournalDetailRepository.AttachNavigation <JournalMaster>(profitDetail.Journal);
                    _balanceJournalDetailRepository.Add(profitDetail);
                    _unitOfWork.SaveChanges();

                    trans.Commit();
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    throw ex;
                }
            }
        }
        public void RecalculateBalanceJournal(int month, int year, int userId)
        {
            // harus pake using, dibiarin aja gak usah try catch commit rollback, kata nya sih udah otomatis
            using (var trans = _unitOfWork.BeginTransaction())
            {
                try
                {
                    BalanceJournalViewModel prevCalculated = RetrieveBalanceJournalHeader(month, year);
                    if (prevCalculated != null)
                    {
                        DeleteBalanceJournal(prevCalculated.Id, userId);
                    }

                    DateTime firstDay = new DateTime(year, month, 1);
                    DateTime lastDay = firstDay.AddMonths(1).AddSeconds(-1);
                    DateTime prevMonth = firstDay.AddDays(-1);

                    List<JournalMaster> listAllJournal = _journalMasterRepository.GetAll().ToList();
                    List<JournalMasterViewModel> mappedListAllJournal = new List<JournalMasterViewModel>();
                    Map(listAllJournal, mappedListAllJournal);

                    Reference catJournalService = _referenceRepository.GetMany(r => r.Code == DbConstant.REF_CAT_JOURNAL_SERVICE).FirstOrDefault();
                    Reference catJournalCost = _referenceRepository.GetMany(r => r.Code == DbConstant.REF_CAT_JOURNAL_COST).FirstOrDefault();
                    Reference catJournalIncome = _referenceRepository.GetMany(r => r.Code == DbConstant.REF_CAT_JOURNAL_INCOME).FirstOrDefault();

                    List<string> catJournalServiceCodeList = _referenceRepository.GetMany(r => r.ParentId == catJournalService.Id).Select(r => r.Value).ToList();
                    List<string> catJournalCostCodeList = _referenceRepository.GetMany(r => r.ParentId == catJournalCost.Id).Select(r => r.Value).ToList();
                    List<string> catJournalIncomeCodeList = _referenceRepository.GetMany(r => r.ParentId == catJournalIncome.Id).Select(r => r.Value).ToList();

                    // calculate neraca
                    // ------------------------------------------------------------------------------
                    // List semua akun jurnal dari tabel transaksi
                    List<TransactionDetail> listTransaction = _transactionDetailRepository.GetMany(t =>
                        t.Parent.TransactionDate >= firstDay && t.Parent.TransactionDate <= lastDay &&
                        t.Parent.Status == (int)DbConstant.DefaultDataStatus.Active).ToList();

                    var journalTransactionList = listTransaction.DistinctBy(t => t.JournalId).Select(t => t.JournalId);
                    List<BalanceJournalDetailViewModel> tempListBalanceDetailViewModel = new List<BalanceJournalDetailViewModel>();
                    foreach (var item in journalTransactionList)
                    {
                        BalanceJournalDetailViewModel detailViewModel = new BalanceJournalDetailViewModel();
                        detailViewModel.JournalId = item;
                        tempListBalanceDetailViewModel.Add(detailViewModel);
                    }
                    // end init semua akun

                    // 1. Ambil Saldo Awal dari Saldo Akhir Bulan Sebelumnya
                    BalanceJournal lastJournal = _balanceJournalRepository.GetMany(bj =>
                        bj.Month == prevMonth.Month && bj.Year == prevMonth.Year &&
                        bj.Status == (int)DbConstant.DefaultDataStatus.Active).FirstOrDefault();

                    if (lastJournal != null)
                    {
                        // check apakah semua jurnal di last journal ada di temp list
                        List<BalanceJournalDetail> lastJournalDetail = _balanceJournalDetailRepository.GetMany(bjd => bjd.ParentId == lastJournal.Id).ToList();
                        foreach (var item in lastJournalDetail)
                        {
                            if (tempListBalanceDetailViewModel.Where(temp => temp.JournalId == item.JournalId).Count() == 0)
                            {
                                JournalMasterViewModel mappedJournal = new JournalMasterViewModel();
                                tempListBalanceDetailViewModel.Add(new BalanceJournalDetailViewModel
                                {
                                    Journal = Map(item.Journal, mappedJournal),
                                    JournalId = item.JournalId
                                });
                            }
                        }

                        // update temp list untuk saldo awal
                        foreach (var item in tempListBalanceDetailViewModel)
                        {
                            BalanceJournalDetail entityDetail = lastJournalDetail.Where(i => i.JournalId == item.JournalId).FirstOrDefault();
                            if (entityDetail == null) continue;

                            item.FirstDebit = entityDetail.LastDebit;
                            item.FirstCredit = entityDetail.LastCredit;
                        }
                    }

                    // 2. Ambil mutasi Debet Kredit dari transaksi bulan berjalan
                    foreach (var item in listTransaction)
                    {
                        if (tempListBalanceDetailViewModel.Where(t => t.JournalId == item.JournalId).Count() == 0)
                        {
                            tempListBalanceDetailViewModel.Add(new BalanceJournalDetailViewModel
                            {
                                JournalId = item.JournalId
                            });
                        }

                        BalanceJournalDetailViewModel currentViewModel = tempListBalanceDetailViewModel.Where(t => t.JournalId == item.JournalId).FirstOrDefault();
                        int currentIndex = tempListBalanceDetailViewModel.IndexOf(currentViewModel);
                        currentViewModel.MutationDebit = (currentViewModel.MutationDebit ?? 0);
                        currentViewModel.MutationCredit = (currentViewModel.MutationCredit ?? 0);
                        currentViewModel.ReconciliationDebit = (currentViewModel.ReconciliationDebit ?? 0);
                        currentViewModel.ReconciliationCredit = (currentViewModel.ReconciliationCredit ?? 0);

                        if (!item.Parent.IsReconciliation)
                        {
                            currentViewModel.MutationCredit += (item.Credit ?? 0);
                            currentViewModel.MutationDebit += (item.Debit ?? 0);
                        }
                        else
                        {
                            currentViewModel.ReconciliationDebit += (item.Debit ?? 0);
                            currentViewModel.ReconciliationCredit += (item.Credit ?? 0);
                        }

                        tempListBalanceDetailViewModel[currentIndex] = currentViewModel;
                    }

                    // 4. Hitung Saldo Akhir
                    decimal? incomeAmount = 0;
                    decimal? serviceAmount = 0;
                    decimal? costAmount = 0;
                    List<string> cachedCode = new List<string>();
                    foreach (var item in tempListBalanceDetailViewModel)
                    {
                        // update saldo awal (saldo akhir + mutasi)
                        item.BalanceAfterMutationDebit = (item.MutationDebit ?? 0);
                        item.BalanceAfterMutationCredit = (item.MutationCredit ?? 0);

                        decimal totalAfterReconciliation =
                            ((item.BalanceAfterMutationDebit ?? 0) + (item.ReconciliationDebit ?? 0)) -
                            ((item.BalanceAfterMutationCredit ?? 0) + (item.ReconciliationCredit ?? 0));
                        if (totalAfterReconciliation > 0)
                        {
                            item.BalanceAfterReconciliationDebit = totalAfterReconciliation;
                            item.BalanceAfterReconciliationCredit = 0;
                        }
                        else
                        {
                            item.BalanceAfterReconciliationDebit = 0;
                            item.BalanceAfterReconciliationCredit = Math.Abs(totalAfterReconciliation);
                        }

                        item.LastDebit = (item.FirstDebit ?? 0) + item.BalanceAfterReconciliationDebit;
                        item.LastCredit = (item.FirstCredit ?? 0) + item.BalanceAfterReconciliationCredit;
                    }

                    // 5. Insert Keb Balance Header & Balance Detail
                    BalanceJournal newBalanceHeader = new BalanceJournal();
                    newBalanceHeader.Month = month;
                    newBalanceHeader.Year = year;
                    newBalanceHeader.Status = (int)DbConstant.DefaultDataStatus.Active;
                    newBalanceHeader.CreateDate = newBalanceHeader.ModifyDate = DateTime.Now;
                    newBalanceHeader.CreateUserId = newBalanceHeader.ModifyUserId = userId;
                    _balanceJournalRepository.AttachNavigation<User>(newBalanceHeader.CreateUser);
                    _balanceJournalRepository.AttachNavigation<User>(newBalanceHeader.ModifyUser);
                    newBalanceHeader = _balanceJournalRepository.Add(newBalanceHeader);
                    _unitOfWork.SaveChanges();

                    foreach (var item in tempListBalanceDetailViewModel)
                    {
                        item.Journal = null;
                        BalanceJournalDetail newBalanceDetail = new BalanceJournalDetail();
                        Map(item, newBalanceDetail);
                        newBalanceDetail.ParentId = newBalanceHeader.Id;
                        _balanceJournalDetailRepository.AttachNavigation<BalanceJournal>(newBalanceDetail.Parent);
                        _balanceJournalDetailRepository.AttachNavigation<JournalMaster>(newBalanceDetail.Journal);
                        _balanceJournalDetailRepository.Add(newBalanceDetail);
                    }

                    _unitOfWork.SaveChanges();

                    List<BalanceJournalDetailViewModel> mappedResult = RetrieveBalanceJournalDetailsByHeaderId(newBalanceHeader.Id);

                    foreach (var item in tempListBalanceDetailViewModel)
                    {
                        foreach (var journalIncomeCode in catJournalIncomeCodeList)
                        {
                            List<int> cachedItems = new List<int>();
                            foreach (var itemBalance in mappedResult.Where(m => !m.IsChecked))
                            {
                                if (IsCurrentJournalValid(itemBalance.Journal, journalIncomeCode))
                                {
                                    decimal currentAmount = (itemBalance.LastCredit ?? 0) - (itemBalance.LastDebit ?? 0);
                                    incomeAmount += currentAmount;

                                    cachedItems.Add(itemBalance.Id);
                                }
                            }

                            foreach (var iCache in cachedItems)
                            {
                                BalanceJournalDetailViewModel current = mappedResult.Where(m => m.Id == iCache).FirstOrDefault();
                                int iCacheIndex = mappedResult.IndexOf(current);
                                current.IsChecked = true;
                                mappedResult[iCacheIndex] = current;
                            }
                        }

                        foreach (var journalServiceCode in catJournalServiceCodeList)
                        {
                            List<int> cachedItems = new List<int>();
                            foreach (var itemBalance in mappedResult.Where(m => !m.IsChecked))
                            {
                                if (IsCurrentJournalValid(itemBalance.Journal, journalServiceCode))
                                {
                                    decimal currentAmount = (itemBalance.LastCredit ?? 0) - (itemBalance.LastDebit ?? 0);
                                    serviceAmount += currentAmount;

                                    cachedItems.Add(itemBalance.Id);
                                }
                            }

                            foreach (var iCache in cachedItems)
                            {
                                BalanceJournalDetailViewModel current = mappedResult.Where(m => m.Id == iCache).FirstOrDefault();
                                int iCacheIndex = mappedResult.IndexOf(current);
                                current.IsChecked = true;
                                mappedResult[iCacheIndex] = current;
                            }
                        }

                        foreach (var journalCostCode in catJournalCostCodeList)
                        {
                            List<int> cachedItems = new List<int>();
                            foreach (var itemBalance in mappedResult.Where(m => !m.IsChecked))
                            {
                                if (IsCurrentJournalValid(itemBalance.Journal, journalCostCode))
                                {
                                    decimal currentAmount = (itemBalance.LastCredit ?? 0) - (itemBalance.LastDebit ?? 0);
                                    costAmount += currentAmount;

                                    cachedItems.Add(itemBalance.Id);
                                }
                            }

                            foreach (var iCache in cachedItems)
                            {
                                BalanceJournalDetailViewModel current = mappedResult.Where(m => m.Id == iCache).FirstOrDefault();
                                int iCacheIndex = mappedResult.IndexOf(current);
                                current.IsChecked = true;
                                mappedResult[iCacheIndex] = current;
                            }
                        }
                    }

                    //profitloss
                    decimal? profitLossAmount = incomeAmount + serviceAmount + costAmount;
                    BalanceJournalDetail profitDetail = new BalanceJournalDetail();
                    profitDetail.ParentId = newBalanceHeader.Id;
                    JournalMasterViewModel profitLossCurrentMonthJournal = mappedListAllJournal.Where(j => j.Code == "2.03.05").FirstOrDefault();
                    profitDetail.JournalId = profitLossCurrentMonthJournal.Id;
                    if (profitLossAmount > 0)
                    {
                        profitDetail.LastDebit = profitLossAmount;
                    }
                    else
                    {
                        profitDetail.LastCredit = Math.Abs(profitLossAmount.Value);
                    }
                    _balanceJournalDetailRepository.AttachNavigation<BalanceJournal>(profitDetail.Parent);
                    _balanceJournalDetailRepository.AttachNavigation<JournalMaster>(profitDetail.Journal);
                    _balanceJournalDetailRepository.Add(profitDetail);
                    _unitOfWork.SaveChanges();

                    trans.Commit();
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    throw ex;
                }
            }
        }
        protected bool IsCurrentJournalValid(JournalMasterViewModel currentJournal, string codeToCompare)
        {
            if (currentJournal.Code == codeToCompare) return true;

            if (currentJournal.Parent != null)
            {
                return IsCurrentJournalValid(currentJournal.Parent, codeToCompare);
            }

            return false;
        }
 public JournalMasterViewModel RetrieveJournalByCode(string code)
 {
     JournalMaster result = _journalMasterRepository.GetMany(jm => jm.Code == code).FirstOrDefault();
     JournalMasterViewModel mappedResult = new JournalMasterViewModel();
     return Map(result, mappedResult);
 }
示例#16
0
 private void gvJournalMaster_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
 {
     _selectedJournalMaster = gvJournalMaster.GetFocusedRow() as JournalMasterViewModel;
 }
        public List <BalanceJournalDetailViewModel> RetrieveFormattedBalanceJournalDetailsByHeaderId(int headerId)
        {
            List <BalanceJournalDetailViewModel> mappedResult    = base.RetrieveBalanceJournalDetailsByHeaderId(headerId);
            List <BalanceJournalDetailViewModel> formattedResult = new List <BalanceJournalDetailViewModel>();

            Reference        catBalanceSheetJournal  = _referenceRepository.GetMany(r => r.Code == DbConstant.REF_CAT_JOURNAL_BALANCESHEET).FirstOrDefault();
            List <Reference> listBalanceSheetJournal = _referenceRepository.GetMany(r => r.ParentId == catBalanceSheetJournal.Id).ToList();

            foreach (var itemJournal in listBalanceSheetJournal)
            {
                BalanceJournalDetailViewModel itemResult = new BalanceJournalDetailViewModel();
                itemResult.Parent   = base.RetrieveBalanceJournalHeaderById(headerId);
                itemResult.ParentId = headerId;

                JournalMasterViewModel selectedJournal = base.RetrieveJournalByCode(itemJournal.Value);
                itemResult.Journal   = selectedJournal;
                itemResult.JournalId = selectedJournal.Id;

                itemResult.FirstDebit                       = 0;
                itemResult.FirstCredit                      = 0;
                itemResult.MutationDebit                    = 0;
                itemResult.MutationCredit                   = 0;
                itemResult.BalanceAfterMutationDebit        = 0;
                itemResult.BalanceAfterMutationCredit       = 0;
                itemResult.ReconciliationDebit              = 0;
                itemResult.ReconciliationCredit             = 0;
                itemResult.BalanceAfterReconciliationDebit  = 0;
                itemResult.BalanceAfterReconciliationCredit = 0;
                itemResult.ProfitLossDebit                  = 0;
                itemResult.ProfitLossCredit                 = 0;
                itemResult.LastDebit  = 0;
                itemResult.LastCredit = 0;

                List <int> cachedItems = new List <int>();
                foreach (var itemBalance in mappedResult.Where(m => !m.IsChecked))
                {
                    if (base.IsCurrentJournalValid(itemBalance.Journal, itemJournal.Value))
                    {
                        itemResult.FirstDebit                       += (itemBalance.FirstDebit ?? 0);
                        itemResult.FirstCredit                      += (itemBalance.FirstCredit ?? 0);
                        itemResult.MutationDebit                    += (itemBalance.MutationDebit ?? 0);
                        itemResult.MutationCredit                   += (itemBalance.MutationCredit ?? 0);
                        itemResult.BalanceAfterMutationDebit        += (itemBalance.BalanceAfterMutationDebit ?? 0);
                        itemResult.BalanceAfterMutationCredit       += (itemBalance.BalanceAfterMutationCredit ?? 0);
                        itemResult.ReconciliationDebit              += (itemBalance.ReconciliationDebit ?? 0);
                        itemResult.ReconciliationCredit             += (itemBalance.ReconciliationCredit ?? 0);
                        itemResult.BalanceAfterReconciliationDebit  += (itemBalance.BalanceAfterReconciliationDebit ?? 0);
                        itemResult.BalanceAfterReconciliationCredit += (itemBalance.BalanceAfterReconciliationCredit ?? 0);
                        itemResult.ProfitLossDebit                  += (itemBalance.ProfitLossDebit ?? 0);
                        itemResult.ProfitLossCredit                 += (itemBalance.ProfitLossCredit ?? 0);
                        itemResult.LastDebit  += (itemBalance.LastDebit ?? 0);
                        itemResult.LastCredit += (itemBalance.LastCredit ?? 0);

                        cachedItems.Add(itemBalance.Id);
                    }
                }

                formattedResult.Add(itemResult);

                foreach (var iCache in cachedItems)
                {
                    BalanceJournalDetailViewModel current = mappedResult.Where(m => m.Id == iCache).FirstOrDefault();
                    int iCacheIndex = mappedResult.IndexOf(current);
                    current.IsChecked         = true;
                    mappedResult[iCacheIndex] = current;
                }
            }

            return(formattedResult);
        }
        public List<BalanceHelperItemViewModel> RetrieveBalanceHelper(int year, int month, int journalId)
        {
            List<BalanceHelperItemViewModel> result = new List<BalanceHelperItemViewModel>();

            JournalMaster currentJournal = _journalMasterRepository.GetById(journalId);
            JournalMasterViewModel mappedCurrentJournal = new JournalMasterViewModel();
            Map(currentJournal, mappedCurrentJournal);

            DateTime firstDay = new DateTime(year, month, 1);
            DateTime lastDay = new DateTime(year, month, DateTime.DaysInMonth(year, month));
            DateTime prevMonth = firstDay.AddDays(-1);

            List<TransactionDetail> listTransaction = _transactionDetailRepository.GetMany(t =>
                t.Parent.TransactionDate >= firstDay && t.Parent.TransactionDate <= lastDay &&
                t.Parent.Status == (int)DbConstant.DefaultDataStatus.Active).ToList();
            List<TransactionDetailViewModel> mappedListTransaction = new List<TransactionDetailViewModel>();
            Map(listTransaction, mappedListTransaction);

            mappedListTransaction = mappedListTransaction.Where(mt => IsCurrentJournalValid(mt.Journal, mappedCurrentJournal.Code)).ToList();

            BalanceJournal lastJournal = _balanceJournalRepository.GetMany(bj =>
                bj.Month == prevMonth.Month && bj.Year == prevMonth.Year &&
                bj.Status == (int)DbConstant.DefaultDataStatus.Active).FirstOrDefault();

            if (lastJournal != null)
            {
                List<BalanceJournalDetail> lastJournalDetail = _balanceJournalDetailRepository.GetMany(bjd =>
                    bjd.ParentId == lastJournal.Id).ToList();
                List<BalanceJournalDetailViewModel> mappedLastJournalDetail = new List<BalanceJournalDetailViewModel>();
                Map(lastJournalDetail, mappedLastJournalDetail);
                mappedLastJournalDetail = mappedLastJournalDetail.Where(jDet => IsCurrentJournalValid(jDet.Journal, mappedCurrentJournal.Code)).ToList();
                foreach (var item in mappedLastJournalDetail)
                {
                    BalanceHelperItemViewModel firstBalanceItem = new BalanceHelperItemViewModel();
                    firstBalanceItem.TransactionDate = prevMonth;
                    firstBalanceItem.JournalCode = item.Journal.Code;
                    firstBalanceItem.JournalName = item.Journal.Name;
                    firstBalanceItem.Balance = (item.LastDebit ?? 0) - (item.LastCredit ?? 0);
                    result.Add(firstBalanceItem);
                }
            }

            foreach (var transItem in mappedListTransaction)
            {
                decimal prevBalance = 0;
                if(result.Count > 0)
                {
                    prevBalance = result[result.Count - 1].Balance;
                }

                BalanceHelperItemViewModel transBalanceItem = new BalanceHelperItemViewModel();
                transBalanceItem.TransactionDate = transItem.Parent.TransactionDate;
                transBalanceItem.JournalCode = transItem.Journal.Code;
                transBalanceItem.JournalName = transItem.Journal.Name;
                transBalanceItem.MutationDebit = (transItem.Debit ?? 0);
                transBalanceItem.MutationCredit = (transItem.Credit ?? 0);
                transBalanceItem.Balance = (transBalanceItem.MutationDebit - transBalanceItem.MutationCredit) + prevBalance;
                result.Add(transBalanceItem);

                //if (IsCurrentJournalValid(transItem.Journal, mappedCurrentJournal.Code))
                //{
                //    BalanceHelperItemViewModel transBalanceItem = new BalanceHelperItemViewModel();
                //    transBalanceItem.TransactionDate = transItem.Parent.TransactionDate;
                //    transBalanceItem.JournalCode = transItem.Journal.Code;
                //    transBalanceItem.JournalName = transItem.Journal.Name;
                //    transBalanceItem.MutationDebit = (transItem.Debit ?? 0);
                //    transBalanceItem.MutationCredit = (transItem.Credit ?? 0);
                //    transBalanceItem.Balance = (transBalanceItem.MutationDebit - transBalanceItem.MutationCredit) + prevBalance;
                //    result.Add(transBalanceItem);
                //}
            }

            return result;
        }
        public List <BalanceHelperItemViewModel> RetrieveBalanceHelper(int year, int month, int journalId)
        {
            List <BalanceHelperItemViewModel> result = new List <BalanceHelperItemViewModel>();

            JournalMaster          currentJournal       = _journalMasterRepository.GetById(journalId);
            JournalMasterViewModel mappedCurrentJournal = new JournalMasterViewModel();

            Map(currentJournal, mappedCurrentJournal);

            DateTime firstDay  = new DateTime(year, month, 1);
            DateTime lastDay   = new DateTime(year, month, DateTime.DaysInMonth(year, month));
            DateTime prevMonth = firstDay.AddDays(-1);

            List <TransactionDetail> listTransaction = _transactionDetailRepository.GetMany(t =>
                                                                                            t.Parent.TransactionDate >= firstDay && t.Parent.TransactionDate <= lastDay &&
                                                                                            t.Parent.Status == (int)DbConstant.DefaultDataStatus.Active).ToList();
            List <TransactionDetailViewModel> mappedListTransaction = new List <TransactionDetailViewModel>();

            Map(listTransaction, mappedListTransaction);

            mappedListTransaction = mappedListTransaction.Where(mt => IsCurrentJournalValid(mt.Journal, mappedCurrentJournal.Code)).ToList();

            BalanceJournal lastJournal = _balanceJournalRepository.GetMany(bj =>
                                                                           bj.Month == prevMonth.Month && bj.Year == prevMonth.Year &&
                                                                           bj.Status == (int)DbConstant.DefaultDataStatus.Active).FirstOrDefault();

            if (lastJournal != null)
            {
                List <BalanceJournalDetail> lastJournalDetail = _balanceJournalDetailRepository.GetMany(bjd =>
                                                                                                        bjd.ParentId == lastJournal.Id).ToList();
                List <BalanceJournalDetailViewModel> mappedLastJournalDetail = new List <BalanceJournalDetailViewModel>();
                Map(lastJournalDetail, mappedLastJournalDetail);
                mappedLastJournalDetail = mappedLastJournalDetail.Where(jDet => IsCurrentJournalValid(jDet.Journal, mappedCurrentJournal.Code)).ToList();
                foreach (var item in mappedLastJournalDetail)
                {
                    BalanceHelperItemViewModel firstBalanceItem = new BalanceHelperItemViewModel();
                    firstBalanceItem.TransactionDate = prevMonth;
                    firstBalanceItem.JournalCode     = item.Journal.Code;
                    firstBalanceItem.JournalName     = item.Journal.Name;
                    firstBalanceItem.Balance         = (item.LastDebit ?? 0) - (item.LastCredit ?? 0);
                    result.Add(firstBalanceItem);
                }
            }

            foreach (var transItem in mappedListTransaction)
            {
                decimal prevBalance = 0;
                if (result.Count > 0)
                {
                    prevBalance = result[result.Count - 1].Balance;
                }

                BalanceHelperItemViewModel transBalanceItem = new BalanceHelperItemViewModel();
                transBalanceItem.TransactionDate = transItem.Parent.TransactionDate;
                transBalanceItem.JournalCode     = transItem.Journal.Code;
                transBalanceItem.JournalName     = transItem.Journal.Name;
                transBalanceItem.MutationDebit   = (transItem.Debit ?? 0);
                transBalanceItem.MutationCredit  = (transItem.Credit ?? 0);
                transBalanceItem.Balance         = (transBalanceItem.MutationDebit - transBalanceItem.MutationCredit) + prevBalance;
                result.Add(transBalanceItem);

                //if (IsCurrentJournalValid(transItem.Journal, mappedCurrentJournal.Code))
                //{
                //    BalanceHelperItemViewModel transBalanceItem = new BalanceHelperItemViewModel();
                //    transBalanceItem.TransactionDate = transItem.Parent.TransactionDate;
                //    transBalanceItem.JournalCode = transItem.Journal.Code;
                //    transBalanceItem.JournalName = transItem.Journal.Name;
                //    transBalanceItem.MutationDebit = (transItem.Debit ?? 0);
                //    transBalanceItem.MutationCredit = (transItem.Credit ?? 0);
                //    transBalanceItem.Balance = (transBalanceItem.MutationDebit - transBalanceItem.MutationCredit) + prevBalance;
                //    result.Add(transBalanceItem);
                //}
            }

            return(result);
        }
 public void DeleteJournal(JournalMasterViewModel journal)
 {
     JournalMaster entity = _journalMasterRepository.GetById(journal.Id);
     _journalMasterRepository.Delete(entity);
     _unitOfWork.SaveChanges();
 }