Files
bodyshop-uploader/BodyshopUploader/Utils/ARMSRoData.cs
2022-02-08 14:31:39 -08:00

252 lines
9.2 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using FileHelpers;
using GraphQL;
namespace BodyshopPartner.Utils
{
public static class ARMSRoData
{
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
private static string ArmsRoDataQuery = @"
query ENTEGRAL_EXPORT($bodyshopid: uuid!, $start: timestamptz!, $end: timestamptz!) {
jobs(where: {_and: [{_or: [{inproduction: {_eq: true}}, {_and: [{actual_completion: {_gte: $start}}, {actual_completion: {_lte: $end}}]}]}, {shopid: {_eq: $bodyshopid}}]}) {
joblines {
id
line_ind
}
id
ro_number
status
asgn_date
date_open
kmin
scheduled_completion
actual_completion
actual_delivery
date_exported
actual_in
ins_co_nm
ins_addr1
ins_addr2
ins_city
ins_st
ins_zip
ins_ctry
ins_ph1
ins_ph2
est_ct_ln
est_ct_fn
insd_fn
insd_ln
ownr_fn
ownr_ln
ownr_co_nm
ownr_addr1
ownr_addr2
ownr_city
ownr_st
ownr_zip
ownr_ctry
ownr_ph1
ownr_ph2
ownr_ea
clm_ct_fn
clm_ct_ln
v_vin
kmin
plate_no
v_model_yr
v_make_desc
v_model_desc
v_color
driveable
clm_no
policy_no
loss_date
area_of_damage
tlos_ind
parts_tax_rates
federal_tax_rate
state_tax_rate
rate_la1
rate_la2
rate_la3
rate_la4
rate_laa
rate_lab
rate_lad
rate_lae
rate_laf
rate_lag
rate_lam
rate_lar
rate_las
rate_lau
rate_ma2s
rate_ma2t
rate_ma3s
rate_mabl
rate_macs
rate_mahw
rate_mapa
rate_mash
rate_matd
job_totals
ded_amt
cieca_ttl
adjustment_bottom_line
employee_body_rel {
employee_number
first_name
last_name
}
employee_refinish_rel {
employee_number
first_name
last_name
}
}
bodyshops_by_pk(id: $bodyshopid) {
id
entegral_id
shopname
md_ro_statuses
}
}
";
public static async Task GenerateArmsROData()
{
logger.Debug("Generating ARMS Info.");
try
{
FileHelperEngine<ARMSRoDataModel> engine = new FileHelperEngine<ARMSRoDataModel>();
var r = new GraphQLRequest
{
Query = ArmsRoDataQuery,
Variables = new
{
start = DateTime.Now.Date.AddDays(-30),
end = DateTime.Now.Date,
bodyshopid = AppMetaData.ActiveShopId
}
};
var data = await Utils.GraphQL.ExecuteQuery(r);
var RepairOrders = new List<ARMSRoDataModel>();
Regex ROStripper = new Regex(@"\d");
foreach (dynamic job in data.jobs)
{
logger.Debug(job.ro_number);
var RoNumber = string.Join("", Regex.Matches((string)(job.ro_number?.Value), @"\d").OfType<Match>().Select(m => m.Value));
var VehicleYr = string.Join("", Regex.Matches((string)(job.v_model_yr?.Value ?? ""), @"\d").OfType<Match>().Select(m => m.Value));
RepairOrders.Add(new ARMSRoDataModel()
{
ShopShortName = data.bodyshops_by_pk.entegral_id?.Value,
RO = int.Parse(RoNumber),
TransType = job.actual_completion?.Value == null ? "Z" : "C", //TODO*** Finish this status mapping.
ShopLongName = data.bodyshops_by_pk.shopname?.Value,
EstimatorID = job.est_ct_ln,
EstimatorName = $"{job.est_ct_fn} {job.est_ct_ln}",
BodymanID = job.employee_body_rel?.Value == null ? "" : job.employee_body_rel?.employee_number?.Value,
CustomerFirstName = job.ownr_fn?.Value,
CustomerLastName = job.ownr_ln?.Value,
CustomerStreet = job.ownr_addr1?.Value,
CustomerCity = job.ownr_city?.Value,
CustomerState = job.ownr_st?.Value,
CustomerZip = job.ownr_zip?.Value,
CustomerPhone1 = job.ownr_ph1?.Value,
CustomerPhone2 = job.ownr_ph2?.Value,
//RetWhslCustomer = "R",
Year = VehicleYr != "" ? int.Parse(VehicleYr) : 0, //TODO STRIP TO 2 NUMBERS
Make = job.v_make_desc?.Value,
Model = job.v_model_desc?.Value,
VIN = job.v_vin?.Value,
License = job.plate_no?.Value,
MileageIn = job.kim ?? 0,
CompanyName = job.ins_co_nm?.Value,
InsuranceAddress = job.ins_addr1?.Value,
InsuranceCity = job.ins_city?.Value,
InsuranceState = job.ins_st?.Value,
InsuranceZip = job.ins_zip?.Value,
ClaimType = "N/A",
Claim = job.clm_no?.Value,
DateOpened = job.date_open?.Value,// ? job.date_open : null,
EstComplete = job.date_open?.Value,
//DateofLoss = job.loss_date?.Value,// ? job.loss_date : null,
PromiseDate = job.scheduled_completion,
CarComplete = job.actual_completion,
CarinShop = job.actual_in,
CustPickup = job.actual_delivery,
DateClosed = job.date_invoiced,
BodyRate = job.rate_lab,
RefinishRate = job.rate_lar,
MechanicalRate = job.rate_lam,
StructuralRate = job.rate_las,
PMRate = job.rate_mapa,
BMRate = job.rate_mash,
RevisedTotalsBodyHours = (Decimal?)job.job_totals?.rates?.lab?.hours?.Value,
RevisedTotalsRefinishHours = (Decimal?)job.job_totals?.rates?.lar?.hours?.Value,
RevisedTotalsMechanicalHours = (Decimal?)job.job_totals?.rates?.lam?.hours?.Value,
RevisedTotalsStructuralHours = (Decimal?)job.job_totals?.rates?.las?.hours?.Value,
RevisedTotalsPartsTotal = ((Decimal?)job.job_totals?.parts?.parts?.total?.amount?.Value) / 100,
RevisedTotalsSubletTotal = ((Decimal?)job.job_totals?.parts?.sublets?.total?.amount?.Value) / 100,
RevisedTotalsBodyLaborTotal = ((Decimal?)job.job_totals?.rates?.lab?.total?.amount?.Value) / 100,
RevisedTotalsRefinishLaborTotal = ((Decimal?)job.job_totals?.rates?.lar?.total?.amount?.Value) / 100,
RevisedTotalsMechanicalLaborTotal = ((Decimal?)job.job_totals?.rates?.lam?.total?.amount?.Value) / 100,
RevisedTotalsStructuralLaborTotal = ((Decimal?)job.job_totals?.rates?.las?.total?.amount?.Value) / 100,
RevisedTotalsPMTotal = ((Decimal?)job.job_totals?.rates?.mapa?.total?.amount?.Value) / 100,
RevisedTotalsBMTotal = ((Decimal?)job.job_totals?.rates?.mash?.total?.amount?.Value) / 100,
RevisedTotalsSalesTaxTotal = ((Decimal?)(job.job_totals?.totals?.federal_tax?.amount?.Value + job.job_totals?.totals?.state_tax?.amount?.Value)) / 100,
RevisedTotalsGrossTotal = ((Decimal?)job.job_totals?.totals?.total_repairs?.amount?.Value) / 100,
RevisedTotalsDeductibleTotal = (Decimal?)job.ded_amt?.Value,
// RevisedTotalsDepreciationTotal = job.job_totals?.rates?.lab?.hours?.Value,
TotalLossYN = job.tlos_ind,
BodyTechName = job.employee_body_rel?.Value == null ? "" : $"{job.employee_body_rel?.first_name?.Value} {job.employee_body_rel?.last_name?.Value}",
Vehiclecolor = job.v_color?.Value,
PaintTechID = job.employee_refinish_rel?.Value == null ? "" : job.employee_refinish_rel?.employee_number?.Value,
PaintTechName = job.employee_refinish_rel?.Value == null ? "" : $"{job.employee_refinish_rel?.first_name?.Value} {job.employee_refinish_rel?.last_name?.Value}",
ProductionStageCode = (job.actual_delivery?.Value != null || job.date_invoiced != null) ? "8D" : "33",
Vehiclescheduledindate = job.scheduled_in?.Value
});
}
Directory.CreateDirectory(Properties.Settings.Default.ArmsExportPath);
engine.WriteFile($"{Properties.Settings.Default.ArmsExportPath}\\{DateTime.Now.ToString("MMdd")}{data.bodyshops_by_pk.entegral_id?.Value}.txt", RepairOrders);
}
catch (Exception ex)
{
logger.Error(ex, "Exception while creating ARMS RO Data Extract: ");
}
}
}
}