public int DeleteRepairPart(App_RepairPart part, App_WorkTicket workTicket, App_Technician technician) { int rows = 0; JT_TransactionImportDetail detail = new JT_TransactionImportDetail(); lock (_locker) { detail.ID = part.ID; detail.RecordType = "P"; detail.SalesOrderNo = workTicket.SalesOrderNo; detail.WTNumber = workTicket.WTNumber; detail.WTStep = workTicket.WTStep; detail.EmployeeDeptNo = technician.TechnicianDeptNo; detail.EmployeeNo = technician.TechnicianNo; detail.TransactionDate = System.DateTime.Now.ToString("yyyy-MM-dd"); detail.ItemCode = part.PartItemCode; detail.WarehouseCode = part.Warehouse; detail.QuantityUsed = part.Quantity; detail.UnitCost = part.UnitCost; detail.UnitPrice = part.UnitPrice; detail.ChargePart = (part.IsChargeable ? "Y" : "N"); detail.PrintPart = (part.IsPrintable ? "Y" : "N"); detail.PurchasePart = (part.IsPurchased ? "Y" : "N"); detail.Overhead = (part.IsOverhead ? "Y" : "N"); detail.UnitOfMeasure = part.UnitOfMeasure; detail.CommentText = part.Comment; detail.LotSerialNo = part.LotSerialNo; rows = _database.Delete <JT_TransactionImportDetail>(detail.ID); } return(rows); }
public void SaveMiscellaneousTimeEntry(JT_DailyTimeEntry dailyTimeEntry, double hoursWorked) { JT_TransactionImportDetail transactionDetail = new JT_TransactionImportDetail() { // dch rkl 11/01/2016 per Jeanne, this should be an "M" //RecordType = "L", RecordType = "M", SalesOrderNo = dailyTimeEntry.SalesOrderNo, WTNumber = dailyTimeEntry.WTNumber, WTStep = dailyTimeEntry.WTStep, EmployeeDeptNo = dailyTimeEntry.DepartmentNo, EmployeeNo = dailyTimeEntry.EmployeeNo, EarningsCode = dailyTimeEntry.EarningsCode, StartTime = dailyTimeEntry.StartTime, EndTime = dailyTimeEntry.EndTime, // dch rkl 11/01/2016 Transaction Date should come from the entry screen BEGIN //TransactionDate = DateTime.Now.ToSage100DateString(), //TransactionDateAsDateTime = DateTime.Now, TransactionDate = dailyTimeEntry.TransactionDate.ToSage100DateString(), TransactionDateAsDateTime = dailyTimeEntry.TransactionDate, // dch rkl 11/01/2016 Transaction Date should come from the entry screen END HoursWorked = hoursWorked }; _database.Insert(transactionDetail); _database.Insert(dailyTimeEntry); }
/// <summary> /// Sets the given technician as being clocked-in to a ticket represented by the /// specified scheduled appointment object. The time and status codes provided /// will also be used to update the technician data. /// </summary> /// <param name="technician">Technician to clock in</param> /// <param name="scheduledAppointment">Scheduled Appointment object to clock into</param> /// <param name="startDateTime">Start date/time</param> /// <param name="technicianStatus">Technician status object for the new, clocked-in status</param> /// <param name="serviceTicketStatusCode">Work ticket status for the new, clocked-in status</param> public void ClockIn(App_Technician technician, App_ScheduledAppointment scheduledAppointment, DateTime startDateTime, JT_TechnicianStatus technicianStatus, JT_MiscellaneousCodes serviceTicketStatusCode) { // Is this tech already clocked into a ticket? if (IsClockedIn(technician)) { throw new Exception("Technician is already clocked into a ticket!"); } int rows = 0; // Update the erp record with the ticket info JT_Technician erpTech = GetTechnician(technician.TechnicianDeptNo, technician.TechnicianNo); erpTech.CurrentStartDate = startDateTime.Date; erpTech.CurrentStartTime = startDateTime.ToSage100TimeString(); erpTech.CurrentSalesOrderNo = scheduledAppointment.SalesOrderNumber; erpTech.CurrentWTNumber = scheduledAppointment.WorkTicketNumber; erpTech.CurrentWTStep = scheduledAppointment.WorkTicketStep; erpTech.CurrentStatus = technicianStatus.StatusCode; // dch rkl 11/03/2016 Save Current Status code to JT_Technician table rows = _database.Update(erpTech); // create the JT_TransactionImportDetail record JT_TransactionImportDetail importDetail = new JT_TransactionImportDetail(); importDetail.RecordType = "S"; importDetail.SalesOrderNo = scheduledAppointment.SalesOrderNumber; importDetail.WTNumber = scheduledAppointment.WorkTicketNumber; importDetail.WTStep = scheduledAppointment.WorkTicketStep; importDetail.StatusCode = serviceTicketStatusCode.MiscellaneousCode; //importDetail.statusDate TODO>>> not in table spec! importDetail.TransactionDate = startDateTime.ToShortDateString(); importDetail.TransactionDateAsDateTime = startDateTime; // dch rkl 12/09/2016 per Chris, store start time in start time //importDetail.StatusTime = startDateTime.ToSage100TimeString(); importDetail.StartTime = startDateTime.ToSage100TimeString(); //importDetail.StatusComment = ""; // not used at this time but might be in the future rows = _database.Insert(importDetail); // TODO... do we need this anymore now that we are tracking in/out // on technician record? JT_DailyTimeEntry newTimeEntry = new JT_DailyTimeEntry(); newTimeEntry.DepartmentNo = technician.TechnicianDeptNo; newTimeEntry.EmployeeNo = technician.TechnicianNo; newTimeEntry.SalesOrderNo = scheduledAppointment.SalesOrderNumber; newTimeEntry.WTNumber = scheduledAppointment.WorkTicketNumber; newTimeEntry.WTStep = scheduledAppointment.WorkTicketStep; newTimeEntry.StartTime = startDateTime.ToSage100TimeString(); newTimeEntry.TransactionDate = startDateTime; newTimeEntry.IsModified = true; rows = _database.Insert(newTimeEntry); }
public ScheduleDetailPageViewModel(App_ScheduledAppointment scheduleDetail) { _scheduleDetail = scheduleDetail; _technicianScheduleDetail = App.Database.GetTechnicianScheduleDetailFromDB().Where(x => x.WTNumber == _scheduleDetail.WorkTicketNumber && x.WTStep == _scheduleDetail.WorkTicketStep).FirstOrDefault(); _timeEntryDetail = App.Database.GetTimeEntryData(scheduleDetail); _timportDetail = App.Database.GetCurrentExport().Where(x => x.RecordType == "L" && x.WTNumber == _scheduleDetail.WorkTicketNumber && x.WTStep == _scheduleDetail.WorkTicketStep && x.SalesOrderNo == _scheduleDetail.SalesOrderNumber).FirstOrDefault(); }
public JT_TransactionImportDetail SaveRepairPart(App_RepairPart part, App_WorkTicket workTicket, App_Technician technician) { int rows = 0; JT_TransactionImportDetail detail = new JT_TransactionImportDetail(); lock (_locker) { detail.ID = part.ID; detail.RecordType = "P"; detail.SalesOrderNo = workTicket.SalesOrderNo; detail.WTNumber = workTicket.WTNumber; detail.ItemCodeDesc = part.ItemCodeDesc; detail.WTStep = workTicket.WTStep; detail.EmployeeDeptNo = technician.TechnicianDeptNo; detail.EmployeeNo = technician.TechnicianNo; detail.TransactionDate = System.DateTime.Now.ToString("yyyy-MM-dd"); detail.TransactionDateAsDateTime = System.DateTime.Now; detail.ItemCode = part.PartItemCode; detail.WarehouseCode = part.Warehouse; detail.QuantityUsed = part.Quantity; detail.UnitCost = part.UnitCost; detail.UnitPrice = part.UnitPrice; detail.ChargePart = (part.IsChargeable ? "Y" : "N"); detail.PrintPart = (part.IsPrintable ? "Y" : "N"); detail.PurchasePart = (part.IsPurchased ? "Y" : "N"); detail.Overhead = (part.IsOverhead ? "Y" : "N"); detail.UnitOfMeasure = part.UnitOfMeasure; detail.CommentText = part.Comment; detail.LotSerialNo = part.LotSerialNo; detail.SOLineKey = part.SoLineKey; // dch rkl 01/23/2017 Save SOLineKey detail.QuantityRequired = (double)part.QuantityReqd; // dch rkl 11/30/2016 save quantity required // dch rkl 02/03/2017 Do not set this, per Jeanne //detail.QuantityCompleted = part.QuantityShipped; // dch rkl 12/05/2016 save quantity shipped // do save if (detail.ID != 0) { // update existing rows = _database.Update(detail); } else { // insert new rows = _database.Insert(detail); } } return(detail); }
// dch rkl 10/14/2016 Delete Expense Item public void DeleteExpense(App_Expense expense) { JT_TransactionImportDetail detail = new JT_TransactionImportDetail(); lock (_locker) { detail = _database.Table <JT_TransactionImportDetail>().Where( tid => (tid.ID == expense.ID) ).FirstOrDefault(); _database.Delete(detail); } }
public async Task <bool> InsertTransactionImportDetailRecord(JT_TransactionImportDetail importDetail) { bool returnData = false; // set up the proper URL string url = GetRestServiceUrl(); if (!url.EndsWith(@"/")) { url += @"/"; } url += @"i/JT_TransactionImportDetail"; HttpClient client = new HttpClient(); client.BaseAddress = new Uri(url); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); JsonSerializerSettings microsoftDateFormatSettings = new JsonSerializerSettings(); microsoftDateFormatSettings.DateFormatHandling = DateFormatHandling.MicrosoftDateFormat; // Make the call and get a valid response HttpResponseMessage response = await client.PostAsync(client.BaseAddress, new StringContent(JsonConvert.SerializeObject(importDetail, microsoftDateFormatSettings), null, "application/json")); // puke.... await response.EnsureSuccessStatusCode(); // Read out the result... it better be JSON! string JsonResult = response.Content.ReadAsStringAsync().Result; try { returnData = JsonConvert.DeserializeObject <bool>(JsonResult); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); // dch rkl 12/07/2016 Log Error ErrorReporting errorReporting = new ErrorReporting(); errorReporting.sendException(ex, "TechDashboard.TdWs_RestClient.InsertTransactionImportDetailRecord"); } client.Dispose(); response.Dispose(); return(returnData); }
public void SaveWorkTicketText(App_WorkTicketText workTicketText) { int rows = 0; lock (_locker) { JT_WorkTicketText workTicketToSave = new JT_WorkTicketText() { WTNumber = workTicketText.WTNumber, WTStep = workTicketText.WTStep, Text = workTicketText.Text, SequenceNo = workTicketText.SequenceNo, SalesOrderNo = workTicketText.SalesOrderNo, IsModified = true, ID = workTicketText.ID }; JT_TransactionImportDetail transactionDetail = new JT_TransactionImportDetail() { RecordType = "W", SalesOrderNo = workTicketText.SalesOrderNo, WTNumber = workTicketText.WTNumber, WTStep = workTicketText.WTStep, TransactionDate = DateTime.Now.ToString("yyyyMMdd"), // dch rkl 11/03/2016 include transaction date for notes StepText = workTicketText.Text }; _database.Insert(transactionDetail); SaveWorkTicketText(workTicketToSave); /*workTicketText.IsModified = true; * // puke * //JT_WorkTicketText itemToSave; * * * if (workTicketText.WTNumber != null && workTicketText.WTStep != null) * { * rows = _database.Update(workTicketText); * } * else * { * rows = _database.Insert(workTicketText); * } * * // puke... need call back?*/ } }
/// <summary> /// Saves the provided App_Expense item to the local database /// and flags it as modified. /// </summary> /// <param name="expense">The App_Expense item to save</param> public void SaveExpense(JT_TransactionImportDetail expense) { int rows = 0; lock (_locker) { if (expense.ID != 0) { rows = _database.Update(expense); System.Diagnostics.Debug.WriteLine("Number of rows updated = " + rows.ToString()); } else { expense.RecordType = "E"; rows = _database.Insert(expense); System.Diagnostics.Debug.WriteLine("Number of rows inserted = " + rows.ToString()); } } }
/// <summary> /// Saves the provided App_Expense item to the local database /// </summary> /// <param name="expense">The App_Expense item to save</param> public void SaveExpense(App_Expense expense) { int rows = 0; JT_TransactionImportDetail txnImportDetail = new JT_TransactionImportDetail(); txnImportDetail.RecordType = "E"; txnImportDetail.ID = expense.ID; txnImportDetail.EmployeeNo = App.Database.GetCurrentTechnicianFromDb().TechnicianNo; txnImportDetail.EmployeeDeptNo = App.Database.GetCurrentTechnicianFromDb().TechnicianDeptNo; txnImportDetail.TransactionDate = expense.Date.ToSage100DateString(); txnImportDetail.SalesOrderNo = expense.WorkTicket.SalesOrderNo; txnImportDetail.WTNumber = expense.WorkTicket.WTNumber; txnImportDetail.WTStep = expense.WorkTicket.WTStep; txnImportDetail.ItemCode = expense.ChargeCode; txnImportDetail.UnitOfMeasure = expense.UnitOfMeasure; txnImportDetail.QuantityUsed = expense.Quantity; txnImportDetail.UnitCost = expense.UnitCost; txnImportDetail.ReimburseEmployee = (expense.IsReimbursable ? "Y" : "N"); txnImportDetail.UnitPrice = expense.UnitPrice; // dch rkl 12/09/2016 per Chris, use ItemCodeDesc //txnImportDetail.BillingDescription = expense.BillingDescription; //txnImportDetail.ItemCodeDesc = expense.BillingDescription; //per Jeanne, use comment txnImportDetail.CommentText = expense.BillingDescription; txnImportDetail.ChargePart = (expense.IsChargeableToCustomer ? "Y" : "N"); lock (_locker) { if (txnImportDetail.ID != 0) { rows = _database.Update(txnImportDetail); System.Diagnostics.Debug.WriteLine("Number of rows updated = " + rows.ToString()); } else { rows = _database.Insert(txnImportDetail); System.Diagnostics.Debug.WriteLine("Number of rows inserted = " + rows.ToString()); } } }
public ScheduleDetailPageViewModel(App_ScheduledAppointment scheduleDetail) { // dch rkl 12/07/2016 catch exception try { _scheduleDetail = scheduleDetail; _technicianScheduleDetail = App.Database.GetTechnicianScheduleDetailFromDB().Where(x => x.WTNumber == _scheduleDetail.WorkTicketNumber && x.WTStep == _scheduleDetail.WorkTicketStep).FirstOrDefault(); _timeEntryDetail = App.Database.GetTimeEntryData(scheduleDetail); _timportDetail = App.Database.GetCurrentExport().Where(x => x.RecordType == "L" && x.WTNumber == _scheduleDetail.WorkTicketNumber && x.WTStep == _scheduleDetail.WorkTicketStep && x.SalesOrderNo == _scheduleDetail.SalesOrderNumber).FirstOrDefault(); } catch (Exception ex) { // dch rkl 12/07/2016 Log Error ErrorReporting errorReporting = new ErrorReporting(); errorReporting.sendException(ex, "TechDashboard.ScheduleDetailPageViewModel"); } }
public int DeleteRepairPart(App_RepairPart part) { int rows = 0; JT_TransactionImportDetail detail = new JT_TransactionImportDetail(); lock (_locker) { detail = _database.Table <JT_TransactionImportDetail>().Where( tid => (tid.ID == part.ID) ).FirstOrDefault(); detail.RemovePart = "Y"; detail.TransactionDate = System.DateTime.Now.ToString("yyyy-MM-dd"); detail.TransactionDateAsDateTime = System.DateTime.Now; rows = _database.Update(detail); } return(rows); }
// dch rkl 01/13/2017 Return the ID of the Inserted Part //public void AddPartToPartsList() public int AddPartToPartsList() { // dch rkl 01/13/2017 Return the ID of the Inserted Part int iId = 0; // dch rkl 12/07/2016 catch exception try { // dch rkl 01/13/2017 Return the ID of the Inserted Part //App.Database.SaveRepairPart(_partToEdit, _workTicket, App.CurrentTechnician); JT_TransactionImportDetail jtDtl = App.Database.SaveRepairPart(_partToEdit, _workTicket, App.CurrentTechnician); iId = jtDtl.ID; } catch (Exception ex) { // dch rkl 12/07/2016 Log Error ErrorReporting errorReporting = new ErrorReporting(); errorReporting.sendException(ex, "TechDashboard.PartsEditPageViewModel.AddPartToPartsList"); } // dch rkl 01/13/2017 Return the ID of the Inserted Part return(iId); }
public List <App_RepairPart> RetrievePartsListFromWorkTicket(App_WorkTicket workTicket) { List <JT_TransactionImportDetail> importDetailList = null; List <SO_SalesOrderDetail> salesOrderDetaillist = null; List <App_RepairPart> partsList = new List <App_RepairPart>(); lock (_locker) { importDetailList = _database.Table <JT_TransactionImportDetail>().Where( tid => (tid.SalesOrderNo == workTicket.SalesOrderNo) && (tid.RecordType == "P") && (tid.WTNumber == workTicket.WTNumber) && (tid.WTStep == workTicket.WTStep) //&& //((tid.RemovePart == null) || (tid.RemovePart.ToUpper() != "Y")) we're going to remove those downstream ).ToList(); if ((importDetailList != null) && (importDetailList.Count > 0)) { partsList = new List <App_RepairPart>(); foreach (JT_TransactionImportDetail detail in importDetailList) { partsList.Add(new App_RepairPart(detail, workTicket)); } } } // now let's check for default parts lock (_locker) { salesOrderDetaillist = _database.Table <SO_SalesOrderDetail>().Where( tid => (tid.SalesOrderNo == workTicket.SalesOrderNo) && (tid.JT158_WTPart == "Y") && (tid.JT158_WTNumber == workTicket.WTNumber) && (tid.JT158_WTStep == workTicket.WTStep)) .ToList(); if ((salesOrderDetaillist != null) && (salesOrderDetaillist.Count > 0)) { foreach (SO_SalesOrderDetail detail in salesOrderDetaillist) { if (importDetailList.Count(x => x.ItemCode == detail.ItemCode) <= 0 && detail.ItemCode != "/EXPENSE") { var servicePart = _database.Table <JT_ServiceEquipmentParts>().Where(x => x.ItemCode == detail.ItemCode).FirstOrDefault(); var equipmentAsset = _database.Table <JT_EquipmentAsset>().Where(x => x.ItemCode == detail.ItemCode).FirstOrDefault(); var ciItem = _database.Table <CI_Item>().Where(x => x.ItemCode == detail.ItemCode).FirstOrDefault(); App_RepairPart newRepairPart = new App_RepairPart(ciItem, workTicket); newRepairPart.PartItemCode = (servicePart != null) ? servicePart.PartItemCode : detail.ItemCode; newRepairPart.ProblemCode = (servicePart != null) ? servicePart.ProblemCode : ""; // dch rkl 11/30/2016 carry the SO Detail CommentText, Unit Price, Unit Cost, Quantity Required to the JT Transaction Import Detail part if (detail.CommentText != null) { newRepairPart.Comment = detail.CommentText; } newRepairPart.UnitPrice = (double)detail.UnitPrice; newRepairPart.UnitCost = (double)detail.UnitCost; newRepairPart.QuantityReqd = detail.QuantityOrdered; newRepairPart.Quantity = servicePart.Quantity; // dch rkl 01/20/2017 If Warehouse on Sales Order, use that if (detail.WarehouseCode != null) { newRepairPart.Warehouse = detail.WarehouseCode; } else { if (ciItem != null) { newRepairPart.Warehouse = ciItem.DefaultWarehouseCode; } else { //bk assuming that this is an expense or the like newRepairPart.Warehouse = ""; } } // dch rkl 01/13/2017 Part Description should come from sales order if (detail.ItemCodeDesc != null) { newRepairPart.PartItemCodeDescription = detail.ItemCodeDesc; } // dch rkl 12/05/2016 newRepairPart.QuantityShipped = (double)detail.QuantityShipped; // dch rkl 11/23/2016 Use Unit of Measure from SO_SalesOrderDetail newRepairPart.UnitOfMeasure = (detail.UnitOfMeasure != null) ? detail.UnitOfMeasure : ""; // dch rkl 01/23/2017 Capture SO Line Key newRepairPart.SoLineKey = detail.LineKey; JT_TransactionImportDetail newdetail = SaveRepairPart(newRepairPart, workTicket, new App_Technician(GetCurrentTechnicianFromDb())); newRepairPart.ID = newdetail.ID; partsList.Add(newRepairPart); } } } } // now let's cull removed parts from our list // dch rkl 12/05/2016 allow for cases where the same part number exists on multiple lines foreach (var part in partsList.ToList()) { var importDetail = _database.Table <JT_TransactionImportDetail>().Where( tid => (tid.SalesOrderNo == workTicket.SalesOrderNo) && (tid.RecordType == "P") && (tid.WTNumber == workTicket.WTNumber) && (tid.WTStep == workTicket.WTStep) && (tid.ItemCode == part.PartItemCode) && (tid.QuantityUsed == part.Quantity) && // dch rkl 12/05/2016 match on qty (tid.WarehouseCode == part.Warehouse) && // dch rkl 12/05/2016 match on whse (tid.LotSerialNo == part.LotSerialNo) && // dch rkl 12/05/2016 match on lot/serial (tid.UnitPrice == part.UnitPrice) && // dch rkl 12/05/2016 match on price (tid.UnitOfMeasure == part.UnitOfMeasure) && // dch rkl 12/05/2016 match on UM (tid.RemovePart == "Y")).FirstOrDefault(); if (importDetail != null) { partsList.Remove(part); } } return(partsList); }
protected Rkl.Erp.Sage.Sage100.TableObjects.API_Results InsertTransactionImportDetailToSData(JT_TransactionImportDetail importDetail) { // dch rkl 12/09/2016 Insert now returns object result //bool result = _sDataClient.InsertRecord(importDetail); return(_sDataClient.InsertRecord(importDetail)); //return result; }
//public bool InsertJT_TransactionImportDetail([FromBody]JT_TransactionImportDetail importDetail) public API_Results InsertJT_TransactionImportDetail([FromBody] JT_TransactionImportDetail importDetail) { return(tdws.InsertJT_TransactionImportDetail(importDetail)); }
protected async Task <Rkl.Erp.Sage.Sage100.TableObjects.API_Results> InsertErpTransactionImportDetail(JT_TransactionImportDetail importDetail) { // dch rkl 12/09/2016 Insert now returns object result //bool result = false; Rkl.Erp.Sage.Sage100.TableObjects.API_Results result = new Rkl.Erp.Sage.Sage100.TableObjects.API_Results(); switch (_dataConnectionType) { case ConnectionType.Rest: // dch rkl 12/09/2016 Insert now returns object result //result = await InsertTransactionImportDetailToRestService(importDetail); result.Success = await InsertTransactionImportDetailToRestService(importDetail); break; case ConnectionType.SData: // dch rkl 12/09/2016 Insert now returns object result result = InsertTransactionImportDetailToSData(importDetail); break; default: break; } return(result); }
// dch rkl 12/09/2016 This now returns an object //public bool InsertTransactionImportDetailRecordSync(JT_TransactionImportDetail importDetail) public Rkl.Erp.Sage.Sage100.TableObjects.API_Results InsertTransactionImportDetailRecordSync(JT_TransactionImportDetail importDetail) { // dch rkl 12/09/2016 This now returns an object //bool returnData = false; Rkl.Erp.Sage.Sage100.TableObjects.API_Results returnData = new Rkl.Erp.Sage.Sage100.TableObjects.API_Results(); App_Settings appSettings = App.Database.GetApplicationSettings(); // set up the proper URL string url = GetRestServiceUrl(); if (!url.EndsWith(@"/")) { url += @"/"; } url += @"i/JT_TransactionImportDetail"; HttpClient client = new HttpClient(); client.BaseAddress = new Uri(url); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); JsonSerializerSettings microsoftDateFormatSettings = new JsonSerializerSettings(); microsoftDateFormatSettings.DateFormatHandling = DateFormatHandling.MicrosoftDateFormat; if (appSettings.DeviceID != null) { SimpleAES encryptText = new SimpleAES("V&WWJ3d39brdR5yUh5(JQGHbi:FB@$^@", "W4aRWS!D$kgD8Xz@"); string authid = encryptText.EncryptToString(appSettings.DeviceID); string datetimever = encryptText.EncryptToString(DateTime.Now.ToString("yyyy-MM-ddTHH:mm:sszzz")); client.DefaultRequestHeaders.Add("x-tdws-authid", authid); client.DefaultRequestHeaders.Add("x-tdws-auth", datetimever); } // Make the call and get a valid response HttpResponseMessage response = client.PostAsync(client.BaseAddress, new StringContent(JsonConvert.SerializeObject(importDetail, microsoftDateFormatSettings), null, "application/json")).Result; // TODO.... await response.EnsureSuccessStatusCode(); // Read out the result... it better be JSON! string JsonResult = response.Content.ReadAsStringAsync().Result; try { // dch rkl 12/09/2016 This now returns an object //returnData = JsonConvert.DeserializeObject<bool>(JsonResult); returnData = JsonConvert.DeserializeObject <Rkl.Erp.Sage.Sage100.TableObjects.API_Results>(JsonResult); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); // dch rkl 12/07/2016 Log Error ErrorReporting errorReporting = new ErrorReporting(); errorReporting.sendException(ex, "TechDashboard.Data.RestClient"); } client.Dispose(); response.Dispose(); return(returnData); }
/// <summary> /// Sets the given technician as being clocked-out of a ticket represented by the /// specified work ticket object. The time and status codes provided /// will also be used to update the technician data. /// dch rkl 01/23/2017 This version of ClockOut includes parameters for when the hours are entered, not the start/stop date and time. /// </summary> /// <param name="technician">Technician to clock out</param> /// <param name="workTicket">Work ticket clocking out of</param> /// <param name="stopDateTime">Stop date/time</param> /// <param name="technicianStatus">Technician status object for the new, clocked-out status</param> /// <param name="serviceTicketStatusCode">Work ticket status for the new, clocked-out status</param> /// <param name="activityCode">Activity code to report</param> /// <param name="deptWorked">Department in which work was performed</param> /// <param name="earningsCode">Earnings code to report</param> /// <param name="meterReading">Meter reading (if any) to report</param> /// <param name="workPerformedText">Text/notes</param> public void ClockOut(App_Technician technician, App_WorkTicket workTicket, JT_TechnicianStatus technicianStatus, JT_MiscellaneousCodes serviceTicketStatusCode, string activityCode, string deptWorked, JT_EarningsCode earningsCode, double hoursBilled, double meterReading, string workPerformedText, double hoursWorked, string svcAgmtContractCode, string billingType) { int rows = 0; lock (_locker) { // Clear out fields for JT_Technician record JT_Technician erpTech = GetTechnician(technician.TechnicianDeptNo, technician.TechnicianNo); // update time entry first DateTime dtStartTime = DateTime.Now; JT_DailyTimeEntry currentTimeEntry = GetClockedInTimeEntry(technician); if (currentTimeEntry != null) { if (DateTime.TryParse(currentTimeEntry.StartTime, out dtStartTime)) { DateTime dtStopTime = dtStartTime.AddHours(hoursWorked); currentTimeEntry.EndTime = dtStopTime.ToSage100TimeString(); _database.Update(currentTimeEntry); } } erpTech.CurrentStartDate = new DateTime(); erpTech.CurrentStartTime = null; erpTech.CurrentSalesOrderNo = null; erpTech.CurrentWTNumber = null; erpTech.CurrentWTStep = null; erpTech.CurrentStatus = technicianStatus.StatusCode; // dch rkl 11/03/2016 Save Current Status code to JT_Technician table rows = _database.Update(erpTech); // insert the JT_TransactionImportDetail record JT_TransactionImportDetail importDetail = new JT_TransactionImportDetail(); importDetail.RecordType = "S"; importDetail.SalesOrderNo = workTicket.SalesOrderNo; importDetail.WTNumber = workTicket.WTNumber; importDetail.WTStep = workTicket.WTStep; importDetail.StatusCode = serviceTicketStatusCode.MiscellaneousCode; importDetail.TransactionDate = dtStartTime.ToSage100DateString(); importDetail.TransactionDateAsDateTime = dtStartTime; importDetail.HoursWorked = hoursWorked; rows = _database.Insert(importDetail); // insert another JT_TransactionImportDetail record to record the labor importDetail = new JT_TransactionImportDetail(); importDetail.RecordType = "L"; importDetail.SalesOrderNo = workTicket.SalesOrderNo; importDetail.WTNumber = workTicket.WTNumber; importDetail.WTStep = workTicket.WTStep; importDetail.EmployeeDeptNo = technician.TechnicianDeptNo; importDetail.EmployeeNo = technician.TechnicianNo; importDetail.ActivityCode = activityCode; importDetail.DeptWorkedIn = deptWorked; importDetail.EarningsCode = earningsCode.EarningsCode; importDetail.TransactionDate = dtStartTime.ToSage100DateString(); importDetail.TransactionDateAsDateTime = dtStartTime; importDetail.HoursWorked = hoursWorked; //bk add hours billed importDetail.BillableHours = hoursBilled; importDetail.BillingType = billingType; importDetail.MeterReading = meterReading; importDetail.WorkPerformed = workPerformedText; importDetail.SvcAgmtContractCode = svcAgmtContractCode; // dch rkl 01/23/2017 Include Service Agreement Code rows = _database.Insert(importDetail); } }
/// <summary> /// Sets the given technician as being clocked-out of a ticket represented by the /// specified work ticket object. The time and status codes provided /// will also be used to update the technician data. /// </summary> /// <param name="technician">Technician to clock out</param> /// <param name="workTicket">Work ticket clocking out of</param> /// <param name="stopDateTime">Stop date/time</param> /// <param name="technicianStatus">Technician status object for the new, clocked-out status</param> /// <param name="serviceTicketStatusCode">Work ticket status for the new, clocked-out status</param> /// <param name="activityCode">Activity code to report</param> /// <param name="deptWorked">Department in which work was performed</param> /// <param name="earningsCode">Earnings code to report</param> /// <param name="meterReading">Meter reading (if any) to report</param> /// <param name="workPerformedText">Text/notes</param> public void ClockOut(App_Technician technician, App_WorkTicket workTicket, DateTime stopDateTime, JT_TechnicianStatus technicianStatus, JT_MiscellaneousCodes serviceTicketStatusCode, string activityCode, string deptWorked, JT_EarningsCode earningsCode, double hoursBilled, double hoursWorked, double meterReading, string workPerformedText, string svcAgmtContractCode, string clockoutDate, string billingType) { int rows = 0; DateTime startDateTime; lock (_locker) { // Clear out fields for JT_Technician record JT_Technician erpTech = GetTechnician(technician.TechnicianDeptNo, technician.TechnicianNo); // Record starting date/time in local variable startDateTime = erpTech.CurrentStartDate; // Add time startDateTime = startDateTime.Add(erpTech.CurrentStartTime.ToSage100TimeSpan()); if (hoursBilled <= 0) { hoursBilled = (stopDateTime - startDateTime).TotalHours; } // update time entry first JT_DailyTimeEntry currentTimeEntry = GetClockedInTimeEntry(technician); if (currentTimeEntry != null) { currentTimeEntry.EndTime = stopDateTime.ToSage100TimeString(); _database.Update(currentTimeEntry); } erpTech.CurrentStartDate = new DateTime(); erpTech.CurrentStartTime = null; erpTech.CurrentSalesOrderNo = null; erpTech.CurrentWTNumber = null; erpTech.CurrentWTStep = null; erpTech.CurrentStatus = technicianStatus.StatusCode; // dch rkl 11/03/2016 Save Current Status code to JT_Technician table rows = _database.Update(erpTech); rows = _database.Update(erpTech); // insert the JT_TransactionImportDetail record JT_TransactionImportDetail importDetail = new JT_TransactionImportDetail(); importDetail.RecordType = "S"; importDetail.SalesOrderNo = workTicket.SalesOrderNo; importDetail.WTNumber = workTicket.WTNumber; importDetail.WTStep = workTicket.WTStep; importDetail.StatusCode = serviceTicketStatusCode.MiscellaneousCode; //importDetail.statusDate TODO>>> not in table spec! // dch rkl 12/09/2016 per Chris, store start time in start time //importDetail.StatusTime = stopDateTime.ToSage100TimeString(); importDetail.StartTime = stopDateTime.ToSage100TimeString(); importDetail.TransactionDate = stopDateTime.ToSage100DateString(); importDetail.TransactionDateAsDateTime = stopDateTime; //importDetail.StatusComment = "TODO"; // not used at this time but might be in the future rows = _database.Insert(importDetail); // insert another JT_TransactionImportDetail record to record the labor importDetail = new JT_TransactionImportDetail(); importDetail.RecordType = "L"; importDetail.SalesOrderNo = workTicket.SalesOrderNo; importDetail.WTNumber = workTicket.WTNumber; importDetail.WTStep = workTicket.WTStep; importDetail.EmployeeDeptNo = technician.TechnicianDeptNo; importDetail.EmployeeNo = technician.TechnicianNo; importDetail.ActivityCode = activityCode; importDetail.DeptWorkedIn = deptWorked; importDetail.EarningsCode = earningsCode.EarningsCode; importDetail.SvcAgmtContractCode = svcAgmtContractCode; //importDetail.TransactionDate = stopDateTime.ToSage100DateString(); // dch rkl 02/03/2017 Use Start Date as Tran Date DateTime dtTranDt; if (DateTime.TryParse(clockoutDate, out dtTranDt)) { importDetail.TransactionDate = dtTranDt.ToSage100DateString(); importDetail.TransactionDateAsDateTime = dtTranDt; } else { importDetail.TransactionDate = startDateTime.ToSage100DateString(); importDetail.TransactionDateAsDateTime = startDateTime; } //importDetail.TransactionDate = startDateTime.ToSage100DateString(); //importDetail.TransactionDateAsDateTime = startDateTime; importDetail.StartTime = startDateTime.ToSage100TimeString(); importDetail.EndTime = stopDateTime.ToSage100TimeString(); importDetail.HoursWorked = hoursWorked; // (stopDateTime - startDateTime).TotalHours; //bk adding hours billed and billing type importDetail.BillableHours = hoursBilled; importDetail.BillingType = billingType; importDetail.MeterReading = meterReading; importDetail.WorkPerformed = workPerformedText; importDetail.SvcAgmtContractCode = svcAgmtContractCode; // dch rkl 01/23/2017 Include Service Agreement Code rows = _database.Insert(importDetail); } }
// dch rkl 12/09/2016 return API_Results, which includes success flag & error message(s) //public bool InsertJT_TransactionImportDetail(JT_TransactionImportDetail importDetail) public API_Results InsertJT_TransactionImportDetail(JT_TransactionImportDetail importDetail) { return(InsertRecord <JT_TransactionImportDetail>(importDetail)); }
protected async Task <bool> InsertTransactionImportDetailToRestService(JT_TransactionImportDetail importDetail) { bool result = await _restClient.InsertTransactionImportDetailRecord(importDetail); return(result); }
public void DeleteExportRow(JT_TransactionImportDetail transaction) { _database.Delete <JT_TransactionImportDetail>(transaction.ID); }
public bool InsertJT_TransactionImportDetail([FromBody] JT_TransactionImportDetail importDetail) { return(tdws.InsertJT_TransactionImportDetail(importDetail)); }