public ActionResult Create([Bind(Include = "ID,InstrumentID,StockTypeID,WebAddress,CountryCode,EndFiscalYear,Q1Due,Q2Due,Q3Due,Q4Due,AuditedDue,AnnualDue,Status,CreatedOn,CreatedBy,ModifiedOn,ModifiedBy,InstrumentCode")] FinancialDueDate financialDueDate)
        {
            GetViewDropDownData();
            int tempyr = Convert.ToDateTime(financialDueDate.EndFiscalYear).Year;
            var FinDD  = db.FinancialDueDates.Where(f => f.InstrumentCode == financialDueDate.InstrumentCode && f.Year == tempyr).SingleOrDefault();

            if (FinDD != null)
            {
                ModelState.AddModelError("Symbols", "Financial due dates already exist for the selected Symbol.");
            }
            if (ModelState.IsValid)
            {
                try
                {
                    db.FinancialDueDates.Add(financialDueDate);
                    db.SaveChanges();
                    TempData["Message"] = "Financial Due Date Added Successfully.";
                    return(RedirectToAction("Index", new { Symbols = financialDueDate.InstrumentCode }));
                }
                catch (Exception exp)
                {
                    log.Error(exp);
                    ViewData["Message"] = "Error Adding Financial Due Date.";
                    ModelState.AddModelError("Error", "An error has occured please contact Administrator");
                    return(View(financialDueDate));
                }
            }

            ViewBag.InstrumentCode = new SelectList(db.Instruments, "InstrumentCode", "ISIN", financialDueDate.InstrumentCode);
            return(View(financialDueDate));
        }
        private void ModelValidation(FinancialDueDate financialduedate)
        {
            if (financialduedate.EndFiscalYear >= financialduedate.Q1Due)
            {
                ModelState.AddModelError("AuditedDated", "The financial year end date must be before first quarter due date");
            }

            if (financialduedate.Q1Due > DateTime.Today)
            {
                ModelState.AddModelError("First Quarter", "The first quarter date can not be a future date");
            }

            if (financialduedate.Q1Due >= financialduedate.Q2Due)
            {
                ModelState.AddModelError("First Quarter", "The first quarter due date must be before second quarter due date");
            }
            if (financialduedate.Q2Due >= financialduedate.Q3Due)
            {
                ModelState.AddModelError("Second Quarter", "The second quarter due date must be before third quarter due date");
            }
            if (financialduedate.Q3Due >= financialduedate.Q4Due)
            {
                ModelState.AddModelError("Third Quarter", "The third quarter due date must be before fourth quarter due date");
            }
            if (financialduedate.AuditedDue < financialduedate.Q3Due)
            {
                ModelState.AddModelError("Audited Dated", "The audited financials due date must be after third quarter due date");
            }

            if (financialduedate.AnnualDue <= financialduedate.AuditedDue)
            {
                ModelState.AddModelError("Audited Dated", "The annual due must be after the audited due date");
            }
        }
        private void ProcessDate(FinancialDueDate dueDate, string propertyName, CustomContext context)
        {
            if (string.IsNullOrWhiteSpace(dueDate.Day) || string.IsNullOrWhiteSpace(dueDate.Month) || string.IsNullOrWhiteSpace(dueDate.Year))
            {
                context.AddFailure(propertyName, "Enter the financial due date");
                return;
            }

            if (!int.TryParse(dueDate.Day, out int _) || !int.TryParse(dueDate.Month, out int _) || !int.TryParse(dueDate.Year, out int _))
            {
                context.AddFailure(propertyName, "Enter a correct financial due date");
                return;
            }

            var day   = dueDate.Day;
            var month = dueDate.Month;
            var year  = dueDate.Year;

            var isValidDate = DateTime.TryParse($"{day}/{month}/{year}", out var parsedDate);

            if (!isValidDate)
            {
                context.AddFailure(propertyName, "Enter a correct financial due date");
                return;
            }

            if (parsedDate <= DateTime.Today)
            {
                context.AddFailure(propertyName, "Financial due date must be a future date");
            }
        }
        // GET: FinancialDueDates/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            FinancialDueDate financialDueDate = db.FinancialDueDates.Find(id);

            if (financialDueDate == null)
            {
                return(HttpNotFound());
            }
            return(View(financialDueDate));
        }
        // GET: FinancialDueDates/Delete/5
        public ActionResult Delete(int?id)
        {
            FinancialDueDate financialDueDate = db.FinancialDueDates.Find(id);

            GetViewDropDownData();
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            if (financialDueDate == null)
            {
                return(HttpNotFound());
            }
            return(View(financialDueDate));
        }
        // GET: FinancialDueDates/Edit/5
        public ActionResult Edit(int?id)
        {
            FinancialDueDate financialDueDate = db.FinancialDueDates.Find(id);

            GetViewDropDownData();

            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            if (financialDueDate == null)
            {
                return(HttpNotFound());
            }
            //ViewBag.InstrumentCode = new SelectList(db.Instruments, "InstrumentCode", "ISIN", financialDueDate.InstrumentCode);
            return(View(financialDueDate));
        }
        public ActionResult DeleteConfirmed(int id)
        {
            FinancialDueDate financialDueDate = db.FinancialDueDates.Find(id);

            GetViewDropDownData();

            try
            {
                db.FinancialDueDates.Remove(financialDueDate);
                db.SaveChanges();
                TempData["Message"] = "Financial Due Date was successfully Deleted.";
                return(RedirectToAction("Index"));
            }
            catch (Exception exp)
            {
                log.Error(exp);
                TempData["Message"] = "Error Financial Due Date.";
                ModelState.AddModelError("Error", "An error has occured please contact Administrator");
                return(RedirectToAction("Index"));
            }
        }
        public ActionResult Edit([Bind(Include = "ID,InstrumentID,StockTypeID,WebAddress,CountryCode,EndFiscalYear,Q1Due,Q2Due,Q3Due,Q4Due,AuditedDue,AnnualDue,Status,CreatedOn,CreatedBy,ModifiedOn,ModifiedBy,InstrumentCode")] FinancialDueDate financialDueDate)
        {
            GetViewDropDownData();

            if (ModelState.IsValid)
            {
                try
                {
                    db.Entry(financialDueDate).State = System.Data.Entity.EntityState.Modified;
                    db.SaveChanges();
                    TempData["Message"] = "Financial Due Date was Successfully Edited.";
                    return(RedirectToAction("Index", new { Symbols = financialDueDate.InstrumentCode }));
                }
                catch (Exception exp)
                {
                    log.Error(exp);
                    ViewData["Message"] = "Error Editing Financial Due Date.";
                    ModelState.AddModelError("Error", "An error has occured please contact Administrator");
                    return(View(financialDueDate));
                }
            }
            //  ViewBag.InstrumentCode = new SelectList(db.Instruments, "InstrumentCode", "ISIN", financialDueDate.InstrumentCode);
            return(View(financialDueDate));
        }