internal static async Task <PostingStatus> GetAccountingDocumentStatus(AccountingSetupDto accountingSetup, IAccountingDocumentQueries accountingQuerie, AccountingDocument accountingDocument, string company, DateTime companyDate, InvoiceInformationDto invoiceInformation = null, CashInformationDto cashInformation = null, RevaluationInformationDto revalInformation = null, CounterpartyInformationDto counterpartyInformation = null) { accountingDocument.ErrorMessage = string.Empty; if (invoiceInformation != null) { if (!CheckPostingForAuthorized(invoiceInformation)) { return(PostingStatus.Incomplete); } } else if (cashInformation != null) { if (!CheckPostingForAuthorized(null, cashInformation)) { return(PostingStatus.Incomplete); } } else if (revalInformation != null) { if (!CheckPostingForAuthorized(null, null, revalInformation)) { return(PostingStatus.Incomplete); } } else if (counterpartyInformation != null) { if (!CheckPostingForAuthorized(null, null, null, counterpartyInformation)) { return(PostingStatus.Incomplete); } } if (CheckSanityCheck(accountingDocument)) { if (CheckFxRateConverted(accountingDocument)) { bool ifInterface = await CheckIfInterface(accountingQuerie, accountingDocument.TransactionDocumentId, company); MappingErrorMessages messages = await CheckMappingError(accountingQuerie, accountingDocument.AccountingDocumentLines, company, accountingDocument.TransactionDocumentTypeId); if (ifInterface) { if (!messages.C2CCode) { accountingDocument.ErrorMessage = "C2C Code Is NULL ;"; } if (!messages.CostAlternativeCode) { accountingDocument.ErrorMessage += "Cost Alternative Code Is NULL ;"; } if (!messages.TaxInterfaceCode) { accountingDocument.ErrorMessage += "Tax Interface Code Is NULL ;"; } if (!messages.NominalAlternativeAccount) { accountingDocument.ErrorMessage += "Nominal Alternative Code Is NULL ;"; } if (!messages.DepartmentAlternativeCode) { accountingDocument.ErrorMessage += "Department Alternative Code Is NULL ;"; } if (!string.IsNullOrEmpty(accountingDocument.ErrorMessage)) { return(PostingStatus.MappingError); } } if (MandatoryFieldValidation(accountingDocument)) { accountingDocument.ErrorMessage = "Mandatory Field Missing"; return(PostingStatus.Held); } if (CheckFutureDate(accountingDocument, companyDate)) { accountingDocument.ErrorMessage = "Future document date"; return(PostingStatus.Held); } if (!IsMonthOpenForAccounting(accountingSetup.LastMonthClosed, accountingDocument.AccountingDate, accountingSetup.NumberOfOpenPeriod)) { accountingDocument.ErrorMessage = "Period is not open for accounting"; return(PostingStatus.Held); } return(PostingStatus.Authorised); } else { accountingDocument.ErrorMessage = "No Fxrate found"; return(PostingStatus.Held); } } else { accountingDocument.ErrorMessage = "Unbalanced document"; return(PostingStatus.Held); } }
internal static bool CheckPostingForAuthorized(InvoiceInformationDto invoiceInformation = null, CashInformationDto cashInformation = null, RevaluationInformationDto revalInformation = null, CounterpartyInformationDto counterpartyInformation = null) { if (invoiceInformation != null) { return(invoiceInformation.AuthorizedForPosting); } if (revalInformation != null) { return(true); } if (counterpartyInformation != null) { return(true); } return(cashInformation.AuthorizedForPosting); }
internal static async Task <AccountingDocument> CreateAccountingDocument( IMasterDataService masterDataService, long userId, bool postOpClosedPrivilege, long docId, int docTypeId, string baseCurrency, FxRateConversion fxRate, AccountingSetupDto accountingSetup, InvoiceInformationDto invoiceInformation = null, CashInformationDto cashInformation = null, DateTime?blDate = null, ManualJournalDocumentDto manualJournal = null, RevaluationInformationDto revalInformation = null, MonthEndTADocumentDto monthEndTADocument = null, CounterpartyInformationDto counterpartyInformation = null, CashForCounterpartyDto cashForCounterpartyDto = null, FxSettlementDocumentDto fxSettlementDocument = null) { AccountingDocument accountingDocument = new AccountingDocument(); accountingDocument.UserCreator = userId; accountingDocument.TransactionDocumentId = docId; accountingDocument.ProvinceId = null; accountingDocument.OriginalReferenceId = null; if (fxRate.FxCurrency.ToUpperInvariant() == baseCurrency) { accountingDocument.Roe = 1; accountingDocument.RoeType = "M"; } else { FxRate fxRateUSD = await masterDataService.GetFxRateAsync(fxRate.FxDate, fxRate.FxCurrency); accountingDocument.Roe = fxRateUSD != null ? fxRateUSD.Rate : null; accountingDocument.RoeType = fxRateUSD != null ? fxRateUSD.CurrencyRoeType : null; } accountingDocument.TransactionDocumentTypeId = docTypeId; accountingDocument.AcknowledgementDate = null; switch (docTypeId) { case (int)DocumentType.PI: case (int)DocumentType.SI: case (int)DocumentType.CN: case (int)DocumentType.DN: accountingDocument.CurrencyCode = invoiceInformation.Currency; accountingDocument.AccountingPeriod = CommonRules.CalculateAccountPeriod(accountingSetup, invoiceInformation.InvoiceDate, postOpClosedPrivilege); accountingDocument.DocumentDate = invoiceInformation.InvoiceDate; accountingDocument.ValueDate = invoiceInformation.InvoiceDueDate; accountingDocument.GLDate = blDate; accountingDocument.OriginalValueDate = invoiceInformation.InvoiceDueDate; accountingDocument.AccountingDate = CommonRules.CalculateAccountPeriod(accountingSetup, invoiceInformation.InvoiceDate, postOpClosedPrivilege); break; case (int)DocumentType.CP: case (int)DocumentType.CI: if (counterpartyInformation != null && cashForCounterpartyDto.CashTypeId == (int)CashSelectionType.PaymentDifferentClient && cashForCounterpartyDto.JLTypeId == (int)JLType.CounterPartyTransfer) { accountingDocument.CurrencyCode = counterpartyInformation.CurrencyCode; accountingDocument.AccountingPeriod = CommonRules.CalculateAccountPeriod(accountingSetup, counterpartyInformation.DocumentDate, postOpClosedPrivilege); accountingDocument.DocumentDate = counterpartyInformation.DocumentDate; accountingDocument.ValueDate = counterpartyInformation.ValueDate == null ? counterpartyInformation.DocumentDate : (DateTime)counterpartyInformation.ValueDate; accountingDocument.GLDate = counterpartyInformation.DocumentDate; accountingDocument.OriginalValueDate = counterpartyInformation.ValueDate == null ? counterpartyInformation.DocumentDate : (DateTime)counterpartyInformation.ValueDate; accountingDocument.AccountingDate = CommonRules.CalculateAccountPeriod(accountingSetup, counterpartyInformation.DocumentDate, postOpClosedPrivilege); } else { accountingDocument.CurrencyCode = cashInformation.Currency; accountingDocument.AccountingPeriod = CommonRules.CalculateAccountPeriod(accountingSetup, cashInformation.DocumentDate, postOpClosedPrivilege); accountingDocument.DocumentDate = cashInformation.DocumentDate; accountingDocument.ValueDate = cashInformation.ValueDate; accountingDocument.GLDate = cashInformation.DocumentDate; accountingDocument.OriginalValueDate = cashInformation.ValueDate; accountingDocument.AccountingDate = CommonRules.CalculateAccountPeriod(accountingSetup, cashInformation.DocumentDate, postOpClosedPrivilege); } break; case (int)DocumentType.MTA: case (int)DocumentType.MJL: if (monthEndTADocument != null && (monthEndTADocument.TATypeId == (int)TAType.MonthEndTemporaryAdjustment || monthEndTADocument.TATypeId == (int)TAType.FxDealMonthTemporaryAdjustment)) { accountingDocument.CurrencyCode = monthEndTADocument.CurrencyCode; accountingDocument.ValueDate = monthEndTADocument.ValueDate; accountingDocument.DocumentDate = new DateTime(accountingDocument.ValueDate.Value.Year, accountingDocument.ValueDate.Value.Month, 1).AddDays(-1); accountingDocument.AccountingPeriod = monthEndTADocument.AccountingPeriod.Value; accountingDocument.GLDate = monthEndTADocument.MonthEndTALines.FirstOrDefault().BLDate; accountingDocument.OriginalValueDate = (DateTime)monthEndTADocument.ValueDate; accountingDocument.AccountingDate = accountingDocument.DocumentDate.Year == monthEndTADocument.AccountingPeriod.Value.Year && accountingDocument.DocumentDate.Month == monthEndTADocument.AccountingPeriod.Value.Month ? accountingDocument.DocumentDate : new DateTime(monthEndTADocument.AccountingPeriod.Value.Year, monthEndTADocument.AccountingPeriod.Value.Month, 1); } else { accountingDocument.CurrencyCode = manualJournal.CurrencyCode; accountingDocument.AccountingPeriod = manualJournal.AccountingPeriod; accountingDocument.DocumentDate = manualJournal.DocumentDate; accountingDocument.GLDate = manualJournal.DocumentDate; accountingDocument.OriginalValueDate = manualJournal.ValueDate == null ? manualJournal.DocumentDate : (DateTime)manualJournal.ValueDate; accountingDocument.AccountingDate = manualJournal.DocumentDate; if (docTypeId == (int)DocumentType.MTA) { accountingDocument.ValueDate = manualJournal.ValueDate == null ? new DateTime(manualJournal.DocumentDate.Year, manualJournal.DocumentDate.Month, 1).AddMonths(1) : (DateTime)manualJournal.ValueDate; } if (docTypeId == (int)DocumentType.MJL) { accountingDocument.ValueDate = manualJournal.ValueDate == null ? manualJournal.DocumentDate : manualJournal.ValueDate; } } break; case (int)DocumentType.FJ: accountingDocument.DocumentReference = fxSettlementDocument.DocumentReference; if (fxSettlementDocument.IsNdf) { accountingDocument.ValueDate = fxSettlementDocument.NdfAgreedDate; } else { accountingDocument.ValueDate = fxSettlementDocument.MaturityDate; } accountingDocument.DocumentDate = fxSettlementDocument.MaturityDate; accountingDocument.GLDate = fxSettlementDocument.MaturityDate; accountingDocument.OriginalValueDate = fxSettlementDocument.DocumentDate; if (fxSettlementDocument != null && fxSettlementDocument.FxSettlementDocumentTypeId != FxSettlementDocumentType.FxDeal) { accountingDocument.CurrencyCode = fxSettlementDocument.SettlementCurrencyCode; } else { accountingDocument.CurrencyCode = fxSettlementDocument.CurrencyCode; } break; } return(accountingDocument); }