Exemplo n.º 1
0
        public ActionResult DeleteConfirmed(int id)
        {
            ms_disposal_type ms_disposal_type = db.ms_disposal_type.Find(id);

            db.ms_disposal_type.Remove(ms_disposal_type);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Exemplo n.º 2
0
 public ActionResult Edit([Bind(Include = "disposal_type_id,disposal_type_code,disposal_type_name,disposal_by_dept_id")] ms_disposal_type ms_disposal_type)
 {
     if (ModelState.IsValid)
     {
         db.Entry(ms_disposal_type).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     return(View(ms_disposal_type));
 }
Exemplo n.º 3
0
        public ActionResult Create([Bind(Include = "disposal_type_id,disposal_type_code,disposal_type_name,disposal_by_dept_id")] ms_disposal_type ms_disposal_type)
        {
            if (ModelState.IsValid)
            {
                db.ms_disposal_type.Add(ms_disposal_type);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(ms_disposal_type));
        }
Exemplo n.º 4
0
        // GET: disposal_type/Delete/5
        public ActionResult Delete(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            ms_disposal_type ms_disposal_type = db.ms_disposal_type.Find(id);

            if (ms_disposal_type == null)
            {
                return(HttpNotFound());
            }
            return(View(ms_disposal_type));
        }
Exemplo n.º 5
0
        public ActionResult Approval([Bind(Include = "request_id, approval_id, fl_approval, approval_suggestion_id, approval_noted, asset_number,asset_name, location_name, department_name, fl_SuggestionChanges")] disposalViewModel disposal_req)
        {
            if (disposal_req.fl_approval != null)
            {
                if (disposal_req.fl_approval == true)
                {
                    if (disposal_req.approval_suggestion_id == null || disposal_req.approval_suggestion_id == 0)
                    {
                        ModelState.AddModelError("approval_suggestion_id", "Suggestion is Mandatory.");
                    }
                }
            }
            else if (disposal_req.approval_noted == null || disposal_req.approval_noted.Trim() == string.Empty)
            {
                ModelState.AddModelError("fl_approval", "Approval is Mandatory.");
                ModelState.AddModelError("approval_noted", "Reject Reason is Mandatory.");
            }

            //update disposal request and approval data with transaction
            if (ModelState.IsValid)
            {
                using (var transaction = db.Database.BeginTransaction())
                {
                    try
                    {
                        bool iscomplete = false;
                        #region "Save update Request Disposal"
                        tr_disposal_request disposal_request = db.tr_disposal_request.Find(disposal_req.request_id);
                        var doneapp = (from app in db.tr_disposal_approval
                                       where (app.approval_date == null && app.fl_active == true &&
                                              app.deleted_date == null && app.request_id == disposal_req.request_id)
                                       select app).ToList();

                        if (disposal_req.fl_SuggestionChanges == false)
                        {
                            disposal_request.fl_approval = disposal_req.fl_approval;
                            if (disposal_req.fl_approval == true)
                            {
                                if (doneapp.Count == 1)
                                {
                                    disposal_request.request_status_id = 5;//complete
                                    iscomplete = true;
                                }
                                else
                                {
                                    disposal_request.request_status_id = 2;//approve
                                }
                            }
                            else
                            {
                                disposal_request.request_status_id = 3; //reject
                            }

                            disposal_request.approval_date = DateTime.Now;
                            disposal_request.updated_date  = DateTime.Now;
                            disposal_request.update_by     = UserProfile.UserId;
                            disposal_request.deleted_date  = null;
                            disposal_request.deleted_by    = null;

                            db.Entry(disposal_request).State = EntityState.Modified;
                            db.SaveChanges();
                        }
                        #endregion

                        #region "Save update Approval Disposal"
                        tr_disposal_approval disposal_approval = db.tr_disposal_approval.Find(disposal_req.approval_id);

                        if (disposal_req.fl_approval == true)
                        {
                            disposal_approval.approval_status_id     = 2;//approve
                            disposal_approval.approval_suggestion_id = disposal_req.approval_suggestion_id;
                        }
                        else
                        {
                            disposal_approval.approval_status_id = 3; //reject
                            disposal_approval.approval_noted     = disposal_req.approval_noted;
                            disposal_approval.fl_active          = false;

                            //kembalikan status announcement ke suggestion terakhir
                            tr_disposal_announcement disposal_ann_old = (from tda in db.tr_disposal_announcement
                                                                         where tda.request_id == disposal_approval.request_id && tda.fl_suggestion_changes == true
                                                                         select tda).FirstOrDefault();
                            disposal_ann_old.fl_suggestion_changes = false;
                            disposal_ann_old.fl_active             = true;
                            disposal_ann_old.updated_date          = DateTime.Now;
                            disposal_ann_old.updated_by            = UserProfile.UserId;
                            db.Entry(disposal_ann_old).State       = EntityState.Modified;
                            db.SaveChanges();
                        }
                        disposal_approval.approval_date        = DateTime.Now;
                        disposal_approval.approval_location_id = UserProfile.asset_reg_location_id;
                        disposal_approval.updated_date         = DateTime.Now;
                        disposal_approval.updated_by           = UserProfile.UserId;
                        disposal_approval.deleted_date         = null;
                        disposal_approval.deteled_by           = null;

                        db.Entry(disposal_approval).State = EntityState.Modified;
                        db.SaveChanges();
                        #endregion

                        if (disposal_req.fl_approval == true)
                        {
                            //cek untuk disposal changes: site atau ho
                            tr_asset_registration assetreg = db.tr_asset_registration.Find(disposal_request.asset_id);

                            if (doneapp.Count == 1)
                            {
                                iscomplete = true;
                            }

                            if (!iscomplete && ((assetreg.location_id != 1 && disposal_req.fl_SuggestionChanges == true) || (disposal_req.fl_SuggestionChanges == false)))
                            {
                                #region "kirim email ke approval"

                                var next_approval = (from app in db.tr_disposal_approval
                                                     where (app.approval_date == null && app.fl_active == true && app.deleted_date == null) &&
                                                     app.request_id == disposal_req.request_id
                                                     orderby app.approval_id ascending

                                                     join a in db.ms_employee on app.approval_employee_id equals a.employee_id
                                                     where a.fl_active == true && a.deleted_date == null

                                                     join b in db.ms_user on a.employee_id equals b.employee_id
                                                     where b.fl_active == true && b.deleted_date == null

                                                     select new disposalViewModel
                                {
                                    approval_id = app.approval_id,
                                    ms_employee = a,
                                    ms_user = b
                                }).FirstOrDefault <disposalViewModel>();

                                if (next_approval != null)
                                {
                                    sy_email_log sy_email_log = new sy_email_log();
                                    sy_email_log.elog_to       = next_approval.ms_employee.employee_email;
                                    sy_email_log.elog_subject  = string.Format("Asset Disposal Need Approval");
                                    sy_email_log.elog_template = "EMAIL_TEMPLATE_04";

                                    #region "body mail"
                                    var    _bodymail   = app_setting.APPLICATION_SETTING.Where(c => c.app_key.Contains("EMAIL_TEMPLATE_04"));
                                    string strBodyMail = _bodymail.FirstOrDefault().app_value;
                                    strBodyMail = strBodyMail.Replace("[to]", next_approval.ms_employee.employee_name);
                                    strBodyMail = strBodyMail.Replace("[action]", "Dispose");
                                    strBodyMail = strBodyMail.Replace("[assetnumber]", disposal_req.asset_number);
                                    strBodyMail = strBodyMail.Replace("[aseetname]", disposal_req.asset_name);
                                    strBodyMail = strBodyMail.Replace("[assetlocation]", disposal_req.location_name);
                                    strBodyMail = strBodyMail.Replace("[department]", disposal_req.department_name);

                                    //token untuk link approval di email
                                    string token = string.Format("DisposalApproval|Approval/{0}|{1}|{2}|{3}", next_approval.approval_id, next_approval.ms_user.user_name, UserProfile.company_id, UserProfile.asset_reg_location_id);
                                    token = CryptorHelper.Encrypt(token, "MD5", true).Replace("+", "plus").Replace("=", "equal");
                                    string linkapp = string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority, Url.Content("~/Account/Login?ReturnUrl=%2f&token=" + token));
                                    string strImg  = string.Format("http://{0}/Content/EmailImage/button_approval_disposal.png", Request.Url.Authority);

                                    linkapp = string.Format(@"<a href={0}><img src=""{1}"" alt=""click for approval""/></a>", linkapp, strImg);

                                    strBodyMail = strBodyMail.Replace("[link]", linkapp);

                                    sy_email_log.elog_body = strBodyMail;
                                    #endregion

                                    var EmailHelper = new EmailHelper()
                                    {
                                        ToAddress      = sy_email_log.elog_to,
                                        Email_Template = sy_email_log.elog_template,
                                        MailSubject    = sy_email_log.elog_subject,
                                        MailBody       = sy_email_log.elog_body
                                    };
                                    EmailHelper.Send();
                                }
                                #endregion

                                #region "Save Sy_Message_notification ke approval"

                                sy_message_notification msg = new sy_message_notification();
                                msg.notif_group    = "BALOON_RECEIPT_04";
                                msg.notify_user    = next_approval.ms_user.user_name;
                                msg.notify_ip      = next_approval.ms_employee.ip_address;
                                msg.notify_message = "Ada permintaan approval untuk Asset disposal.";
                                msg.fl_active      = true;
                                msg.created_date   = DateTime.Now;
                                msg.created_by     = UserProfile.UserId;
                                msg.fl_shown       = 0;

                                db.sy_message_notification.Add(msg);
                                db.SaveChanges();
                                #endregion
                            }
                            else
                            {
                                #region "Save Update Process Disposal"
                                ms_disposal_type suggestion = db.ms_disposal_type.Find(disposal_req.approval_suggestion_id);

                                tr_disposal_announcement disposalproses = new tr_disposal_announcement();
                                disposalproses.request_id = disposal_req.request_id;
                                disposalproses.approval_disposal_type_id = disposal_req.approval_suggestion_id;
                                if (disposal_req.approval_suggestion_id != 3)
                                {
                                    disposalproses.fl_announcement_status = true;
                                }
                                else
                                {
                                    disposalproses.fl_remove_asset      = true;
                                    disposalproses.remove_asset_dept_id = 5;
                                }
                                disposalproses.fl_active    = true;
                                disposalproses.created_date = DateTime.Now;
                                disposalproses.created_by   = UserProfile.UserId;
                                disposalproses.updated_date = DateTime.Now;
                                disposalproses.updated_by   = UserProfile.UserId;
                                disposalproses.deleted_date = null;
                                disposalproses.deleted_by   = null;
                                disposalproses.org_id       = UserProfile.OrgId;
                                disposalproses = db.tr_disposal_announcement.Add(disposalproses);
                                db.SaveChanges();
                                #endregion

                                #region "kirim email ke PIC Process Disposal"
                                string emailsetting = string.Empty;
                                string to_name      = string.Empty;


                                switch (disposal_req.approval_suggestion_id)
                                {
                                //resale => procurement
                                case 1:
                                    emailsetting = "EMAIL_TO_DISPOSAL_PROCUREMENT";
                                    to_name      = "Department Procurement";
                                    break;

                                //donation => CSR
                                case 2:
                                    emailsetting = "EMAIL_TO_DISPOSAL_CSR";
                                    to_name      = "Department CSR";
                                    break;

                                //destroy => Acounting
                                case 3:
                                    emailsetting = "EMAIL_TO_DISPOSAL_ACCOUNTING";
                                    to_name      = "Department Accounting";
                                    break;
                                }
                                var _emailto = app_setting.APPLICATION_SETTING.Where(c => c.app_key.Contains(emailsetting));

                                sy_email_log sy_email_log = new sy_email_log();
                                sy_email_log.elog_to       = _emailto.FirstOrDefault().app_value;
                                sy_email_log.elog_subject  = string.Format("Asset Disposal Need Follow Up ({0})", suggestion.disposal_type_name);
                                sy_email_log.elog_template = "EMAIL_TEMPLATE_05";

                                #region "body mail"
                                var    _bodymail   = app_setting.APPLICATION_SETTING.Where(c => c.app_key.Contains("EMAIL_TEMPLATE_05"));
                                string strBodyMail = _bodymail.FirstOrDefault().app_value;
                                strBodyMail = strBodyMail.Replace("[to]", to_name);
                                strBodyMail = strBodyMail.Replace("[assetnumber]", disposal_req.asset_number);
                                strBodyMail = strBodyMail.Replace("[aseetname]", disposal_req.asset_name);
                                strBodyMail = strBodyMail.Replace("[assetlocation]", disposal_req.location_name);
                                strBodyMail = strBodyMail.Replace("[department]", disposal_req.department_name);
                                strBodyMail = strBodyMail.Replace("[suggestion]", suggestion.disposal_type_name);
                                strBodyMail = strBodyMail.Replace("[freetext]", "");

                                string linkapp = string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority, Url.Content("~/Account/Login?ReturnUrl=%2f"));
                                string strImg  = string.Format("http://{0}/Content/EmailImage/button_asmin.png", Request.Url.Authority);
                                linkapp     = string.Format(@"<a href={0}><img src=""{1}"" alt=""click for process""/></a>", linkapp, strImg);
                                strBodyMail = strBodyMail.Replace("[link]", linkapp);

                                sy_email_log.elog_body = strBodyMail;
                                #endregion

                                var EmailHelper = new EmailHelper()
                                {
                                    ToAddress      = sy_email_log.elog_to,
                                    Email_Template = sy_email_log.elog_template,
                                    MailSubject    = sy_email_log.elog_subject,
                                    MailBody       = sy_email_log.elog_body
                                };
                                EmailHelper.Send();
                                #endregion
                            }
                        }
                        transaction.Commit();
                        ViewBag.ResultMessage = "Update table successfully.";
                        return(RedirectToAction("Index"));
                    }
                    catch (Exception)
                    {
                        // roll back all database operations, if any thing goes wrong
                        transaction.Rollback();
                        ViewBag.ResultMessage = "Error occured, records rolledback.";
                    }
                }
            }
            disposal_req = DataDisposalView(disposal_req.request_id, disposal_req);
            return(View(disposal_req));
        }
        public ActionResult Create([Bind(Include = "asset_parent_id,asset_number,company_id,asset_reg_location_id,asset_reg_pic_id,category_id,asset_po_number,asset_do_number,asset_name,asset_merk,asset_serial_number,vendor_id,asset_receipt_date,location_id,department_id,employee_id,asset_description,asset_file_attach")] subasset_registrationViewModel asset_reg)
        {
            if (ModelState.IsValid)
            {
                using (DbContextTransaction dbTran = db.Database.BeginTransaction())
                {
                    try
                    {
                        #region SUBASSET
                        tr_asset_registration asset_parent = db.tr_asset_registration.Find(asset_reg.asset_parent_id);

                        int _last_no = db.tr_asset_registration.Where(a => a.asset_parent_id == asset_reg.asset_parent_id).Count();

                        /*no aktifa seq*/
                        _last_no++;
                        string no_activa = _last_no.ToString().PadLeft(2, '0');

                        string[] complex_no = asset_parent.asset_number.Split(new char[3] {
                            '.', '-', '/'
                        });

                        asset_reg.asset_number = complex_no[0] + "-" + no_activa;

                        tr_asset_registration ass_reg = new tr_asset_registration();
                        ass_reg.asset_type_id          = (int)Enum_asset_type_Key.AssetChild; //child
                        ass_reg.asset_parent_id        = asset_reg.asset_parent_id;
                        ass_reg.tr_asset_registration2 = asset_parent;

                        ass_reg.asset_number          = asset_reg.asset_number;
                        ass_reg.company_id            = asset_reg.company_id;
                        ass_reg.asset_reg_location_id = asset_reg.asset_reg_location_id;
                        ass_reg.asset_reg_pic_id      = asset_reg.asset_reg_pic_id;
                        ass_reg.category_id           = asset_reg.category_id;
                        ass_reg.asset_po_number       = asset_reg.asset_po_number;
                        ass_reg.asset_do_number       = asset_reg.asset_do_number;
                        ass_reg.asset_name            = asset_reg.asset_name;
                        ass_reg.asset_merk            = asset_reg.asset_merk;
                        ass_reg.asset_serial_number   = asset_reg.asset_serial_number;
                        ass_reg.vendor_id             = asset_reg.vendor_id;
                        ass_reg.asset_receipt_date    = asset_reg.asset_receipt_date;
                        ass_reg.location_id           = asset_reg.location_id;
                        ass_reg.current_location_id   = asset_reg.location_id;
                        ass_reg.department_id         = asset_reg.department_id;
                        ass_reg.current_department_id = asset_reg.department_id;
                        ass_reg.asset_description     = asset_reg.asset_description;
                        ass_reg.employee_id           = asset_reg.employee_id;
                        ass_reg.current_employee_id   = asset_reg.employee_id;

                        ass_reg.fl_active    = true;
                        ass_reg.created_date = DateTime.Now;
                        ass_reg.created_by   = UserProfile.UserId;
                        ass_reg.updated_date = DateTime.Now;
                        ass_reg.updated_by   = UserProfile.UserId;
                        ass_reg.deleted_date = null;
                        ass_reg.deleted_by   = null;
                        ass_reg.org_id       = UserProfile.OrgId;

                        ass_reg = db.tr_asset_registration.Add(ass_reg);
                        db.SaveChanges();
                        #endregion

                        #region FILEASSET
                        //ass_reg.asset_file_attach = asset_reg.asset_file_attach;
                        if (Request.Files.Count > 0)
                        {
                            //var file = Request.Files[0];
                            app_root_path = Server.MapPath("~/");
                            if (string.IsNullOrWhiteSpace(base_image_path))
                            {
                                base_image_path = subasset_registrationViewModel.path_file_asset;
                            }

                            string img_path = Server.MapPath(base_image_path);
                            if (!Directory.Exists(img_path))
                            {
                                Directory.CreateDirectory(img_path);
                            }

                            var file = Request.Files["asset_img_file"];
                            if (file != null && file.ContentLength > 0)
                            {
                                var fileName = "asset" + ass_reg.asset_id.ToString() + "_" + Path.GetFileName(file.FileName);
                                var path     = Path.Combine(img_path, fileName);
                                file.SaveAs(path);
                                tr_asset_image _ass_img = new tr_asset_image()
                                {
                                    asset_id          = ass_reg.asset_id,
                                    asset_img_address = fileName,
                                    asset_qrcode      = GenerateQRCode(asset_reg.asset_number)
                                };
                                db.tr_asset_image.Add(_ass_img);
                                db.SaveChanges();
                            }
                        }
                        #endregion

                        dbTran.Commit();
                    }
                    catch (Exception _exc)
                    {
                        dbTran.Rollback();
                        throw new Exception("Fail to save create new sub-asset." + _exc.Message);
                    }
                }
                #region "Send Email Notif to accounting department"
                try
                {
                    ms_disposal_type Dept3 = db.ms_disposal_type.Find(3);
                    int acct_id            = Convert.ToInt32(Dept3.disposal_by_dept_id);
                    var _qry = (from dept in db.ms_department.Where(dept => dept.department_id == acct_id) select dept).ToList().FirstOrDefault();
                    if (_qry == null)
                    {
                        throw new Exception("Department not found");
                    }

                    sy_email_log sy_email_log = new sy_email_log();
                    sy_email_log.elog_to       = _qry.department_email;
                    sy_email_log.elog_subject  = string.Format("Sub Asset Registration");
                    sy_email_log.elog_template = "EMAIL_TEMPLATE_90";

                    var _bodymail = app_setting.APPLICATION_SETTING.Where(c => c.app_key.Contains("EMAIL_TEMPLATE_90")).FirstOrDefault();
                    if (_bodymail == null)
                    {
                        throw new Exception("Email Template 01 not found");
                    }

                    string strBodyMail = _bodymail.app_value;
                    strBodyMail = strBodyMail.Replace("[to]", _qry.department_name + " Department");
                    strBodyMail = strBodyMail.Replace("[action]", "Dispose");
                    strBodyMail = strBodyMail.Replace("[assetnumber]", asset_reg.asset_number);
                    strBodyMail = strBodyMail.Replace("[assetname]", asset_reg.asset_name);

                    ms_asset_location loc = db.ms_asset_location.Find(asset_reg.location_id);
                    if (loc == null)
                    {
                        throw new Exception("Sub Asset Location not found");
                    }
                    strBodyMail = strBodyMail.Replace("[assetlocation]", loc.location_name);

                    ms_department deptment = db.ms_department.Find(asset_reg.department_id);
                    if (deptment == null)
                    {
                        throw new Exception("Department not found");
                    }
                    strBodyMail = strBodyMail.Replace("[department]", deptment.department_name);

                    sy_email_log.elog_body = strBodyMail;
                    var EmailHelper = new EmailHelper()
                    {
                        ToAddress      = sy_email_log.elog_to,
                        Email_Template = sy_email_log.elog_template,
                        MailSubject    = sy_email_log.elog_subject,
                        MailBody       = sy_email_log.elog_body
                    };
                    EmailHelper.Send();
                }
                catch { }
                #endregion
                return(RedirectToAction("Index"));
            }

            #region complete the VM
            if (asset_reg.asset_parent_list == null)
            {
                asset_reg.asset_parent_list = db.tr_asset_registration.Where(r => r.fl_active == true && r.deleted_date == null).ToList();
            }

            if (asset_reg.company_list == null)
            {
                asset_reg.company_list = db.ms_asmin_company.Where(r => r.fl_active == true && r.deleted_date == null).ToList();
            }

            if (asset_reg.asset_reg_location_list == null)
            {
                asset_reg.asset_reg_location_list = db.ms_asset_register_location.Where(r => r.fl_active == true && r.deleted_date == null).ToList();
            }

            if (asset_reg.asset_reg_pic_list == null)
            {
                asset_reg.asset_reg_pic_list = db.ms_asset_register_pic.Where(r => r.fl_active == true && r.deleted_date == null).ToList();
            }

            if (asset_reg.asset_category_list == null)
            {
                asset_reg.asset_category_list = db.ms_asset_category.Where(r => r.fl_active == true && r.deleted_date == null).ToList();
            }

            if (asset_reg.vendor_list == null)
            {
                asset_reg.vendor_list = db.ms_vendor.Where(r => r.fl_active == true && r.deleted_date == null).ToList();
            }

            if (asset_reg.asset_location_list == null)
            {
                asset_reg.asset_location_list = db.ms_asset_location.Where(r => r.fl_active == true && r.deleted_date == null).ToList();
            }

            if (asset_reg.department_list == null)
            {
                asset_reg.department_list = db.ms_department.Where(r => r.fl_active == true && r.deleted_date == null).ToList();
            }

            if (asset_reg.employee_list == null)
            {
                asset_reg.employee_list = db.ms_employee.AsEnumerable().Where(r => r.fl_active == true && r.deleted_date == null).Select(e => new ms_employee {
                    employee_id = e.employee_id, employee_name = "[" + e.employee_nik + "] - " + e.employee_name, employee_email = e.employee_email
                }).ToList();
            }

            #endregion

            return(View(asset_reg));
        }
Exemplo n.º 7
0
        public ActionResult DisposalFollowup([Bind(Include = "announcement_id, request_id, remove_asset_description, asset_id, asset_number, asset_name, location_name, department_name")] disposalViewModel disposal_prs)
        {
            //update disposal request and approval data with transaction
            if (ModelState.IsValid)
            {
                using (var transaction = db.Database.BeginTransaction())
                {
                    try
                    {
                        #region "Save update Disposal Announcement"
                        tr_disposal_announcement disposal_announcement = db.tr_disposal_announcement.Find(disposal_prs.announcement_id);

                        disposal_announcement.remove_asset_description = disposal_prs.remove_asset_description;
                        disposal_announcement.remove_asset_date        = DateTime.Now;
                        disposal_announcement.remove_asset_emp_id      = UserProfile.employee_id;

                        disposal_announcement.updated_date = DateTime.Now;
                        disposal_announcement.updated_by   = UserProfile.UserId;
                        disposal_announcement.deleted_date = null;
                        disposal_announcement.deleted_by   = null;

                        db.Entry(disposal_announcement).State = EntityState.Modified;
                        db.SaveChanges();
                        #endregion

                        tr_asset_registration asset_registration = db.tr_asset_registration.Find(disposal_prs.asset_id);
                        asset_registration.fl_active       = false;
                        db.Entry(asset_registration).State = EntityState.Modified;
                        db.SaveChanges();

                        #region "kirim email ke All PIC"
                        string emailsetting   = string.Empty;
                        string emailsettingcc = string.Empty;

                        var _emailapproval = (from app in db.tr_disposal_approval
                                              where app.request_id == disposal_prs.request_id && app.fl_active == true && app.deleted_date == null

                                              join a in db.ms_employee on app.approval_employee_id equals a.employee_id
                                              where a.fl_active == true && a.deleted_date == null

                                              select a).ToList <ms_employee>();

                        foreach (ms_employee employee_app in _emailapproval)
                        {
                            emailsettingcc += employee_app.employee_email + ";";
                        }

                        var _emailowner_asset = (from app in db.tr_asset_registration
                                                 where app.asset_id == disposal_prs.asset_id /*&& app.fl_active == true && app.deleted_date == null*/

                                                 join a in db.ms_employee on app.employee_id equals a.employee_id
                                                 where a.fl_active == true && a.deleted_date == null

                                                 select a).ToList <ms_employee>();
                        foreach (ms_employee employee_app in _emailowner_asset)
                        {
                            emailsetting += employee_app.employee_email + ";";
                        }

                        var _emailpic_asset = (from app in db.tr_disposal_request
                                               where app.request_id == disposal_prs.request_id && app.fl_active == true && app.deleted_date == null

                                               join a in db.ms_employee on app.request_emp_id equals a.employee_id
                                               where a.fl_active == true && a.deleted_date == null

                                               select a).ToList <ms_employee>();
                        foreach (ms_employee employee_app in _emailpic_asset)
                        {
                            emailsetting += employee_app.employee_email + ";";
                        }

                        var _email_announcement = (from app in db.tr_disposal_announcement
                                                   where app.announcement_id == disposal_prs.announcement_id && app.fl_active == true && app.deleted_date == null

                                                   join a in db.ms_employee on app.announcement_emp_id equals a.employee_id
                                                   where a.fl_active == true && a.deleted_date == null

                                                   select a).ToList <ms_employee>();
                        foreach (ms_employee employee_app in _email_announcement)
                        {
                            emailsetting += employee_app.employee_email + ";";
                        }

                        var _email_fin_announcement = (from app in db.tr_disposal_announcement
                                                       where app.announcement_id == disposal_prs.announcement_id && app.fl_active == true && app.deleted_date == null

                                                       join a in db.ms_employee on app.fin_announcement_emp_id equals a.employee_id
                                                       where a.fl_active == true && a.deleted_date == null

                                                       select a).ToList <ms_employee>();
                        foreach (ms_employee employee_app in _email_fin_announcement)
                        {
                            emailsetting += employee_app.employee_email + ";";
                        }

                        sy_email_log sy_email_log = new sy_email_log();
                        sy_email_log.elog_to       = emailsetting;
                        sy_email_log.elog_cc       = emailsettingcc;
                        sy_email_log.elog_subject  = string.Format("Disposal Asset");
                        sy_email_log.elog_template = "EMAIL_TEMPLATE_06";

                        #region "body mail"
                        var    _bodymail   = app_setting.APPLICATION_SETTING.Where(c => c.app_key.Contains("EMAIL_TEMPLATE_06"));
                        string strBodyMail = _bodymail.FirstOrDefault().app_value;
                        strBodyMail = strBodyMail.Replace("[to]", "");
                        strBodyMail = strBodyMail.Replace("[assetnumber]", disposal_prs.asset_number);
                        strBodyMail = strBodyMail.Replace("[aseetname]", disposal_prs.asset_name);
                        strBodyMail = strBodyMail.Replace("[assetlocation]", disposal_prs.location_name);
                        strBodyMail = strBodyMail.Replace("[department]", disposal_prs.department_name);

                        string linkapp = string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority, Url.Content("~/Account/Login?ReturnUrl=%2f"));
                        string strImg  = string.Format("http://{0}/Content/EmailImage/button_asmin.png", Request.Url.Authority);
                        linkapp     = string.Format(@"<a href={0}><img src=""{1}"" alt=""click for process""/></a>", linkapp, strImg);
                        strBodyMail = strBodyMail.Replace("[link]", linkapp);

                        ms_disposal_type suggestion = db.ms_disposal_type.Find(disposal_announcement.approval_disposal_type_id);
                        strBodyMail            = strBodyMail.Replace("[suggestion]", suggestion.disposal_type_name);
                        sy_email_log.elog_body = strBodyMail;
                        #endregion

                        var EmailHelper = new EmailHelper()
                        {
                            ToAddress      = sy_email_log.elog_to,
                            CcAddress      = sy_email_log.elog_cc,
                            Email_Template = sy_email_log.elog_template,
                            MailSubject    = sy_email_log.elog_subject,
                            MailBody       = sy_email_log.elog_body
                        };
                        EmailHelper.Send();
                        #endregion

                        transaction.Commit();
                        ViewBag.ResultMessage = "Update table successfully.";
                        return(RedirectToAction("Index"));
                    }
                    catch (Exception)
                    {
                        // roll back all database operations, if any thing goes wrong
                        transaction.Rollback();
                        ViewBag.ResultMessage = "Error occured, records rolledback.";
                    }
                }
            }
            return(View(disposal_prs));
        }