internal static async Task CreateAndUpdateJobCostRevenue(HttpClient httpClient, List <Vendor> vendor, List <Suddath.Helix.JobMgmt.Services.Water.DbContext.PaymentReceived> paymentReceived, List <BillableItemType> billableItemTypes, int jobId, ServiceOrder serviceOrder, string regNumber) { try { Console.WriteLine("Starting JC Revenue creation"); Trace.WriteLine($"{regNumber}, , Starting JC Revenue creation"); var url = $"/{jobId}/superServices/orders/{serviceOrder.SuperServiceOrderId}/billableItems"; int invoiceCounter = 0; foreach (var legacyJC in paymentReceived) { var original = await PostToJobsApi <CreateBillableItemResponse>(httpClient, url, null, regNumber); //wipe out any defaulting of bill to information JobsDbAccess.CleanBillToInformation(original.Id, regNumber); var originalString = await CallJobsApi(httpClient, url + $"/{original.Id}", null); var duplicateObjString = originalString; var originalObj = Convert <SingleResult <GetBillableItemResponse> >(originalString, regNumber).Data; var modifiedObj = Convert <SingleResult <GetBillableItemResponse> >(duplicateObjString, regNumber).Data; if (!string.IsNullOrEmpty(legacyJC.ACCOUNT_CODE)) { var billItemType = billableItemTypes.FirstOrDefault(bi => bi.AccountCode.Equals(legacyJC.ACCOUNT_CODE.Substring(0, 2))); modifiedObj.BillableItemTypeId = billItemType.Id; Trace.WriteLine($"{regNumber}, , Found the closest match for the accountcode {legacyJC.ACCOUNT_CODE.Substring(0, 2) } to {billItemType.BillableItemTypeName}"); } modifiedObj.Description = legacyJC.ACCOUNT_DESCRIPTION; if (modifiedObj.BillToId != legacyJC.VendorID) { modifiedObj.BillToId = legacyJC.VendorID; modifiedObj.BillToType = legacyJC.BillToLabel; } modifiedObj.AccrualAmountUSD = modifiedObj.AccrualAmountBillingCurrency = legacyJC.ESTIMATED_AMOUNT.GetValueOrDefault() + legacyJC.ADJ_EST_AMOUNT.GetValueOrDefault(); modifiedObj.ActualAmountUSD = modifiedObj.ActualAmountBillingCurrency = legacyJC.AMOUNT.GetValueOrDefault(); modifiedObj.ActualPostedDateTime = legacyJC.ACTUAL_POSTED; await GenerateAndPatch(httpClient, url + $"/{original.Id}", originalObj, modifiedObj); if (legacyJC.DATE_RECEIVED != null) { await JobsDbAccess.CreateInvoiceRecord(original.Id, regNumber, string.Empty, legacyJC.INVOICE_NUMBER + "-" + ++invoiceCounter, legacyJC.DATE_RECEIVED, legacyJC.ACTUAL_POSTED, serviceOrder.SuperServiceOrderId); Trace.WriteLine($"{regNumber}, , Changing InvoiceNumber because duplicates could be there Orig: {legacyJC.INVOICE_NUMBER} - New: {legacyJC.INVOICE_NUMBER + "-" + invoiceCounter}"); } } } catch (Exception ex) { Console.WriteLine("Error while updating JC Revenue section"); Trace.WriteLine($"{regNumber}, , Error while updating JC Revenue section"); Trace.WriteLine($"{regNumber}, , {ex.Message}"); } }
private static async Task Main(string[] args) { loadAllRecords = true; SetConsoleWriteLine(); SetMovesToImport(loadAllRecords); await RetrieveJobsAccountAndVendor(); Trace.WriteLine($"GMMS REG Number, Arive Job# , Log text "); int counter = 0; var jobId = 0; //Normal Import foreach (var regNumber in movesToImport) { try { Console.WriteLine("-----------------------------------------------------------------------------------"); Console.WriteLine($"Processing { ++counter} records of {movesToImport.Count} to import"); Trace.WriteLine($"{regNumber}, , "); Trace.WriteLine($"{regNumber}, , -----------------------------------------------------------------------------------"); await SungateApi.setApiAccessTokenAsync(_httpClient); var move = await WaterDbAccess.RetrieveWaterRecords(regNumber); if (move == null) { continue; } //Add the job jobId = await addStorageJob(move, regNumber); //update datecreated on the job JobsDbAccess.ChangeDateCreated(jobId, move.DateEntered.GetValueOrDefault(DateTime.UtcNow), regNumber); //Add JobContacts await addJobContacts(move, jobId, regNumber); //Add SuperService var result = await JobsApi.CreateStorageSSO(_httpClient, jobId, regNumber); var ssoId = result.Id; var serviceOrders = await JobsDbAccess.GetServiceOrderForJobs(jobId, regNumber); // ORIGIN var oaVendor = _vendor.Find(v => v.Accounting_SI_Code.Equals(move.OriginAgent.VendorNameId)); await JobsApi.UpdateOriginMilestone(_httpClient, serviceOrders.FirstOrDefault(so => so.ServiceId == 24).Id, oaVendor, move, jobId, regNumber); // DESTINATION var daVendor = _vendor.Find(v => v.Accounting_SI_Code.Equals(move.DestinationAgent.VendorNameId)); await JobsApi.UpdateDestinationMilestone(_httpClient, serviceOrders.FirstOrDefault(so => so.ServiceId == 26).Id, daVendor, move, jobId, regNumber); var legacyInsuranceClaims = await WaterDbAccess.RetrieveInsuranceClaims(move.RegNumber); // STORAGE var transfereeEntity = await JobsDbAccess.GetJobsTransfereeId(jobId); await updateStorageJob(move, jobId, serviceOrders, regNumber, transfereeEntity, legacyInsuranceClaims, ssoId); // INSURANCE await JobsApi.UpdateICtMilestone(_httpClient, serviceOrders.FirstOrDefault(so => so.ServiceId == 27).Id, move, jobId, legacyInsuranceClaims, regNumber); #region JobCost var superServiceOrderId = serviceOrders.FirstOrDefault(so => so.ServiceId == 29).SuperServiceOrderId; try { if (move.READY_TO_ACCRUE_DATE != null) { await JobsDbAccess.LockJC(jobId, regNumber, superServiceOrderId, move.READY_TO_ACCRUE_DATE.Value); await JobsDbAccess.MarkAsPosted(superServiceOrderId, DateTime.Now, true, regNumber, move.ACCRUED_DATE); //await JobsDbAccess.MarkAllAsVoid(superServiceOrderId, regNumber); } } catch (Exception ex) { Console.WriteLine("Error while trying to change JC status manually"); Trace.WriteLine($"{regNumber}, , Error while trying to change JC status manually"); Trace.WriteLine($"{regNumber}, , {ex.Message}"); } #endregion JobCost //Add Notes await AddNotesFromGmmsToArive(move, jobId, regNumber); //Add Prompts await AddPromptsFromGmmsToArive(move, jobId, regNumber); decimal percentage = (decimal)(counter * 100) / movesToImport.Count; Console.WriteLine($"{ Math.Round(percentage, 2)}% Completed "); Trace.WriteLine($"{regNumber}, , EndTime: {DateTime.Now}"); } catch (Exception ex) { Trace.WriteLine($"{regNumber}, , *** ERROR ***"); if (ex.InnerException != null) { Trace.WriteLine($"{regNumber}, , {ex.InnerException.Message}"); } else { Trace.WriteLine($"{regNumber}, , {ex.Message}"); } Console.WriteLine($"**** ERROR ****"); Console.WriteLine($"{ex.Message}"); } Trace.Flush(); } //Remove Prompts from MigrationScript TaskDbAccess.RemovePrompts(); }