Beispiel #1
0
        private async Task <bool> CheckIfDocumentDateAccountingPeriodValid(ManualJournalDocument manualJournalDocument, AccountingSetupDto accountingSetup)
        {
            bool allChecksPassed = true;

            bool isPostOpClosedPrivilege = false;

            isPostOpClosedPrivilege = await CheckPrivileges();

            if (manualJournalDocument.TransactionDocumentTypeId == (int)MasterDocumentType.JL)
            {
                if (IsLastMonthForAccountingOpen(accountingSetup.LastMonthClosed, manualJournalDocument.AccountingPeriod, accountingSetup.NumberOfOpenPeriod, accountingSetup.LastMonthClosedForOperation))
                {
                    if (!isPostOpClosedPrivilege)
                    {
                        if (IsPeriodBeforeLastMonthForOperation(accountingSetup.LastMonthClosedForOperation, manualJournalDocument.AccountingPeriod))
                        {
                            allChecksPassed = false;
                        }
                    }
                }
                else
                {
                    allChecksPassed = false;
                }
            }
            else if (manualJournalDocument.TransactionDocumentTypeId == (int)MasterDocumentType.TA)
            {
                bool checkAccountingPeriod = IsLastMonthForAccountingOpen(accountingSetup.LastMonthClosed, manualJournalDocument.AccountingPeriod, accountingSetup.NumberOfOpenPeriod, accountingSetup.LastMonthClosedForOperation);
                bool checkDocumentDate     = IsLastMonthForAccountingOpen(accountingSetup.LastMonthClosed, manualJournalDocument.DocumentDate, accountingSetup.NumberOfOpenPeriod, accountingSetup.LastMonthClosedForOperation);
                if (checkAccountingPeriod && checkDocumentDate)
                {
                    if (!isPostOpClosedPrivilege)
                    {
                        bool checkAccountingPeriodInlastMonthOperations = IsPeriodBeforeLastMonthForOperation(accountingSetup.LastMonthClosedForOperation, manualJournalDocument.AccountingPeriod);
                        bool checkDocumentDateInlastMonthOperations     = IsPeriodBeforeLastMonthForOperation(accountingSetup.LastMonthClosedForOperation, manualJournalDocument.DocumentDate);
                        if (checkAccountingPeriodInlastMonthOperations || checkDocumentDateInlastMonthOperations)
                        {
                            allChecksPassed = false;
                        }
                    }
                }
                else
                {
                    allChecksPassed = false;
                }
            }

            return(allChecksPassed);
        }
Beispiel #2
0
        /// <summary>
        /// Saves a journal document (including its lines)
        /// </summary>
        /// <param name="manualJournalDocument"></param>
        /// <param name="company"></param>
        /// <returns></returns>
        public async Task <ManualJournalResponse> CreateManualJournal(ManualJournalDocument manualJournalDocument, string company)
        {
            DynamicParameters queryParameters = new DynamicParameters();

            queryParameters.Add(DataVersionIdParameter, null);
            queryParameters.Add("@TransactionDocumentId", manualJournalDocument.TransactionDocumentId);
            queryParameters.Add("@DocumentDate", manualJournalDocument.DocumentDate.Date);
            queryParameters.Add("@ValueDate", manualJournalDocument.ValueDate);
            queryParameters.Add("@AccountingPeriod", manualJournalDocument.AccountingPeriod.Date);
            queryParameters.Add("@CompanyId", company);
            queryParameters.Add("@CurrencyCode", manualJournalDocument.CurrencyCode);
            queryParameters.Add("@TransactionDocumentTypeId", manualJournalDocument.TransactionDocumentTypeId);
            queryParameters.Add("@AuthorizedForPosting", manualJournalDocument.AuthorizedForPosting);
            queryParameters.Add("@ToInterface", manualJournalDocument.ToInterface);
            queryParameters.Add("@PhysicalDocumentId", manualJournalDocument.PhysicalDocumentId);
            queryParameters.Add("@DocumentReference", manualJournalDocument.DocumentReference);
            queryParameters.Add("@YearNumber", manualJournalDocument.YearNumber);
            queryParameters.Add("@Year", manualJournalDocument.Year);
            queryParameters.Add("@JLTypeId", manualJournalDocument.JLTypeId);
            queryParameters.Add("@TATypeId", manualJournalDocument.TATypeId);
            queryParameters.Add("@JournalLines", ToArrayTVP(manualJournalDocument.ManualJournalLines));
            return(await ExecuteQueryFirstOrDefaultAsync <ManualJournalResponse>(StoredProcedureNames.CreateManualJournalDocument, queryParameters, true));
        }
Beispiel #3
0
        public async Task <ManualJournalResponse> Handle(CreateManualJournalDocumentCommand request, CancellationToken cancellationToken)
        {
            _unitOfWork.BeginTransaction();
            AccountingSetupDto accountingSetup = null;
            Company            company         = null;

            try
            {
                string documentLabel              = string.Empty;
                string year                       = string.Empty;
                int    documentReferenceYear      = 0;
                string documentReferenceYearValue = string.Empty;

                ManualJournalDocument manualJournalDocument = request.ManualJournal;
                company = await _masterDataService.GetCompanyByIdAsync(request.Company);

                CommonRules commonRules = new CommonRules(_accountingQueries, _authorizationService, _identityService);

                if (manualJournalDocument.AccountingPeriod.Year < manualJournalDocument.DocumentDate.Year ||
                    (manualJournalDocument.AccountingPeriod.Year <= manualJournalDocument.DocumentDate.Year &&
                     manualJournalDocument.AccountingPeriod.Month < manualJournalDocument.DocumentDate.Month))
                {
                    throw new AtlasBusinessException("A/c period should not be before doc. Date");
                }

                accountingSetup = await _accountingQueries.GetAccountingSetup(request.Company);

                if (accountingSetup != null)
                {
                    if (await CheckIfDocumentDateAccountingPeriodValid(manualJournalDocument, accountingSetup))
                    {
                        if (company.IsProvinceEnable)
                        {
                            foreach (var item in manualJournalDocument.ManualJournalLines)
                            {
                                item.ProvinceId = company.DefaultProvinceId;
                                item.BranchId   = company.DefaultBranchId;
                            }
                        }
                        else
                        {
                            foreach (var item in manualJournalDocument.ManualJournalLines)
                            {
                                item.ProvinceId = item.BranchId = null;
                            }
                        }
                        if (manualJournalDocument.TransactionDocumentTypeId == (int)MasterDocumentType.TA ||
                            manualJournalDocument.TransactionDocumentTypeId == (int)MasterDocumentType.JL)
                        {
                            documentLabel         = Enum.GetName(typeof(MasterDocumentType), manualJournalDocument.TransactionDocumentTypeId);
                            year                  = manualJournalDocument.DocumentDate.Year.ToString(CultureInfo.InvariantCulture).Substring(2, 2);
                            documentReferenceYear = await commonRules.GetDocumentReferenceYear(manualJournalDocument.DocumentDate, request.Company);

                            documentReferenceYearValue = documentReferenceYear.ToString(System.Globalization.CultureInfo.InvariantCulture).Substring(2, 2);
                        }

                        if (manualJournalDocument.TransactionDocumentTypeId == (int)MasterDocumentType.JL)
                        {
                            manualJournalDocument.JLTypeId = (int)JLType.ManualRegularJournal;
                        }
                        else if (manualJournalDocument.TransactionDocumentTypeId == (int)MasterDocumentType.TA)
                        {
                            if (manualJournalDocument.TATypeId != null)
                            {
                                manualJournalDocument.TATypeId = (int)TAType.ManualMarkToMarket;
                            }
                            else
                            {
                                manualJournalDocument.TATypeId = (int)TAType.ManualTemporaryAdjustment;
                            }
                        }


                        int referencenumber = await _manualJournalQueries.GetManualDocumentReferenceValues(request.Company, (int)manualJournalDocument.TransactionDocumentTypeId, documentReferenceYear);

                        manualJournalDocument.YearNumber = referencenumber;

                        manualJournalDocument.Year = documentReferenceYear;

                        manualJournalDocument.DocumentReference = string.Concat(documentLabel, documentReferenceYearValue, string.Format(CultureInfo.InvariantCulture, "{0:D5}", referencenumber));

                        var objResponse = await _manualJournalRepository.CreateManualJournal(manualJournalDocument, request.Company);

                        var authorizationResult = await _authorizationService.AuthorizeAsync(_identityService.GetUser(), Policies.PostOpClosedPolicy);

                        var content = new JObject();
                        content.Add(new JProperty("docId", objResponse.TransactionDocumentId));
                        content.Add(new JProperty("postOpClosedPolicy", authorizationResult.Succeeded));

                        Atlas.Application.Core.Entities.ProcessMessage message = new Atlas.Application.Core.Entities.ProcessMessage​
                        {
                            ProcessTypeId = (long)Atlas.Application.Core.Entities.ProcessType.AtlasAccountingDocumentProcessor,
                            CompanyId     = request.Company,
                            Content       = content.ToString(),
                        };

                        await _processMessageService.SendMessage(message);

                        _unitOfWork.Commit();

                        return(objResponse);
                    }
                    else
                    {
                        throw new AtlasSecurityException($"Please check the document date and accounting period");
                    }
                }
                else
                {
                    throw new AtlasSecurityException($"No Accounting Setup found");
                }
            }
            catch
            {
                _unitOfWork.Rollback();

                throw;
            }
        }