예제 #1
0
        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}");
            }
        }
예제 #2
0
        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();
        }