// GET: ProductTicket
        public ActionResult Index(int pageNo = 1, int id = 0)
        {
            var model = new ProductTicket();

            if (id > 0)
            {
                model = db.ProductTickets.Find(id);
                //ViewBag.TicketStatuses = new SelectList(db.TicketStatuses.Where(t => t.Id >=model.TicketStatusId).ToList(), "Id", "Text", model.TicketStatusId);
            }
            else
            {
                model.TicketStatusId = 1;
                //ViewBag.TicketStatuses = new SelectList(db.TicketStatuses.Where(t=>t.Id==1).ToList(), "Id", "Text", model.TicketStatusId);
            }
            BindList(pageNo);
            ViewBag.TicketStatuses = new SelectList(db.TicketStatuses.ToList(), "Id", "Text", model.TicketStatusId);
            ViewBag.Categories     = new SelectList(db.Categories.OrderBy(p => p.Name).ToList(), "Id", "Name", model.CategoryId);
            int deptID = Request.GetUser().DepartmentId;

            //if (Request.GetUser().RoleName !="Administrators")

            //ViewBag.Employees = new SelectList(db.Employees.Where(e => e.DepartmentId == deptID).ToList(), "Id", "Name", model.EmployeeId);
            //else
            ViewBag.Employees         = new SelectList(db.Employees.Select(e => new { Id = e.Id, Name = e.Name + (e.Department != null ? (" - " + e.Department.Name) : "") }).OrderBy(p => p.Name).ToList(), "Id", "Name", model.EmployeeId);
            ViewBag.ProductStatuses   = new SelectList(db.ProductStatuses.ToList(), "Id", "Text");
            ViewBag.StockDiaryReasons = new SelectList(db.StockDiaryReasons.Where(p => p.Type == 2).ToList(), "Id", "Text");
            return(View(model));
        }
        // GET: ProductTicket/Edit/5
        public ActionResult Edit(ProductTicket model, int pageNo = 1)
        {
            var upModel = db.ProductTickets.Find(model.Id);

            upModel.CategoryId  = model.CategoryId;
            upModel.EmployeeId  = model.EmployeeId;
            upModel.Reason      = model.Reason;
            upModel.Description = model.Description;

            db.Entry(upModel).State = EntityState.Modified;
            db.SaveChanges();
            return(RedirectToAction("Index", new { PageNo = pageNo }));
        }
        // GET: ProductTicket/Create
        public ActionResult Create(ProductTicket model, int pageNo = 1)
        {
            model.Code           = AutoNumberHelper.GenerateNumber(ObjectType.ProductTicket, db);
            model.RequestOn      = DateTime.Now;
            model.RequestById    = Request.GetUser().Id;
            model.TicketStatusId = 1;

            if (ModelState.IsValid)
            {
                db.ProductTickets.Add(model);
                db.SaveChanges();
                //try
                //{
                var proname = (from a in db.Categories
                               where a.Id == model.CategoryId
                               select a.Name).FirstOrDefault();
                var emp = (from b in db.Employees
                           where b.Id == model.EmployeeId
                           select b.Name).FirstOrDefault();

                var empre = (from d in db.Users
                             where d.Id == model.RequestById
                             select d.DisplayName).FirstOrDefault();

                var status = (from c in db.TicketStatuses
                              where c.Id == model.TicketStatusId
                              select c.Text).FirstOrDefault();
                //Send Email
                //get file html
                string html = System.IO.File.ReadAllText(Server.MapPath("~/Files/Email Templates/RequestTicket.html"));

                html = html.Replace("@product", proname);
                html = html.Replace("@employee", emp);
                html = html.Replace("@reason", model.Reason);

                html = html.Replace("@empRequest", empre);
                html = html.Replace("@dateRequest", model.RequestOn.ToString());
                html = html.Replace("@description", model.Description);

                string[] email = (from a in db.ReceiveEmails
                                  select a.Email).ToArray();

                var configEmail = (db.ConfigEmails.Where(c => c.Id.Equals(1))).FirstOrDefault();

                MailHelper.Send(configEmail.Host, 25, configEmail.EmailFrom, configEmail.Password, configEmail.Name, email, null, null, configEmail.Subject, html, null, true);
                //MailHelper.sendExchange(configEmail.Host, configEmail.EmailFrom, configEmail.Username, configEmail.Password, configEmail.Name, email, null, null, configEmail.Subject, html, true);
                //}
                //catch { }
            }
            return(RedirectToAction("Index", new { PageNo = pageNo }));
        }
        // GET: ProductTicket/Edit/5
        public ActionResult Export(ProductTicket model, int pageNo = 1)
        {
            var upModel = db.ProductTickets.Find(model.Id);

            upModel.TicketStatusId  = 3;
            upModel.ExportById      = Request.GetUser().Id;
            upModel.ExportOn        = DateTime.Now;
            upModel.CategoryId      = model.CategoryId;
            upModel.EmployeeId      = model.EmployeeId;
            upModel.Reason          = model.Reason;
            upModel.Description     = model.Description;
            db.Entry(upModel).State = EntityState.Modified;
            db.SaveChanges();
            return(RedirectToAction("Index", new { PageNo = pageNo }));
        }