public ActionResult DeleteConfirmed(int id)
        {
            JobItinerary jobItinerary = db.JobItineraries.Find(id);

            db.JobItineraries.Remove(jobItinerary);
            db.SaveChanges();
            return(RedirectToAction("JobItinerary", new { id = jobItinerary.JobMainId }));
        }
        public ActionResult Create([Bind(Include = "Id,JobMainId,DestinationId,ActualRate,Remarks,ItiDate,SvcId")] JobItinerary jobItinerary)
        {
            if (ModelState.IsValid)
            {
                db.JobItineraries.Add(jobItinerary);
                db.SaveChanges();
                return(RedirectToAction("JobItinerary", new { id = jobItinerary.JobMainId }));
            }

            ViewBag.JobMainId     = new SelectList(db.JobMains, "Id", "Description", jobItinerary.JobMainId);
            ViewBag.DestinationId = new SelectList(db.Destinations, "Id", "Description", jobItinerary.DestinationId);
            ViewBag.SvcId         = new SelectList(db.JobServices.Where(d => d.JobMainId == jobItinerary.JobMainId), "Id", "Particulars", jobItinerary.SvcId);
            return(View(jobItinerary));
        }
        // GET: JobItineraries/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            JobItinerary jobItinerary = db.JobItineraries.Find(id);

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

            if (jobItinerary == null)
            {
                return(HttpNotFound());
            }
            ViewBag.JobMainId     = new SelectList(db.JobMains, "Id", "Description", jobItinerary.JobMainId);
            ViewBag.DestinationId = new SelectList(db.Destinations, "Id", "Description", jobItinerary.DestinationId);
            ViewBag.SvcId         = new SelectList(db.JobServices.Where(d => d.JobMainId == jobItinerary.JobMainId), "Id", "Particulars", jobItinerary.SvcId);

            return(View(jobItinerary));
        }
        public ActionResult AddTemplate(int JobId)
        {
            int iTemplate = (int)TempData["SELECTEDTEMPLATE"];
            int TempId    = (int)TempData["TEMPLATEID"];

            var template = db.Products.Find(TempId);
            var price    = db.ProductPrices.Where(d => d.ProductId == template.Id).OrderBy(s => new { s.Uom, s.Qty });

            // copy job services
            var     jobTemplate  = db.JobMains.Find(iTemplate);
            var     jobRef       = db.JobMains.Find(JobId);
            var     srcJobSvcs   = db.JobServices.Where(d => d.JobMainId == iTemplate);
            var     srcJobIti    = db.JobItineraries.Where(d => d.JobMainId == iTemplate);
            decimal dQuoteAmt    = 0;
            decimal dSupplierAmt = 0;

            DateTime dtJobTemplate  = (DateTime)jobTemplate.JobDate;
            DateTime dtJobDateStart = (DateTime)jobTemplate.JobDate;
            int      irow           = 0;

            #region add new service
            foreach (var src in srcJobSvcs)
            {
                irow++;

                Models.JobServices newJobSrv = new JobServices()
                {
                    JobMainId      = jobRef.Id,
                    ServicesId     = src.ServicesId,
                    DtStart        = jobRef.JobDate,
                    DtEnd          = jobRef.JobDate,
                    Particulars    = src.Particulars,
                    Remarks        = src.Remarks,
                    QuotedAmt      = dQuoteAmt,
                    SupplierAmt    = dSupplierAmt,
                    ActualAmt      = 0,
                    SupplierId     = src.SupplierId,
                    SupplierItemId = src.SupplierItemId
                };

                if (src.DtStart != null)
                {
                    DateTime dtSrc = (DateTime)src.DtStart;
                    TimeSpan tsSrc = dtSrc - dtJobTemplate;
                    if (jobRef.JobDate != null)
                    {
                        newJobSrv.DtStart = jobRef.JobDate.Add(tsSrc);
                        dtJobDateStart    = jobRef.JobDate.Add(tsSrc);
                    }
                }
                if (src.DtEnd != null)
                {
                    DateTime dtSrc = (DateTime)src.DtEnd;
                    TimeSpan tsSrc = dtSrc - dtJobTemplate;
                    if (jobRef.JobDate != null)
                    {
                        newJobSrv.DtEnd = jobRef.JobDate.Add(tsSrc);
                    }
                }

                if (jobRef.NoOfPax > 0 && irow == 1)
                {
                    decimal pPrice = 0;
                    foreach (var p in price)
                    {
                        if (p.Uom == "PAX")
                        {
                            if (p.Qty <= jobRef.NoOfPax)
                            {
                                pPrice = p.Rate * jobRef.NoOfPax;
                            }
                        }
                        if (p.Uom == "UNIT")
                        {
                            pPrice = p.Rate;
                        }
                    }

                    newJobSrv.QuotedAmt = pPrice;
                }


                db.JobServices.Add(newJobSrv);
            }
            #endregion

            #region Copy/Add Itinerary
            foreach (var src in srcJobIti)
            {
                Models.JobItinerary newJobIti = new JobItinerary()
                {
                    JobMainId     = jobRef.Id,
                    DestinationId = src.DestinationId,
                    Remarks       = src.Remarks
                };
                if (src.ItiDate != null)
                {
                    DateTime dtSrc = (DateTime)src.ItiDate;
                    TimeSpan tsSrc = dtSrc - dtJobTemplate;
                    if (jobRef.JobDate != null)
                    {
                        newJobIti.ItiDate = jobRef.JobDate.Add(tsSrc);
                    }
                }
                else
                {
                    newJobIti.ItiDate = dtJobDateStart;
                }


                db.JobItineraries.Add(newJobIti);
            }
            #endregion

            db.SaveChanges();

            #region set svc id to iti
            Models.JobServices jtmp = db.JobServices.Where(d => d.JobMainId == JobId).OrderByDescending(o => o.Id).FirstOrDefault();
            int iAddedSvc           = jtmp.Id;

            IList <Models.JobItinerary> jIti = db.JobItineraries.Where(d => d.JobMainId == JobId && d.SvcId == null).ToList();
            foreach (var tmp in jIti)
            {
                tmp.SvcId           = iAddedSvc;
                db.Entry(tmp).State = EntityState.Modified;
            }
            db.SaveChanges();

            #endregion


            return(RedirectToAction("Services", new { id = JobId }));
        }