private Invoices GetInvoice(out string message) { message = string.Empty; InvoicesRepository invoiceRepo = new InvoicesRepository(); if (!datInvoiceDate.SelectedDate.HasValue) { message = ResourceManager.GetString("messageInvoiceDateNotNull"); return null; } string[] fiscalKey = WebConfig.FiscalDate.Split('/'); Invoices saveItem = null; int firstFutureNumber = int.Parse(WebConfig.FirstNumberFutureInvoice); //if (SessionManager.CurrentInvoice != null) if (!string.IsNullOrEmpty(Request.QueryString["InvoiceIdPK"])) { saveItem = SessionManager.CurrentInvoice; DateTime fiscalDateMin = new DateTime(saveItem.IdYear, int.Parse(fiscalKey[1]), int.Parse(fiscalKey[0])); DateTime fiscalDateMax = new DateTime(saveItem.IdYear + 1, int.Parse(fiscalKey[1]), int.Parse(fiscalKey[0])); if (datInvoiceDate.SelectedDate.Value < fiscalDateMin || datInvoiceDate.SelectedDate.Value >= fiscalDateMax) { message = string.Format(ResourceManager.GetString("messageInvoiceDateNotValidFiscalDate"), fiscalDateMin.ToString("dd/MM/yyyy"), fiscalDateMax.ToString("dd/MM/yyyy")); return null; } //if this is a future invoice. if (!string.IsNullOrEmpty(Request.QueryString["type"]) && Request.QueryString["type"] == "future") { //If change the date less than or equal today, we will change this future invoice to normal invoice. if (datInvoiceDate.SelectedDate.Value <= DateTime.Today) { Invoices lastNormalInvoice = invoiceRepo.GetInvoicesWithMaxNumber( saveItem.IdYear, saveItem.IdTypeInvoice, false, firstFutureNumber); if (lastNormalInvoice != null && lastNormalInvoice.Date.HasValue && lastNormalInvoice.Date.Value > datInvoiceDate.SelectedDate.Value) { message = ResourceManager.GetString("messageInvoiceDateMustHigherthan") + lastNormalInvoice.Date.Value.ToString("dd/MM/yyyy"); } else { saveItem.IdFactNumberNew = new InvoicesRepository().GetMaxInvoiceNumber( saveItem.IdYear, saveItem.IdTypeInvoice, false, firstFutureNumber); if (!saveItem.IdFactNumberNew.HasValue) { if (saveItem.IdTypeInvoice == "I") saveItem.IdFactNumberNew = int.Parse(WebConfig.FirstNumberInvoice); else saveItem.IdFactNumberNew = int.Parse(WebConfig.FirstNumberCreditNote); } else { saveItem.IdFactNumberNew = saveItem.IdFactNumberNew.Value + 1; } } } } else { //If the date is changed. if (datInvoiceDate.SelectedDate.Value != saveItem.Date.Value) { bool isFuture = saveItem.IdFactNumber >= firstFutureNumber; Invoices nextInvoice = invoiceRepo.GetNextInvoices(saveItem.IdFactNumber, saveItem.IdYear, saveItem.IdTypeInvoice, isFuture, firstFutureNumber); if (nextInvoice != null && nextInvoice.Date.HasValue && nextInvoice.Date.Value < datInvoiceDate.SelectedDate.Value) { message = ResourceManager.GetString("messageInvoiceDateMustHigherthan") + nextInvoice.Date.Value.ToString("dd/MM/yyyy"); } Invoices previousInvoice = invoiceRepo.GetPreviousInvoices(saveItem.IdFactNumber, saveItem.IdYear, saveItem.IdTypeInvoice, isFuture, firstFutureNumber); if (previousInvoice != null && previousInvoice.Date.HasValue && previousInvoice.Date.Value > datInvoiceDate.SelectedDate.Value) { message = ResourceManager.GetString("messageInvoiceDateMustLowerthan") + previousInvoice.Date.Value.ToString("dd/MM/yyyy"); } //If this is the lasted normal invocie, then change the date to future, we have to change this invoice to future invoice. if (string.IsNullOrEmpty(message)) { int? maxNumber = invoiceRepo.GetMaxInvoiceNumber( saveItem.IdYear, saveItem.IdTypeInvoice, false, firstFutureNumber); if (maxNumber.HasValue && maxNumber.Value == saveItem.IdFactNumber && datInvoiceDate.SelectedDate.Value > DateTime.Today) { int? maxNumberFuture = invoiceRepo.GetMaxInvoiceNumber( saveItem.IdYear, saveItem.IdTypeInvoice, true, firstFutureNumber); if (maxNumberFuture.HasValue) saveItem.IdFactNumberNew = maxNumberFuture.Value + 1; else saveItem.IdFactNumberNew = firstFutureNumber; } } } } } else { saveItem = new Invoices(); int idYear = 0; string type = "C"; int idFactNumber = 0; if (radInvoice.Checked) { type = "I"; idFactNumber = int.Parse(WebConfig.FirstNumberInvoice); } else idFactNumber = int.Parse(WebConfig.FirstNumberCreditNote); DateTime today = DateTime.Today; DateTime fiscalDate = new DateTime(DateTime.Today.Year, int.Parse(fiscalKey[1]), int.Parse(fiscalKey[0])); //If Current date is lower than FiscalDate in the current civil year: // IdYear=Year(Current Date) – 1 //Elseif Current date is higher than FiscalDate in the current civil year: // IdYear= Year(Current Date) if (today < fiscalDate) idYear = today.Year - 1; else idYear = today.Year; int? maxNbr = 1; if (datInvoiceDate.SelectedDate.HasValue && datInvoiceDate.SelectedDate.Value > today) { maxNbr = new InvoicesRepository().GetMaxInvoiceNumber(idYear, type, true, firstFutureNumber); idFactNumber = firstFutureNumber; } else { maxNbr = new InvoicesRepository().GetMaxInvoiceNumber(idYear, type, false, firstFutureNumber); } if (maxNbr.HasValue) idFactNumber = maxNbr.Value + 1; saveItem.IdFactNumber = idFactNumber; saveItem.IdYear = idYear; saveItem.IdTypeInvoice = type; bool isFuture = saveItem.IdFactNumber >= firstFutureNumber; Invoices lastNormalInvoice = invoiceRepo.GetInvoicesWithMaxNumber( saveItem.IdYear, saveItem.IdTypeInvoice, isFuture, firstFutureNumber); if (lastNormalInvoice != null && lastNormalInvoice.Date.HasValue && lastNormalInvoice.Date.Value > datInvoiceDate.SelectedDate.Value) { message = ResourceManager.GetString("messageInvoiceDateMustHigherthan") + lastNormalInvoice.Date.Value.ToString("dd/MM/yyyy"); } } saveItem.InvoiceIdPK = saveItem.IdFactNumber.ToString() + "-" + saveItem.IdTypeInvoice + "-" + saveItem.IdYear; saveItem.RefCustomerNumber = int.Parse(hiddenCompanyAddressId.Value); saveItem.Date = datInvoiceDate.SelectedDate; saveItem.Currency = WebConfig.Currency; if (!string.IsNullOrEmpty(txtTotalVAT.Text)) { saveItem.AmountVatEuro = Convert.ToDouble(txtTotalVAT.Text, Common.GetDoubleFormatProvider()); } else { saveItem.AmountVatEuro = 0; } if (!string.IsNullOrEmpty(txtTotalHTVA.Text)) { saveItem.TotalHtvaEuro = Convert.ToDouble(txtTotalHTVA.Text, Common.GetDoubleFormatProvider()); } else { saveItem.TotalHtvaEuro = 0; } saveItem.Remark = txtRemark.Text; saveItem.Remark_Internal = txtInternalRemark.Text; saveItem.Payement = chkPayment.Checked; saveItem.Factoring = chkFactoring.Checked; if (!string.IsNullOrEmpty(txtPaymentDate.Text)) saveItem.DateOfPayement = DateTime.ParseExact(txtPaymentDate.Text, "dd/MM/yyyy", System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat); return saveItem; }