Hii, below sharing my function where in i have to add validation that checks for lastmodifiedate if that matches than process runs else throw an error.
DateTime _LastModifiedDateTC = Global.GetTimecardLastModifiedDate(Item.TimeCardID, (int)InvoiceSourceTypes.PerHour ).GetValueOrDefault();
if (Item.LastModifiedDate == _LastModifiedDateTC && IsDateNotMatched == false)
then below code
List<int> StateFarmTimeCardIDs = timeSheetApprovedView.TimeCards.Where(x => x.IsStateFarm)?.Select(x => x.TimeCardID)?.ToList();
List<int> OtherTimeCardIDs = timeSheetApprovedView.TimeCards.Where(x => !x.IsStateFarm)?.Select(x => x.TimeCardID)?.ToList();
List<CIPHApprovedViewModel> lstTimeCards = new List<CIPHApprovedViewModel>();
lstTimeCards = timeSheetApprovedView.TimeCards.ToList();
int? BaseStateProvinceID = null;
CIPHPushReqMod timeCardPushRequest = new CIPHPushReqMod();
if (OtherTimeCardIDs != null && OtherTimeCardIDs.Count > 0)
{
if (timeSheetApprovedView.TimeCards.Count == 1)
{
BaseStateProvinceID = timeSheetApprovedView.TimeCards.FirstOrDefault().BaseStateProvinceID;
}
using (SqlConnection connection = new SqlConnection(db.Database.Connection.ConnectionString))
{
try
{
using (SqlCommand command = new SqlCommand("spGetCIPHForPushToLawson", connection))
{
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@ContractInvoicePerHourIDs", SqlDbType.NVarChar).Value = string.Join(",", OtherTimeCardIDs) as object ?? DBNull.Value;
if (connection.State != ConnectionState.Closed)
{
connection.Close();
}
connection.Open();
using (var reader = command.ExecuteReader())
{
timeCardPushRequest.TimeCardLst = ((IObjectContextAdapter)db).ObjectContext.Translate<CIPHPushReqObj>(reader).ToList();
reader.NextResult();
timeCardPushRequest.AdditionalComponents = ((IObjectContextAdapter)db).ObjectContext.Translate<CIPHPushReqObj_AdditionalComponent>(reader).ToList();
}
}
}
catch (Exception)
{
}
finally
{
if (connection.State != ConnectionState.Closed)
{
connection.Close();
}
}
}
}
var contatDetail = db.ApplicationUsers.Where(x => x.ApplicationUserID == LogedInID && x.IsCatStaff == true).Select(x => new
{
x.FirstName,
x.MiddleName,
x.LastName,
x.EmployeeNumber,
x.UserName
}).FirstOrDefault();
string UserName = string.Empty;
if (!string.IsNullOrEmpty(contatDetail.FirstName))
{
UserName = contatDetail.FirstName.Trim() + " " + (string.IsNullOrEmpty(contatDetail.LastName) == false ? contatDetail.LastName : "");
}
else
{
UserName = contatDetail.UserName;
}
#region Intregation service class declaration
TimeCardPushResMod response1 = null;
CIPHPushResMod response2 = null;
LawsonAPIService pushToLawsonTimesheet = new LawsonAPIService();
bool isEndDatePush = false;
bool StatusLawson = false;
List<TimesheetPushToLawsonMessageViewModel> timecardMessages = new List<TimesheetPushToLawsonMessageViewModel>();
BoltOnAPIServices boltOnAPIServices = new BoltOnAPIServices();
List<BoltOnResponse> boltOnResponses = new List<BoltOnResponse>();
BoltOnResponse boltOnResponseSF = null;
BoltOnResponse boltOnResponseHR = null;
bool isHCM = HCMShared.IsHCMPrimary();
#endregion
#region HCM Bolt On Integration
try
{
if (isHCM)
{
if (StateFarmTimeCardIDs != null && StateFarmTimeCardIDs.Count > 0)
{
foreach (var item in StateFarmTimeCardIDs)
{
string BranchNumber = contextTimesheet.vw_TimeSheetConstructTypeSummary.FirstOrDefault(t => StateFarmTimeCardIDs.Contains(t.TimeCardID)).BranchNumber ?? string.Empty;
HCMIntegration.BoltOnTimecardView hcm = boltOnAPIServices.BoltOnTimeCardPush(string.Join(",", item), BranchNumber);
boltOnResponseSF = await boltOnAPIServices.AddTimecard(hcm);
if (boltOnResponseSF != null)
{
if (!string.IsNullOrEmpty(boltOnResponseSF.Status))
{
int tsID = Convert.ToInt32(boltOnResponseSF.Status);
TimeSheetStatusType timeSheetStatusType = db.TimeSheetStatusTypes.Where(t => t.TimeSheetStatusTypeID == tsID).FirstOrDefault();
TimesheetPushToLawsonMessageViewModel objMessage = new TimesheetPushToLawsonMessageViewModel
{
Message = tsID == 5 ? Global.StatusMessage.TimesheetPushedToLawson : timeSheetStatusType?.TimeSheetStatusTypeName ?? boltOnResponseHR.Message,
MsgNbr = tsID,
TimeCardId = item
};
timecardMessages.Add(objMessage);
boltOnAPIServices.UpadteStateFarmTS(item, UserName, LogedInID, Convert.ToInt32(boltOnResponseSF.Status));
}
}
}
StatusLawson = timecardMessages.Count == 0 ? false : true;
}
if (OtherTimeCardIDs != null && OtherTimeCardIDs.Count > 0 && (StatusLawson || StateFarmTimeCardIDs == null || StateFarmTimeCardIDs.Count == 0))
{
foreach (CIPHPushReqObj tc in timeCardPushRequest.TimeCardLst)
{
BoltOnTimecardView hcm = boltOnAPIServices.BoltOnCIPHPush(tc, timeCardPushRequest);
boltOnResponseHR = await boltOnAPIServices.AddTimecard(hcm);
if (boltOnResponseHR != null)
{
if (!string.IsNullOrEmpty(boltOnResponseHR.Status))
{
int tsID = Convert.ToInt32(boltOnResponseHR.Status);
TimeSheetStatusType timeSheetStatusType = db.TimeSheetStatusTypes.Where(t => t.TimeSheetStatusTypeID == tsID).FirstOrDefault();
TimesheetPushToLawsonMessageViewModel objMessage = new TimesheetPushToLawsonMessageViewModel
{
Message = tsID == 5 ? Global.StatusMessage.TimesheetPushedToLawson : timeSheetStatusType?.TimeSheetStatusTypeName ?? boltOnResponseHR.Message,
MsgNbr = tsID,
TimeCardId = tc.ContractInvoicePerHourID
};
timecardMessages.Add(objMessage);
boltOnAPIServices.UpadteHourlyTS(tc.ContractInvoicePerHourID, UserName, LogedInID, Convert.ToInt32(boltOnResponseHR.Status));
}
}
}
StatusLawson = timecardMessages.Count == 0 ? false : true;
try
{
if (StatusLawson && BaseStateProvinceID != null && BaseStateProvinceID > 0 && OtherTimeCardIDs.Count == 1)
{
var timeCard = db.ContractInvoicePerHours.Find(OtherTimeCardIDs.FirstOrDefault());
timeCard.BaseStateProvinceID = BaseStateProvinceID;
db.Entry(timeCard).State = EntityState.Modified;
await db.SaveChangesAsync();
}
}
catch (Exception _e)
{
Global.InsertException(_e);
}
}
}
else
{
// Add in parrelle Bolton DB
if (StateFarmTimeCardIDs != null && StateFarmTimeCardIDs.Count > 0)
{
foreach (var item in StateFarmTimeCardIDs)
{
string BranchNumber = contextTimesheet.vw_TimeSheetConstructTypeSummary.FirstOrDefault(t => StateFarmTimeCardIDs.Contains(t.TimeCardID)).BranchNumber ?? string.Empty;
HCMIntegration.BoltOnTimecardView hcm = boltOnAPIServices.BoltOnTimeCardPush(string.Join(",", item), BranchNumber);
HCMIntegration.Services.BoltOnService.BoltOnParallelService bol = new HCMIntegration.Services.BoltOnService.BoltOnParallelService();
int z = await bol.AddTimecardParallel(hcm, 1, item, contextTimesheet.TimeCards.Find(item).ContactID);
}
}
if (OtherTimeCardIDs != null && OtherTimeCardIDs.Count > 0)
{
foreach (CIPHPushReqObj tc in timeCardPushRequest.TimeCardLst)
{
BoltOnTimecardView hcm = boltOnAPIServices.BoltOnCIPHPush(tc, timeCardPushRequest);
HCMIntegration.Services.BoltOnService.BoltOnParallelService bol = new HCMIntegration.Services.BoltOnService.BoltOnParallelService();
int z = await bol.AddTimecardParallel(hcm, 2, tc.ContractInvoicePerHourID, tc.ContactID);
}
}
#region send to lawson
#region Push To Lawson Intregation Service
try
{
if (StateFarmTimeCardIDs != null && StateFarmTimeCardIDs.Count > 0)
{
string BranchNumber = contextTimesheet.vw_TimeSheetConstructTypeSummary.FirstOrDefault(t => StateFarmTimeCardIDs.Contains(t.TimeCardID)).BranchNumber ?? string.Empty;
response1 = pushToLawsonTimesheet.TimeCardPush(string.Join(",", StateFarmTimeCardIDs), BranchNumber, UserName, LogedInID, "Secret");
if (response1 == null)
{
StatusLawson = false;
return this.ResponseMessage(Request.CreateResponse(HttpStatusCode.BadRequest, new { Status = Global.Status.Invalid.ToString(), Message = "Failed to connect the Payroll Push service" }));
}
StatusLawson = !response1.IsFailed;
}
if (OtherTimeCardIDs != null && OtherTimeCardIDs.Count > 0 && (StatusLawson || StateFarmTimeCardIDs == null || StateFarmTimeCardIDs.Count == 0))
{
response2 = pushToLawsonTimesheet.CIPHPush(timeCardPushRequest, UserName, LogedInID, "Secret");
if (response2 == null)
{
StatusLawson = false;
return this.ResponseMessage(Request.CreateResponse(HttpStatusCode.BadRequest, new { Status = Global.Status.Invalid.ToString(), Message = "Failed to connect the Payroll Push service" }));
}
StatusLawson = !response2.IsFailed;
}
if (!StatusLawson)
{
return this.ResponseMessage(Request.CreateResponse(HttpStatusCode.BadRequest, new { Status = Global.Status.Invalid.ToString(), Message = response1?.FailedReason ?? response2?.FailedReason ?? string.Empty }));
}
else
{
#region Get Response Message from TCPushResObjLst
if (response1 != null && response1.TCPushResObjLst != null && response1.TCPushResObjLst.Count() > 0)
{
foreach (var item in response1.TCPushResObjLst)
{
TimesheetPushToLawsonMessageViewModel objMessage = new TimesheetPushToLawsonMessageViewModel();
objMessage.Message = item.MsgNbr == 0 ? Global.StatusMessage.TimesheetPushedToLawson : item.Message;
objMessage.MsgNbr = item.MsgNbr;
objMessage.TimeCardId = item.TimeCardId;
timecardMessages.Add(objMessage);
}
}
if (response2 != null && response2.TCPushResObjLst != null && response2.TCPushResObjLst.Count() > 0)
{
foreach (var item in response2.TCPushResObjLst)
{
TimesheetPushToLawsonMessageViewModel objMessage = new TimesheetPushToLawsonMessageViewModel();
objMessage.Message = item.MsgNbr == 0 ? Global.StatusMessage.TimesheetPushedToLawson : item.Message;
objMessage.MsgNbr = item.MsgNbr;
objMessage.TimeCardId = item.TimeCardId;
timecardMessages.Add(objMessage);
}
try
{
if (BaseStateProvinceID != null && BaseStateProvinceID > 0 && response2.TCPushResObjLst.Count() == 1)
{
var timecardLawsonDetail = response2.TCPushResObjLst.FirstOrDefault();
//if (timecardLawsonDetail.MsgNbr == 0)
//{
var timeCard = db.ContractInvoicePerHours.Find(timecardLawsonDetail.TimeCardId);
timeCard.BaseStateProvinceID = BaseStateProvinceID;
db.Entry(timeCard).State = EntityState.Modified;
await db.SaveChangesAsync();
//}
}
}
catch (Exception _e)
{
Global.InsertException(_e);
}
}
#endregion
}
}
catch (Exception ex)
{
Global.InsertException(ex);
}
#endregion
#endregion
}
}
catch (Exception _ex)
{
Global.InsertException(_ex);
return this.ResponseMessage(Request.CreateResponse(HttpStatusCode.InternalServerError, new { Status = Global.Status.Invalid.ToString(), Message = Global.StatusMessage.Invalid, MessageDetail = _ex.Message + _ex.InnerException }));
}
#endregion
if (StatusLawson)
{
if (StateFarmTimeCardIDs != null)
{
foreach (var item in StateFarmTimeCardIDs)
{
TimesheetPushToLawsonMessageViewModel Message = timecardMessages.FirstOrDefault(t => t.TimeCardId == item);
//We need to fetch from Config file later ie MsgNbr==107
if (Message.MsgNbr == 107 && Message.TimeCardId != null && Message.TimeCardId > 0)
{
int ContactAssignmentPSId = contextTimesheet.TimeCards.FirstOrDefault(t => t.TimeCardID == item).ContactAssignmentPSId;
if (isHCM)
{
//var res = await boltOnAPIServices.BoltOnCompRulePush(ContactAssignmentPSId, LogedInID);
}
else
{
//True: for Inactive Assignment whose completion date is in past
//False: for Active Assignment whose completion date is either null or in future
isEndDatePush = !contextTimesheet.vw_TimeSheetContactAssignmentSummary.Any(t => t.ContactAssignmentPayStructureID == ContactAssignmentPSId && DbFunctions.TruncateTime(t.CompletionDate) >= DbFunctions.TruncateTime(DateTime.Now));
PushToLawsonTimesheet pushAssignment = new PushToLawsonTimesheet();
Models.AssignmentResponse resp = pushAssignment.PushAssignmentToLawson(ContactAssignmentPSId, isEndDatePush);
}
}
#region Notfication Section
TimeCard tm = contextTimesheet.TimeCards.FirstOrDefault(t => t.TimeCardID == item);
int contactID = tm.ContactID;
int branchID = tm.BranchId;
try
{
#region Via Stored Procedure
//Insert
//string dateRange = tm.WeekStartDate.Date.ToString() + "-" + tm.WeekStartDate.AddDays(6).Date.ToString();
// CHange date take full date and time
string dateRange = tm.WeekStartDate.ToString("MM/dd/yyyy").ToString() + "-" + tm.WeekStartDate.AddDays(6).ToString("MM/dd/yyyy");
InsertNotificationViewModel insertNotification = new InsertNotificationViewModel();
insertNotification.NotificationMessageID = Convert.ToInt32(Global.NotificationMessageID.TimesheetApproved);
insertNotification.LandingPageID = Convert.ToInt32(Global.NotificationLandingPageID.TimesheetApprovedTab);
insertNotification.ContactID = contactID;
insertNotification.TaskID = item;
insertNotification.BranchID = branchID;
insertNotification.DateRange = dateRange;
Global.InsertNotification(insertNotification);
//Send
Global.SendNotification();
#endregion
}
catch (Exception ex)
{
Global.InsertException(ex);
}
#endregion
}
}
if (OtherTimeCardIDs != null && timeCardPushRequest != null && timeCardPushRequest.TimeCardLst != null)
{
foreach (var item in timeCardPushRequest.TimeCardLst)
{
TimesheetPushToLawsonMessageViewModel Message = timecardMessages.FirstOrDefault(t => t.TimeCardId == item.ContractInvoicePerHourID);
//We need to fetch from Config file later ie MsgNbr==107
if (Message.MsgNbr == 107 && Message.TimeCardId != null && Message.TimeCardId > 0)
{
if (isHCM)
{
//var res = await boltOnAPIServices.BoltOnCompRulePush(item.ContactAssignmentPSId, LogedInID);
}
else
{
//True: for Inactive Assignment whose completion date is in past
//False: for Active Assignment whose completion date is either null or in future
isEndDatePush = item.CompletionDate == null || item.CompletionDate >= DateTime.Now ? false : true;
PushToLawsonTimesheet pushAssignment = new PushToLawsonTimesheet();
Models.AssignmentResponse resp = pushAssignment.PushAssignmentToLawson(item.ContactAssignmentPSId, isEndDatePush);
}
}
#region Notfication Section
try
{
string dateRange = item.WeekStartDate.ToString("MM/dd/yyyy") + "-" + item.WeekEndDate.ToString("MM/dd/yyyy");
InsertNotificationViewModel insertNotification = new InsertNotificationViewModel();
insertNotification.NotificationMessageID = Convert.ToInt32(Global.NotificationMessageID.TimesheetApproved);
insertNotification.LandingPageID = Convert.ToInt32(Global.NotificationLandingPageID.TimesheetApprovedTab);
insertNotification.ContactID = item.ContactID;
insertNotification.TaskID = item.ContractInvoicePerHourID;
insertNotification.BranchID = item.BranchID;
insertNotification.DateRange = dateRange;
Global.InsertNotification(insertNotification);
Global.SendNotification();
}
catch (Exception ex)
{
Global.InsertException(ex);
}
#endregion
}
}
return this.ResponseMessage(Request.CreateResponse(HttpStatusCode.OK, new { Status = Global.Status.OK.ToString(), Message = Global.StatusMessage.Updated.ToString(), MessageDetail = timecardMessages }));
}
else
{
return this.ResponseMessage(Request.CreateResponse(HttpStatusCode.BadRequest, new { Status = Global.Status.Invalid.ToString(), Message = "" }));
}
}
catch (Exception ex)
{
Global.InsertException(ex);
return this.ResponseMessage(Request.CreateResponse(HttpStatusCode.InternalServerError, new { Status = Global.Status.Invalid.ToString(), Message = Global.StatusMessage.Invalid, MessageDetail = ex.Message + ex.InnerException }));
}
}