public MessageResult InsertOvertime(SPWeb spWeb, OverTimeModel overTimeModel, bool autoovertime = false) { var overtimeManagementId = 0; bool createNew = overTimeModel.ID == 0; bool breakFunc = false; var overtimeEntity = overTimeModel.ToEntity(); try { if (createNew == false) { var currentItem = _overTimeManagementDAL.GetByID(spWeb, overtimeEntity.ID); string actionType = overTimeModel.ApprovalStatus.ToLower(); if (actionType == "true" || actionType == "false" || overTimeModel.RequiredBODApprove == true) // action = approve or reject { string retMsg = GetRequestStatusMessage(currentItem); if (!string.IsNullOrEmpty(retMsg)) { breakFunc = true; int errorCode = actionType == "false" ? (int)OverTimeErrorCode.CannotReject : (int)OverTimeErrorCode.CannotApprove; return(new MessageResult { Code = errorCode, Message = retMsg, ObjectId = 0 }); } } else // action = edit { if (currentItem.ApprovalStatus.ToLower().Equals("false") || currentItem.ApprovalStatus.ToLower().Equals("true")) { breakFunc = true; string retMsg = GetRequestStatusMessage(currentItem); return(new MessageResult { Code = (int)OverTimeErrorCode.CannotSubmit, Message = retMsg, ObjectId = 0 }); } else if (currentItem.FirstApprovedDate != null && currentItem.FirstApprovedDate != DateTime.MinValue && currentItem.ApprovalStatus == "") { breakFunc = true; string retMsg = WebPageResourceHelper.GetResourceString("RequestStatusInProgress"); return(new MessageResult { Code = (int)OverTimeErrorCode.CannotSubmit, Message = retMsg, ObjectId = 0 }); } } string requestExpiredMsg = MessageResultHelper.GetRequestExpiredMessage(currentItem.RequestDueDate); if (!string.IsNullOrEmpty(requestExpiredMsg)) { breakFunc = true; return(new MessageResult { Code = (int)OverTimeErrorCode.CannotApprove, Message = requestExpiredMsg, ObjectId = 0 }); } overtimeEntity.FirstApprovedDate = currentItem.FirstApprovedDate; if (!string.IsNullOrEmpty(currentItem.ApprovalStatus.Trim())) { breakFunc = true; return(new MessageResult { Code = 0, Message = "Success", ObjectId = overtimeManagementId }); } // Update Approver if (!string.IsNullOrEmpty(overTimeModel.ApprovalStatus)) { if (!overTimeModel.RequiredBODApprove) // 1 STEP { overtimeEntity.FirstApprovedDate = DateTime.Now; } else // 2 STEPs { if (overTimeModel.ApprovalStatus == "true") // BOD Approve { overtimeEntity.DHComments = currentItem.DHComments; } else if (overTimeModel.ApprovalStatus == "false") // DH/BOD Reject { if (currentItem.FirstApprovedBy != null && currentItem.FirstApprovedBy.ID > 0) // BOD Reject { overtimeEntity.DHComments = currentItem.DHComments; } else // DH Reject { overtimeEntity.FirstApprovedDate = DateTime.Now; } } } } else // DH Approve, Waiting BOD { overtimeEntity.FirstApprovedDate = DateTime.Now; } } else { overtimeEntity = _overTimeManagementDAL.SetDueDate(overtimeEntity); } overtimeManagementId = _overTimeManagementDAL.SaveOrUpdate(spWeb, overtimeEntity); } catch (Exception ex) { ULSLogging.Log(new SPDiagnosticsCategory("STADA - Overtime Service - InsertOvertime fn", TraceSeverity.Unexpected, EventSeverity.Error), TraceSeverity.Unexpected, string.Format(CultureInfo.InvariantCulture, "{0}:{1}", ex.Message, ex.StackTrace)); } finally { if (overtimeManagementId > 0 && breakFunc == false) { var overtimeManagementDetailAddNewList = new List <OverTimeManagementDetail>(); foreach (var detail in overTimeModel.OvertimeDetailModelList) { var overTimeManagementDetail = new OverTimeManagementDetail(); overTimeManagementDetail.Employee.LookupId = detail.Employee.LookupId; overTimeManagementDetail.OvertimeFrom = Convert.ToDateTime(detail.OvertimeFrom); overTimeManagementDetail.OvertimeManagementID.LookupId = overtimeManagementId; overTimeManagementDetail.ApprovalStatus.LookupId = detail.OvertimeMgmtApprovalStatus.LookupId; overTimeManagementDetail.Task = detail.Task; overTimeManagementDetail.OvertimeTo = Convert.ToDateTime(detail.OvertimeTo); overTimeManagementDetail.CompanyTransport = detail.CompanyTransport; overTimeManagementDetail.WorkingHours = string.IsNullOrEmpty(detail.WorkingHours) ? 0.0 : double.Parse(detail.WorkingHours); overTimeManagementDetail.ID = detail.ID; overTimeManagementDetail.BatchCommand = EntityBase.BatchCmd.Save; overtimeManagementDetailAddNewList.Add(overTimeManagementDetail); } if (overtimeManagementDetailAddNewList.Count > 0) { if (autoovertime == false) { SPQuery spQuery = new SPQuery() { Query = $"<Where><Eq><FieldRef Name='OvertimeManagementID'/><Value Type='Lookup' LookupId='TRUE'>{overtimeManagementId}</Value></Eq></Where>" }; List <OverTimeManagementDetail> details = _overTimeManagementDetailDAL.GetByQuery(spQuery, new string[] { "ID" }); _overTimeManagementDetailDAL.DeleteBatch(details); } _overTimeManagementDetailDAL.BulkInsert(overtimeManagementDetailAddNewList); } // Create New -> SendEmailToDepartmentHead overtimeEntity = _overTimeManagementDAL.GetByID(spWeb, overtimeManagementId); if (createNew) { _overTimeManagementDAL.SendEmailToApprover(SPContext.Current.Web, overtimeEntity, (int)StringConstant.EmployeePosition.DepartmentHead); _overTimeManagementDAL.SendEmailToDelegatedApprover(SPContext.Current.Web, overtimeEntity); } else { if (!string.IsNullOrEmpty(overTimeModel.ApprovalStatus) && overTimeModel.ApprovalStatus.Equals("true")) // Approve { _overTimeManagementDAL.Approve(overtimeManagementId, overTimeModel.ApproverFullName); } else if (!string.IsNullOrEmpty(overTimeModel.ApprovalStatus) && overTimeModel.ApprovalStatus.Equals("false")) // Reject { _overTimeManagementDAL.Reject(overtimeManagementId, overTimeModel.ApproverFullName); } else if (string.IsNullOrEmpty(overTimeModel.ApprovalStatus) && overTimeModel.RequiredBODApprove) { _overTimeManagementDAL.SendEmailToApprover(SPContext.Current.Web, overtimeEntity, (int)StringConstant.EmployeePosition.BOD); _overTimeManagementDAL.SendEmailToDelegatedApprover(SPContext.Current.Web, overtimeEntity); } } } } return(new MessageResult { Code = 0, Message = "Success", ObjectId = overtimeManagementId }); }