internal static FxRateInformation GetFxRateInformation(DateTime blDate, string currency, Company company) { var fxRateInvoiceCurrencyCode = new FxRateConversion { FxDate = blDate, FxCurrency = currency }; var fxRateStatutoryCurrencyCode = new FxRateConversion { FxDate = blDate, FxCurrency = company.StatutoryCurrencyCode }; var fxRateFunctionalCurrencyCode = new FxRateConversion { FxDate = blDate, FxCurrency = company.FunctionalCurrencyCode }; FxRateInformation fxRateInformation = new FxRateInformation(fxRateInvoiceCurrencyCode, fxRateStatutoryCurrencyCode, fxRateFunctionalCurrencyCode); return(fxRateInformation); }
public FxRateInformation(FxRateConversion fxRateInvoiceCurrency, FxRateConversion fxRateStatutoryCurrency, FxRateConversion fxRateFunctionalCurrency) { FxRateInvoiceCurrency = fxRateInvoiceCurrency; FxRateStatutoryCurrency = fxRateStatutoryCurrency; FxRateFunctionalCurrency = fxRateFunctionalCurrency; }
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); }