From b374ee6d51d3dec4666c424f341f1a41faa81b60 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Fri, 20 Aug 2021 18:21:11 +0000 Subject: [PATCH] --- source/Plugins/AyaNova.Plugin.V8/V8.cs | 522 ++++++++++++++++++------- 1 file changed, 379 insertions(+), 143 deletions(-) diff --git a/source/Plugins/AyaNova.Plugin.V8/V8.cs b/source/Plugins/AyaNova.Plugin.V8/V8.cs index 507f661..ab358a9 100644 --- a/source/Plugins/AyaNova.Plugin.V8/V8.cs +++ b/source/Plugins/AyaNova.Plugin.V8/V8.cs @@ -208,22 +208,27 @@ namespace AyaNova.PlugIn.V8 - private async System.Threading.Tasks.Task Getv7v8IdMap(Guid id, RootObjectTypes desiredType, bool allowPatch = true) + private async System.Threading.Tasks.Task Getv7v8IdMap(Guid id, RootObjectTypes desiredType, bool allowPatch = true, bool doNotFail = true) { if (!V7ToV8IdMap.ContainsKey(id)) { - if (!allowPatch) + if (!allowPatch && !doNotFail) throw new Exception("Error: Getv7v8IdMap (source id: " + id.ToString() + " for type: " + desiredType.ToString() + ") was not found in v7 database and can't be substituted export can not complete until fixed"); - //not found, create a substitute record for it and put it in the map + if (!allowPatch && doNotFail) + return 0; + + //not found, patch allowed, create a substitute record for it and put it in the map await CreateSubstitute(id, desiredType); } return V7ToV8IdMap[id]; } - private async System.Threading.Tasks.Task Getv7v8IdMapNullOk(Guid id, RootObjectTypes desiredType, bool allowPatch = true) + private async System.Threading.Tasks.Task Getv7v8IdMapNullOk(Guid id, RootObjectTypes desiredType, bool allowPatch = true, bool doNotFail = false) { if (id == Guid.Empty) return null; - return await Getv7v8IdMap(id, desiredType, allowPatch); + long l = await Getv7v8IdMap(id, desiredType, allowPatch, doNotFail); + if (l == 0) return null;//this is the no patch no fail path + return l; } @@ -241,6 +246,8 @@ namespace AyaNova.PlugIn.V8 string route = ""; switch (desiredType) { + todo: need every wikiable and attachable and assigndocable object here that is getting exported just do it + //I guess go through export* and find everything exported and if it can have any of the above then it needs to be here for docs/wiki/attachments //set route and make dynamic object case RootObjectTypes.Part: { @@ -255,15 +262,245 @@ namespace AyaNova.PlugIn.V8 case RootObjectTypes.Client: { route = "customer"; + } + break; + case RootObjectTypes.Vendor: + { + route = "vendor"; } break; + case RootObjectTypes.HeadOffice: + { + route = "headoffice"; + + } + break; + case RootObjectTypes.User: + { + route = "user"; + + } + break; + + case RootObjectTypes.Contract: + { + //needs expiry date as well and I guess inactive + route = "contract"; + + } + break; + case RootObjectTypes.Project: + { + route = "project"; + } + break; + case RootObjectTypes.TaxCode: + { + route = "taxcode"; + } + break; + case RootObjectTypes.UnitModel: + { + route = "unit-model"; + } + break; + case RootObjectTypes.Unit: + { + route = "unit"; + } + break; + case RootObjectTypes.WorkOrderStatus:??????? + { + route = "work-order-status";??? + } + break; + case RootObjectTypes.WorkOrderItemPriority:??? + { + route = "work-order-item-priority";??? + } + break; + case RootObjectTypes.PurchaseOrder: + { + route = "purchase-order"; + } + break; + case RootObjectTypes.LoanUnit: + { + route = "loan-unit"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; + case RootObjectTypes.XXXX: + { + route = "YYYYYYY"; + } + break; default: throw new Exception("Error: CreateSubstitute (source id: " + id.ToString() + " for type: " + desiredType.ToString() + ") THIS TYPE NOT CODED YET"); } //post route and dynamic object, insert into map and return - var rMainObject = await util.PostAsync("customer", d.ToString(Formatting.None));//test formatting none, if works then propogate everywhere + var rMainObject = await util.PostAsync("customer", d); long RavenId = util.IdFromResponse(rMainObject); Addv7v8IdMap(id, RavenId); } @@ -715,7 +952,7 @@ namespace AyaNova.PlugIn.V8 if (ShouldExportCustom) d.customFields = CustomFieldData(c, DateCustomFields); - var rMainObject = await util.PostAsync("user", d.ToString()); + var rMainObject = await util.PostAsync("user", d); long RavenId = util.IdFromResponse(rMainObject); Addv7v8IdMap(c.ID, RavenId); @@ -730,7 +967,7 @@ namespace AyaNova.PlugIn.V8 else d.translationId = 1; - await util.PutAsync("user-option/" + RavenId.ToString(), d.ToString()); + await util.PutAsync("user-option/" + RavenId.ToString(), d); //Attachments / FILES @@ -855,17 +1092,17 @@ namespace AyaNova.PlugIn.V8 if (c.VendorID != Guid.Empty) { d.userType = RavenUserType.ServiceContractor; - d.vendorId = Getv7v8IdMap(c.VendorID, "Vendor for subcontractor User " + d.name); + d.vendorId = Getv7v8IdMap(c.VendorID, RootObjectTypes.Vendor); } if (c.ClientID != Guid.Empty) { - d.customerId = Getv7v8IdMap(c.ClientID, "Client for Client type User " + d.name); //Map[c.ClientID]; + d.customerId = Getv7v8IdMap(c.ClientID, RootObjectTypes.Client); } if (c.HeadOfficeID != Guid.Empty) { - d.headOfficeId = Getv7v8IdMap(c.HeadOfficeID, "Headoffice for HeadOffice type User " + d.name); //Map[c.HeadOfficeID]; + d.headOfficeId = Getv7v8IdMap(c.HeadOfficeID, RootObjectTypes.HeadOffice); } @@ -892,7 +1129,7 @@ namespace AyaNova.PlugIn.V8 if (ShouldExportCustom) d.customFields = CustomFieldData(c, DateCustomFields); - var rMainObject = await util.PostAsync("user", d.ToString()); + var rMainObject = await util.PostAsync("user", d); long RavenId = util.IdFromResponse(rMainObject); Addv7v8IdMap(c.ID, RavenId); @@ -907,7 +1144,7 @@ namespace AyaNova.PlugIn.V8 else d.translationId = 1; - await util.PutAsync("user-option/" + RavenId.ToString(), d.ToString()); + await util.PutAsync("user-option/" + RavenId.ToString(), d); //Attachments / FILES @@ -947,9 +1184,9 @@ namespace AyaNova.PlugIn.V8 { if (!progress.KeepGoing) return; User c = User.GetItem(i.ID); - var newId = Getv7v8IdMap(c.ID, "User for event log synchro. " + c.FirstName + " " + c.LastName); //Map[c.ID]; - var creator = SafeGetUserMap(c.Creator); - var modifier = SafeGetUserMap(c.Modifier); + var newId = Getv7v8IdMap(c.ID, RootObjectTypes.User); + var creator = Getv7v8IdMap(c.ID, RootObjectTypes.User);//SafeGetUserMap(c.Creator); + var modifier = Getv7v8IdMap(c.ID, RootObjectTypes.User);//SafeGetUserMap(c.Modifier); await util.EventLog(util.AyaType.User, newId, creator, modifier, c.Created, c.Modified); } @@ -1048,7 +1285,7 @@ namespace AyaNova.PlugIn.V8 if (c.HeadOfficeID != Guid.Empty) { - d.headOfficeId = Getv7v8IdMap(c.HeadOfficeID, "HeadOffice for Client " + d.name); + d.headOfficeId = Getv7v8IdMap(c.HeadOfficeID, RootObjectTypes.HeadOffice); } d.techNotes = c.TechNotes; d.accountNumber = c.AccountNumber; @@ -1058,11 +1295,11 @@ namespace AyaNova.PlugIn.V8 if (c.ContractID != Guid.Empty) { - d.contractId = Getv7v8IdMap(c.ContractID, "Contract for Client " + d.name); + d.contractId = Getv7v8IdMap(c.ContractID, RootObjectTypes.Contract); d.contractExpires = c.ContractExpires; } - //todo d.defaultServiceTemplateId = c.defaultservicetemplateid + d.phone1 = c.Phone1; d.phone2 = c.Phone2; d.phone3 = c.Phone3; @@ -1091,7 +1328,7 @@ namespace AyaNova.PlugIn.V8 if (ShouldExportCustom) d.customFields = CustomFieldData(c, DateCustomFields); - var rMainObject = await util.PostAsync("customer", d.ToString()); + var rMainObject = await util.PostAsync("customer", d); long RavenId = util.IdFromResponse(rMainObject); Addv7v8IdMap(c.ID, RavenId); @@ -1263,7 +1500,7 @@ namespace AyaNova.PlugIn.V8 if (c.ContractID != Guid.Empty) { - d.contractId = Getv7v8IdMap(c.ContractID, "Contract for Head Office " + d.name); + d.contractId = Getv7v8IdMap(c.ContractID, RootObjectTypes.Contract); d.contractExpires = c.ContractExpires; } @@ -1435,13 +1672,11 @@ namespace AyaNova.PlugIn.V8 dynamic dcr = new JObject(); if (RateList[cr.RateID].RateType == RateTypes.Service) { - //dcr.serviceRateId = Getv7v8IdMap(cr.RateID, "ServiceRate for Contract " + d.name); dcr.serviceRateId = await GetRate(false, cr.RateID, true); dServiceRateItems.Add(dcr); } else { - //dcr.travelRateId = Getv7v8IdMap(cr.RateID, "TravelRate for Contract " + d.name); dcr.travelRateId = await GetRate(true, cr.RateID, true); dTravelRateItems.Add(dcr); } @@ -1644,11 +1879,11 @@ namespace AyaNova.PlugIn.V8 d.partNumber = GetUniqueName(c.PartNumber); progress.SubOp(""); progress.Op(ObjectTypeName + " " + d.partNumber + " " + d.name); - d.manufacturerId = Getv7v8IdMapNullOk(c.ManufacturerID); + d.manufacturerId = Getv7v8IdMapNullOk(c.ManufacturerID, RootObjectTypes.Vendor); d.manufacturerNumber = c.ManufacturerNumber; - d.wholeSalerId = Getv7v8IdMapNullOk(c.WholesalerID); + d.wholeSalerId = Getv7v8IdMapNullOk(c.WholesalerID, RootObjectTypes.Vendor); d.wholeSalerNumber = c.WholesalerNumber; - d.alternativeWholeSalerId = Getv7v8IdMapNullOk(c.AlternativeWholesalerID); + d.alternativeWholeSalerId = Getv7v8IdMapNullOk(c.AlternativeWholesalerID, RootObjectTypes.Vendor); d.alternativeWholeSalerNumber = c.AlternativeWholesalerNumber; d.cost = c.Cost; d.retail = c.Retail; @@ -1778,7 +2013,7 @@ namespace AyaNova.PlugIn.V8 foreach (PartList.PartListInfo i in pl) { dynamic ditem = new JObject(); - ditem.partId = Getv7v8IdMap(i.LT_O_Part.Value, "part id for assembly"); + ditem.partId = Getv7v8IdMap(i.LT_O_Part.Value, RootObjectTypes.Part); ditem.partAssemblyId = 0; ditem.quantity = 1; dItems.Add(ditem); @@ -1955,13 +2190,13 @@ namespace AyaNova.PlugIn.V8 _highestPurchaseOrderNumberExported = c.PONumber; d.notes = c.Notes; d.vendorMemo = c.VendorMemo; - d.dropShipToCustomerId = Getv7v8IdMapNullOk(c.DropShipToClientID); + d.dropShipToCustomerId = Getv7v8IdMapNullOk(c.DropShipToClientID, RootObjectTypes.Client); d.referenceNumber = c.ReferenceNumber; - d.vendorId = Getv7v8IdMap(c.VendorID, "Vendor for PO"); + d.vendorId = Getv7v8IdMap(c.VendorID, RootObjectTypes.Vendor); d.orderedDate = util.DateToV8(c.OrderedDate); d.expectedReceiveDate = util.DateToV8(c.ExpectedReceiveDate); d.status = (int)c.Status;//same enum id's so this is kosher - d.projectId = Getv7v8IdMapNullOk(c.ProjectID); + d.projectId = Getv7v8IdMapNullOk(c.ProjectID, RootObjectTypes.Project); StringBuilder sbText1 = new StringBuilder(); StringBuilder sbText2 = new StringBuilder(); @@ -1993,15 +2228,15 @@ namespace AyaNova.PlugIn.V8 dynamic dItem = new JObject(); dItem.purchaseOrderId = 0; - dItem.partId = Getv7v8IdMap(pi.PartID, "part for poitem"); - dItem.partWarehouseId = Getv7v8IdMap(pi.PartWarehouseID, "warehouse for poitem"); + dItem.partId = Getv7v8IdMap(pi.PartID, RootObjectTypes.Part); + dItem.partWarehouseId = Getv7v8IdMap(pi.PartWarehouseID, RootObjectTypes.PartWarehouse); dItem.quantityOrdered = pi.QuantityOrdered; dItem.quantityReceived = pi.QuantityReceived; //dItem.serials = string.Empty; StringBuilder sbSerials = new StringBuilder(); dItem.purchaseOrderCost = pi.PurchaseOrderCost; - dItem.partRequestedById = Getv7v8IdMapNullOk(pi.PartRequestedByID); - dItem.purchaseTaxCodeId = Getv7v8IdMapNullOk(pi.PurchaseTaxCodeID); + dItem.partRequestedById = Getv7v8IdMapNullOk(pi.PartRequestedByID, RootObjectTypes.User); + dItem.purchaseTaxCodeId = Getv7v8IdMapNullOk(pi.PurchaseTaxCodeID, RootObjectTypes.TaxCode); if (pi.WorkorderItemPartRequestID != Guid.Empty) { dItem.vendorPartNumber = pi.WorkorderItemPartRequestID.ToString();//temp holder for guid, not used in v7 so available @@ -2179,12 +2414,11 @@ namespace AyaNova.PlugIn.V8 progress.Op(ObjectTypeName + " " + d.serial); d.active = c.Active; d.notes = c.Notes; - d.customerId = Getv7v8IdMap(c.ClientID, "Client for Unit " + d.serial); - // d.parentUnitId = Getv7v8IdMapNullOk(c.ParentID); - d.unitModelId = Getv7v8IdMapNullOk(c.UnitModelID); + d.customerId = Getv7v8IdMap(c.ClientID, RootObjectTypes.Client); + d.unitModelId = Getv7v8IdMapNullOk(c.UnitModelID, RootObjectTypes.UnitModel); d.unitHasOwnAddress = c.UnitHasOwnAddress; d.boughtHere = c.BoughtHere; - d.purchasedFromVendorId = Getv7v8IdMapNullOk(c.PurchasedFromID); + d.purchasedFromVendorId = Getv7v8IdMapNullOk(c.PurchasedFromID, RootObjectTypes.Vendor); d.receipt = c.Receipt; d.purchasedDate = util.DateToV8(c.PurchasedDate); d.description = c.Description; @@ -2266,13 +2500,13 @@ namespace AyaNova.PlugIn.V8 Unit c = Unit.GetItem(i.ID); if (c.ParentID == Guid.Empty && c.ReplacedByUnitID == Guid.Empty) continue; var ObjectTID = new TypeAndID(RootObjectTypes.Unit, c.ID); - long ThisUnitRavenId = Getv7v8IdMap(c.ID, "Unit for parent / replaced by unit step 2 unit import"); + long ThisUnitRavenId = Getv7v8IdMap(c.ID, RootObjectTypes.Unit); var a = await util.GetAsync("unit/" + ThisUnitRavenId.ToString()); dynamic d = a.ObjectResponse["data"]; progress.Op(ObjectTypeName + " " + d.serial); - d.replacedByUnitId = Getv7v8IdMapNullOk(c.ReplacedByUnitID); - d.parentUnitId = Getv7v8IdMapNullOk(c.ParentID); + d.replacedByUnitId = Getv7v8IdMapNullOk(c.ReplacedByUnitID, RootObjectTypes.Unit); + d.parentUnitId = Getv7v8IdMapNullOk(c.ParentID, RootObjectTypes.Unit); if (d.parentUnitId != null || d.replacedByUnitId != null) await util.PutAsync("unit", d.ToString()); //----- @@ -2330,7 +2564,7 @@ namespace AyaNova.PlugIn.V8 d.active = c.Active; d.notes = c.Notes; if (c.VendorID != Guid.Empty) - d.vendorId = Getv7v8IdMap(c.VendorID, "Vendor for Unit Model"); + d.vendorId = Getv7v8IdMap(c.VendorID, RootObjectTypes.Vendor); d.upc = c.UPC; d.lifeTimeWarranty = c.LifeTimeWarranty; d.introduceDate = util.DateToV8(c.IntroducedDate); @@ -2610,6 +2844,7 @@ namespace AyaNova.PlugIn.V8 } //nope, it's non-existant anywhere if (mustExist) + todo: Used reg getv7 here throw new Exception("Mandatory Rate missing, cannot proceed, last logged item needs to be fixed"); else return null; @@ -2635,7 +2870,7 @@ namespace AyaNova.PlugIn.V8 return ravenId; } //nope, it's non-existant anywhere - if (mustExist) + if (mustExist) todo: Used reg getv7 here throw new Exception("Mandatory Rate missing, cannot proceed, last logged item needs to be fixed"); else return null; @@ -2942,9 +3177,9 @@ namespace AyaNova.PlugIn.V8 d.serial = c.WorkorderService.ServiceNumber; if (c.WorkorderService.ServiceNumber > _highestWorkOrderNumberExported) _highestWorkOrderNumberExported = c.WorkorderService.ServiceNumber; - d.customerId = Getv7v8IdMap(c.ClientID, "Client for wo " + d.serial); + d.customerId = Getv7v8IdMap(c.ClientID, RootObjectTypes.Client); d.notes = c.Summary; - d.projectId = Getv7v8IdMapNullOk(c.ProjectID); + d.projectId = Getv7v8IdMapNullOk(c.ProjectID, RootObjectTypes.Project); d.internalReferenceNumber = c.InternalReferenceNumber; d.customerReferenceNumber = c.CustomerReferenceNumber; d.customerContactName = c.CustomerContactName; @@ -2953,8 +3188,8 @@ namespace AyaNova.PlugIn.V8 d.completeByDate = util.DateToV8(c.WorkorderService.CloseByDate); d.invoiceNumber = c.WorkorderService.InvoiceNumber; d.onsite = c.Onsite; - d.contractId = Getv7v8IdMapNullOk(c.ContractIDResolved()); - d.lastStatusId = Getv7v8IdMapNullOk(c.WorkorderService.WorkorderStatusID); + d.contractId = Getv7v8IdMapNullOk(c.ContractIDResolved(), RootObjectTypes.Contract); + d.lastStatusId = Getv7v8IdMapNullOk(c.WorkorderService.WorkorderStatusID, RootObjectTypes.WorkOrderStatus); wait, shouldn't this use something wostatus specific here instead?? var client = c.uiClient; if (client != null) @@ -3028,9 +3263,9 @@ namespace AyaNova.PlugIn.V8 { dynamic state = new JObject(); state.workOrderId = RavenId; - state.workOrderStatusId = Getv7v8IdMap(c.WorkorderService.WorkorderStatusID, "Workorder status"); + state.workOrderStatusId = Getv7v8IdMap(c.WorkorderService.WorkorderStatusID, RootObjectTypes.WorkOrderStatus); state.created = util.DateToV8(c.Created, true); - state.userId = Getv7v8IdMap(c.Creator, "Workorder creator for status"); + state.userId = Getv7v8IdMap(c.Creator, RootObjectTypes.User); await util.PostAsync("workorder/states", state.ToString()); } if (c.ServiceCompleted) @@ -3039,7 +3274,7 @@ namespace AyaNova.PlugIn.V8 state.workOrderId = RavenId; state.workOrderStatusId = ServiceCompletedWorkOrderStatus; state.created = util.DateToV8(c.Created, true); - state.userId = Getv7v8IdMap(c.Creator, "Workorder creator for status"); + state.userId = Getv7v8IdMap(c.Creator, RootObjectTypes.User); await util.PostAsync("workorder/states", state.ToString()); } if (c.Closed) @@ -3048,7 +3283,7 @@ namespace AyaNova.PlugIn.V8 state.workOrderId = RavenId; state.workOrderStatusId = ClosedWorkOrderStatus; state.created = util.DateToV8(c.Created, true); - state.userId = Getv7v8IdMap(c.Creator, "Workorder creator for status"); + state.userId = Getv7v8IdMap(c.Creator, RootObjectTypes.User); await util.PostAsync("workorder/states", state.ToString()); } } @@ -3070,7 +3305,7 @@ namespace AyaNova.PlugIn.V8 dwi.techNotes = wi.TechNotes; dwi.requestDate = util.DateToV8(wi.RequestDate);//allow empty dates if empty source dwi.workOrderItemStatusId = Getv7v8WorkOrderItemStatusIdNullOk(wi.WorkorderStatusID); - dwi.workOrderItemPriorityId = Getv7v8IdMapNullOk(wi.PriorityID); + dwi.workOrderItemPriorityId = Getv7v8IdMapNullOk(wi.PriorityID, RootObjectTypes.WorkOrderItemPriority); dwi.warrantyService = wi.WarrantyService; @@ -3090,7 +3325,7 @@ namespace AyaNova.PlugIn.V8 { //make sure we have a matching unit already - var ravUnitId = Getv7v8IdMapNullOk(wi.UnitID); + var ravUnitId = Getv7v8IdMapNullOk(wi.UnitID, RootObjectTypes.Unit); if (ravUnitId != null) { //we have a legit unit record, make it for v8 @@ -3115,11 +3350,10 @@ namespace AyaNova.PlugIn.V8 dwisu.workOrderId = RavenId; dwisu.workOrderItemId = ravenwoitemid; //null is ok here for a sched user - dwisu.userId = Getv7v8IdMapNullOk(wisu.UserID); + dwisu.userId = Getv7v8IdMapNullOk(wisu.UserID, RootObjectTypes.User); dwisu.startDate = util.DateToV8(wisu.StartDate); dwisu.stopDate = util.DateToV8(wisu.StopDate); dwisu.estimatedQuantity = wisu.EstimatedQuantity; - //dwisu.serviceRateId = Getv7v8IdMapNullOk(wisu.ServiceRateID); dwisu.serviceRateId = await GetRate(false, wisu.ServiceRateID); await util.PostAsync("workorder/items/scheduled-users", dwisu.ToString()); } @@ -3132,7 +3366,7 @@ namespace AyaNova.PlugIn.V8 dwip.workOrderId = RavenId; dwip.workOrderItemId = ravenwoitemid; dwip.quantity = wip.Quantity; - var tryPartId = Getv7v8IdMapNullOk(wip.PartID); + var tryPartId = Getv7v8IdMapNullOk(wip.PartID, RootObjectTypes.Part); if (tryPartId == null) { dwip.partId = UnknownV7PartId; @@ -3141,8 +3375,8 @@ namespace AyaNova.PlugIn.V8 } else dwip.partId = tryPartId; - dwip.partWarehouseId = Getv7v8IdMap(wip.PartWarehouseID, "warehouse"); - dwip.taxPartSaleId = Getv7v8IdMapNullOk(wip.TaxPartSaleID); + dwip.partWarehouseId = Getv7v8IdMap(wip.PartWarehouseID, RootObjectTypes.PartWarehouse); + dwip.taxPartSaleId = Getv7v8IdMapNullOk(wip.TaxPartSaleID, RootObjectTypes.TaxCode); if (wip.Discount != 0) dwip.priceOverride = wip.Price - (wip.Price * wip.Discount); else @@ -3180,7 +3414,7 @@ namespace AyaNova.PlugIn.V8 //iterate po and look for item with the vendorpartnumber set to this woitempartid by guid string //update the po item with the raven partrequestid //save po - long? v8poid = Getv7v8IdMapNullOk(pto.v7poid); + long? v8poid = Getv7v8IdMapNullOk(pto.v7poid, RootObjectTypes.PurchaseOrder); if (v8poid != null) { var a = await util.GetAsync("purchase-order/" + v8poid.ToString()); @@ -3198,8 +3432,6 @@ namespace AyaNova.PlugIn.V8 } } - //TODO: if migrate purchase orders this is reqd - // dwipr.purchaseOrderItemId = Getv7v8IdMapNullOk(wipr.PurchaseOrderItemID); long v8partrequestid = util.IdFromResponse(await util.PostAsync("workorder/items/part-requests", dwipr.ToString())); //SAVE PO if fetched and updated here @@ -3221,11 +3453,11 @@ namespace AyaNova.PlugIn.V8 dwil.workOrderId = RavenId; dwil.workOrderItemId = ravenwoitemid; - dwil.loanUnitId = Getv7v8IdMap(wil.LoanItemID, "loan unit for workorder"); + dwil.loanUnitId = Getv7v8IdMap(wil.LoanItemID, RootObjectTypes.LoanUnit); dwil.outDate = util.DateToV8(wil.OutDate); dwil.dueDate = util.DateToV8(wil.DueDate); dwil.returnDate = util.DateToV8(wil.ReturnDate); - dwil.taxCodeId = Getv7v8IdMapNullOk(wil.TaxCodeID); + dwil.taxCodeId = Getv7v8IdMapNullOk(wil.TaxCodeID, RootObjectTypes.TaxCode); dwil.quantity = wil.Quantity; switch (wil.Rate) { @@ -3264,13 +3496,13 @@ namespace AyaNova.PlugIn.V8 dwl.workOrderId = RavenId; dwl.workOrderItemId = ravenwoitemid; //null is ok here for user - dwl.userId = Getv7v8IdMapNullOk(wl.UserID); + dwl.userId = Getv7v8IdMapNullOk(wl.UserID, RootObjectTypes.User); dwl.serviceStartDate = util.DateToV8(wl.ServiceStartDate); dwl.serviceStopDate = util.DateToV8(wl.ServiceStopDate); dwl.serviceRateQuantity = wl.ServiceRateQuantity; dwl.noChargeQuantity = wl.NoChargeQuantity; - dwl.taxCodeSaleId = Getv7v8IdMapNullOk(wl.TaxRateSaleID); - dwl.serviceRateId = await GetRate(false, wl.ServiceRateID);//Getv7v8IdMapNullOk(wl.ServiceRateID); + dwl.taxCodeSaleId = Getv7v8IdMapNullOk(wl.TaxRateSaleID, RootObjectTypes.TaxCode); + dwl.serviceRateId = await GetRate(false, wl.ServiceRateID); dwl.serviceDetails = wl.ServiceDetails; await util.PostAsync("workorder/items/labors", dwl.ToString()); @@ -3284,13 +3516,13 @@ namespace AyaNova.PlugIn.V8 dwt.workOrderId = RavenId; dwt.workOrderItemId = ravenwoitemid; //null is ok here for user - dwt.userId = Getv7v8IdMapNullOk(wt.UserID); + dwt.userId = Getv7v8IdMapNullOk(wt.UserID, RootObjectTypes.User); dwt.travelStartDate = util.DateToV8(wt.TravelStartDate); dwt.travelStopDate = util.DateToV8(wt.TravelStopDate); dwt.travelRateQuantity = wt.TravelRateQuantity; dwt.noChargeQuantity = wt.NoChargeQuantity; - dwt.taxCodeSaleId = Getv7v8IdMapNullOk(wt.TaxRateSaleID); - dwt.travelRateId = await GetRate(true, wt.TravelRateID);// Getv7v8IdMapNullOk(wt.TravelRateID); + dwt.taxCodeSaleId = Getv7v8IdMapNullOk(wt.TaxRateSaleID, RootObjectTypes.TaxCode); + dwt.travelRateId = await GetRate(true, wt.TravelRateID); dwt.travelDetails = wt.TravelDetails; dwt.distance = wt.Distance; await util.PostAsync("workorder/items/travels", dwt.ToString()); @@ -3308,11 +3540,7 @@ namespace AyaNova.PlugIn.V8 dwt.sequence = ++nTaskSequence; var task = AllTasks[wt.TaskID]; dwt.task = task.Name; - dwt.status = (int)wt.WorkorderItemTaskCompletionType;//same enum values in v8 - //these two fields don't really exist in v7 so leaving out for now - //but could wing it if necessary for some reason - //dwt.completedByUserId = Getv7v8IdMapNullOk(wt.Modifier); - //dwt.completedDate= + dwt.status = (int)wt.WorkorderItemTaskCompletionType;//same enum values in v8 await util.PostAsync("workorder/items/tasks", dwt.ToString()); } @@ -3328,9 +3556,9 @@ namespace AyaNova.PlugIn.V8 dwe.totalCost = we.TotalCost; dwe.chargeAmount = we.ChargeAmount; dwe.taxPaid = we.TaxPaid; - dwe.chargeTaxCodeId = Getv7v8IdMapNullOk(we.ChargeTaxCodeID); + dwe.chargeTaxCodeId = Getv7v8IdMapNullOk(we.ChargeTaxCodeID, RootObjectTypes.TaxCode); dwe.reimburseUser = we.ReimburseUser; - dwe.userId = Getv7v8IdMapNullOk(we.UserID); + dwe.userId = Getv7v8IdMapNullOk(we.UserID, RootObjectTypes.User); dwe.chargeToCustomer = we.ChargeToClient; await util.PostAsync("workorder/items/expenses", dwe.ToString()); } @@ -3340,7 +3568,7 @@ namespace AyaNova.PlugIn.V8 { //make sure we have a matching unit already - var ravUnitId = Getv7v8IdMapNullOk(wi.UnitID); + var ravUnitId = Getv7v8IdMapNullOk(wi.UnitID, RootObjectTypes.Unit); if (ravUnitId != null) { //we have a legit unit record, make it for v8 @@ -3350,8 +3578,8 @@ namespace AyaNova.PlugIn.V8 dwio.workOrderItemId = ravenwoitemid; dwio.unitId = ravUnitId; dwio.notes = wi.OutsideService.Notes; - dwio.vendorSentToId = Getv7v8IdMapNullOk(wi.OutsideService.VendorSentToID); - dwio.vendorSentViaId = Getv7v8IdMapNullOk(wi.OutsideService.VendorSentViaID); + dwio.vendorSentToId = Getv7v8IdMapNullOk(wi.OutsideService.VendorSentToID, RootObjectTypes.Vendor); + dwio.vendorSentViaId = Getv7v8IdMapNullOk(wi.OutsideService.VendorSentViaID, RootObjectTypes.Vendor); dwio.rMANumber = wi.OutsideService.RMANumber; dwio.trackingNumber = wi.OutsideService.TrackingNumber; dwio.repairCost = wi.OutsideService.RepairCost; @@ -3500,21 +3728,21 @@ namespace AyaNova.PlugIn.V8 d.serial = c.WorkorderQuote.QuoteNumber; if (c.WorkorderQuote.QuoteNumber > _highestQuoteNumberExported) _highestQuoteNumberExported = c.WorkorderQuote.QuoteNumber; - d.customerId = Getv7v8IdMap(c.ClientID, "Client for quote " + d.serial); + d.customerId = Getv7v8IdMap(c.ClientID, RootObjectTypes.Client); d.notes = c.Summary; - d.projectId = Getv7v8IdMapNullOk(c.ProjectID); + d.projectId = Getv7v8IdMapNullOk(c.ProjectID, RootObjectTypes.Project); d.internalReferenceNumber = c.InternalReferenceNumber; d.customerReferenceNumber = c.CustomerReferenceNumber; d.customerContactName = c.CustomerContactName; d.createdDate = util.DateToV8(c.Created, true); - d.preparedById = Getv7v8IdMap(c.WorkorderQuote.PreparedByID, "quote prepared by id"); + d.preparedById = Getv7v8IdMap(c.WorkorderQuote.PreparedByID, RootObjectTypes.User); d.introduction = c.WorkorderQuote.Introduction; d.requested = util.DateToV8(c.WorkorderQuote.QuoteRequestDate); d.validUntil = util.DateToV8(c.WorkorderQuote.ValidUntilDate); d.submitted = util.DateToV8(c.WorkorderQuote.DateSubmitted); d.approved = util.DateToV8(c.WorkorderQuote.DateApproved); - d.contractId = Getv7v8IdMapNullOk(c.ContractIDResolved()); + d.contractId = Getv7v8IdMapNullOk(c.ContractIDResolved(), RootObjectTypes.Contract); d.lastStatusId = (int)c.WorkorderQuote.QuoteStatus; var client = c.uiClient; @@ -3575,7 +3803,7 @@ namespace AyaNova.PlugIn.V8 state.quoteId = RavenId; state.quoteStatusId = (int)c.WorkorderQuote.QuoteStatus; state.created = util.DateToV8(c.Created, true); - state.userId = Getv7v8IdMap(c.Creator, "Quote creator for status"); + state.userId = Getv7v8IdMap(c.Creator, RootObjectTypes.User); await util.PostAsync("quote/states", state.ToString()); } @@ -3599,7 +3827,7 @@ namespace AyaNova.PlugIn.V8 dwi.techNotes = wi.TechNotes; dwi.requestDate = util.DateToV8(wi.RequestDate);//allow empty dates if empty source dwi.workOrderItemStatusId = Getv7v8WorkOrderItemStatusIdNullOk(wi.WorkorderStatusID); - dwi.workOrderItemPriorityId = Getv7v8IdMapNullOk(wi.PriorityID); + dwi.workOrderItemPriorityId = Getv7v8IdMapNullOk(wi.PriorityID, RootObjectTypes.WorkOrderItemPriority); dwi.warrantyService = wi.WarrantyService; @@ -3619,7 +3847,7 @@ namespace AyaNova.PlugIn.V8 { //make sure we have a matching unit already - var ravUnitId = Getv7v8IdMapNullOk(wi.UnitID); + var ravUnitId = Getv7v8IdMapNullOk(wi.UnitID, RootObjectTypes.Unit); if (ravUnitId != null) { //we have a legit unit record, make it for v8 @@ -3644,11 +3872,11 @@ namespace AyaNova.PlugIn.V8 dwisu.quoteId = RavenId; dwisu.quoteItemId = ravenwoitemid; //null is ok here for a sched user - dwisu.userId = Getv7v8IdMapNullOk(wisu.UserID); + dwisu.userId = Getv7v8IdMapNullOk(wisu.UserID, RootObjectTypes.User); dwisu.startDate = util.DateToV8(wisu.StartDate); dwisu.stopDate = util.DateToV8(wisu.StopDate); dwisu.estimatedQuantity = wisu.EstimatedQuantity; - dwisu.serviceRateId = await GetRate(false, wisu.ServiceRateID);//Getv7v8IdMapNullOk(wisu.ServiceRateID); + dwisu.serviceRateId = await GetRate(false, wisu.ServiceRateID); await util.PostAsync("quote/items/scheduled-users", dwisu.ToString()); } @@ -3660,7 +3888,7 @@ namespace AyaNova.PlugIn.V8 dwip.quoteId = RavenId; dwip.quoteItemId = ravenwoitemid; dwip.quantity = wip.Quantity; - var tryPartId = Getv7v8IdMapNullOk(wip.PartID); + var tryPartId = Getv7v8IdMapNullOk(wip.PartID, RootObjectTypes.Part); if (tryPartId == null) { dwip.partId = UnknownV7PartId; @@ -3669,8 +3897,8 @@ namespace AyaNova.PlugIn.V8 } else dwip.partId = tryPartId; - dwip.partWarehouseId = Getv7v8IdMap(wip.PartWarehouseID, "warehouse"); - dwip.taxPartSaleId = Getv7v8IdMapNullOk(wip.TaxPartSaleID); + dwip.partWarehouseId = Getv7v8IdMap(wip.PartWarehouseID, RootObjectTypes.PartWarehouse); + dwip.taxPartSaleId = Getv7v8IdMapNullOk(wip.TaxPartSaleID, RootObjectTypes.TaxCode); if (wip.Discount != 0) dwip.priceOverride = wip.Price - (wip.Price * wip.Discount); else @@ -3693,13 +3921,13 @@ namespace AyaNova.PlugIn.V8 dwl.quoteId = RavenId; dwl.quoteItemId = ravenwoitemid; //null is ok here for user - dwl.userId = Getv7v8IdMapNullOk(wl.UserID); + dwl.userId = Getv7v8IdMapNullOk(wl.UserID, RootObjectTypes.User); dwl.serviceStartDate = util.DateToV8(wl.ServiceStartDate); dwl.serviceStopDate = util.DateToV8(wl.ServiceStopDate); dwl.serviceRateQuantity = wl.ServiceRateQuantity; dwl.noChargeQuantity = wl.NoChargeQuantity; - dwl.taxCodeSaleId = Getv7v8IdMapNullOk(wl.TaxRateSaleID); - dwl.serviceRateId = await GetRate(false, wl.ServiceRateID);//Getv7v8IdMapNullOk(wl.ServiceRateID); + dwl.taxCodeSaleId = Getv7v8IdMapNullOk(wl.TaxRateSaleID, RootObjectTypes.TaxCode); + dwl.serviceRateId = await GetRate(false, wl.ServiceRateID); dwl.serviceDetails = wl.ServiceDetails; await util.PostAsync("quote/items/labors", dwl.ToString()); @@ -3713,13 +3941,13 @@ namespace AyaNova.PlugIn.V8 dwt.quoteId = RavenId; dwt.quoteItemId = ravenwoitemid; //null is ok here for user - dwt.userId = Getv7v8IdMapNullOk(wt.UserID); + dwt.userId = Getv7v8IdMapNullOk(wt.UserID, RootObjectTypes.User); dwt.travelStartDate = util.DateToV8(wt.TravelStartDate); dwt.travelStopDate = util.DateToV8(wt.TravelStopDate); dwt.travelRateQuantity = wt.TravelRateQuantity; dwt.noChargeQuantity = wt.NoChargeQuantity; - dwt.taxCodeSaleId = Getv7v8IdMapNullOk(wt.TaxRateSaleID); - dwt.travelRateId = await GetRate(true, wt.TravelRateID);//Getv7v8IdMapNullOk(wt.TravelRateID); + dwt.taxCodeSaleId = Getv7v8IdMapNullOk(wt.TaxRateSaleID, RootObjectTypes.TaxCode); + dwt.travelRateId = await GetRate(true, wt.TravelRateID); dwt.travelDetails = wt.TravelDetails; dwt.distance = wt.Distance; await util.PostAsync("quote/items/travels", dwt.ToString()); @@ -3737,11 +3965,7 @@ namespace AyaNova.PlugIn.V8 dwt.sequence = ++nTaskSequence; var task = AllTasks[wt.TaskID]; dwt.task = task.Name; - dwt.status = (int)wt.WorkorderItemTaskCompletionType;//same enum values in v8 - //these two fields don't really exist in v7 so leaving out for now - //but could wing it if necessary for some reason - //dwt.completedByUserId = Getv7v8IdMapNullOk(wt.Modifier); - //dwt.completedDate= + dwt.status = (int)wt.WorkorderItemTaskCompletionType;//same enum values in v8 await util.PostAsync("quote/items/tasks", dwt.ToString()); } @@ -3810,14 +4034,14 @@ namespace AyaNova.PlugIn.V8 d.serial = c.WorkorderPreventiveMaintenance.PreventiveMaintenanceNumber; if (c.WorkorderPreventiveMaintenance.PreventiveMaintenanceNumber > _highestPMNumberExported) _highestPMNumberExported = c.WorkorderPreventiveMaintenance.PreventiveMaintenanceNumber; - d.customerId = Getv7v8IdMap(c.ClientID, "Client for pm " + d.serial); + d.customerId = Getv7v8IdMap(c.ClientID, RootObjectTypes.Client); d.notes = c.Summary; - d.projectId = Getv7v8IdMapNullOk(c.ProjectID); + d.projectId = Getv7v8IdMapNullOk(c.ProjectID, RootObjectTypes.Project); d.internalReferenceNumber = c.InternalReferenceNumber; d.customerReferenceNumber = c.CustomerReferenceNumber; d.customerContactName = c.CustomerContactName; d.createdDate = util.DateToV8(c.Created, true); - d.contractId = Getv7v8IdMapNullOk(c.ContractIDResolved()); + d.contractId = Getv7v8IdMapNullOk(c.ContractIDResolved(), RootObjectTypes.Contract); //PM specific fields d.copyWiki = false; @@ -3952,7 +4176,7 @@ namespace AyaNova.PlugIn.V8 dwi.techNotes = wi.TechNotes; dwi.requestDate = util.DateToV8(wi.RequestDate);//allow empty dates if empty source dwi.workOrderItemStatusId = Getv7v8WorkOrderItemStatusIdNullOk(wi.WorkorderStatusID); - dwi.workOrderItemPriorityId = Getv7v8IdMapNullOk(wi.PriorityID); + dwi.workOrderItemPriorityId = Getv7v8IdMapNullOk(wi.PriorityID, RootObjectTypes.WorkOrderItemPriority); dwi.warrantyService = wi.WarrantyService; @@ -3972,7 +4196,7 @@ namespace AyaNova.PlugIn.V8 { //make sure we have a matching unit already - var ravUnitId = Getv7v8IdMapNullOk(wi.UnitID); + var ravUnitId = Getv7v8IdMapNullOk(wi.UnitID, RootObjectTypes.Unit); if (ravUnitId != null) { //we have a legit unit record, make it for v8 @@ -3997,11 +4221,11 @@ namespace AyaNova.PlugIn.V8 dwisu.pmId = RavenId; dwisu.pmItemId = ravenwoitemid; //null is ok here for a sched user - dwisu.userId = Getv7v8IdMapNullOk(wisu.UserID); + dwisu.userId = Getv7v8IdMapNullOk(wisu.UserID, RootObjectTypes.User); dwisu.startDate = util.DateToV8(wisu.StartDate); dwisu.stopDate = util.DateToV8(wisu.StopDate); dwisu.estimatedQuantity = wisu.EstimatedQuantity; - dwisu.serviceRateId = await GetRate(false, wisu.ServiceRateID);//Getv7v8IdMapNullOk(wisu.ServiceRateID); + dwisu.serviceRateId = await GetRate(false, wisu.ServiceRateID); await util.PostAsync("pm/items/scheduled-users", dwisu.ToString()); } @@ -4013,7 +4237,7 @@ namespace AyaNova.PlugIn.V8 dwip.pmId = RavenId; dwip.pmItemId = ravenwoitemid; dwip.quantity = wip.Quantity; - var tryPartId = Getv7v8IdMapNullOk(wip.PartID); + var tryPartId = Getv7v8IdMapNullOk(wip.PartID, RootObjectTypes.Part); if (tryPartId == null) { dwip.partId = UnknownV7PartId; @@ -4022,8 +4246,8 @@ namespace AyaNova.PlugIn.V8 } else dwip.partId = tryPartId; - dwip.partWarehouseId = Getv7v8IdMap(wip.PartWarehouseID, "warehouse"); - dwip.taxPartSaleId = Getv7v8IdMapNullOk(wip.TaxPartSaleID); + dwip.partWarehouseId = Getv7v8IdMap(wip.PartWarehouseID, RootObjectTypes.PartWarehouse); + dwip.taxPartSaleId = Getv7v8IdMapNullOk(wip.TaxPartSaleID, RootObjectTypes.TaxCode); if (wip.Discount != 0) dwip.priceOverride = wip.Price - (wip.Price * wip.Discount); else @@ -4046,13 +4270,13 @@ namespace AyaNova.PlugIn.V8 dwl.pmId = RavenId; dwl.pmItemId = ravenwoitemid; //null is ok here for user - dwl.userId = Getv7v8IdMapNullOk(wl.UserID); + dwl.userId = Getv7v8IdMapNullOk(wl.UserID, RootObjectTypes.User); dwl.serviceStartDate = util.DateToV8(wl.ServiceStartDate); dwl.serviceStopDate = util.DateToV8(wl.ServiceStopDate); dwl.serviceRateQuantity = wl.ServiceRateQuantity; dwl.noChargeQuantity = wl.NoChargeQuantity; - dwl.taxCodeSaleId = Getv7v8IdMapNullOk(wl.TaxRateSaleID); - dwl.serviceRateId = await GetRate(false, wl.ServiceRateID);//Getv7v8IdMapNullOk(wl.ServiceRateID); + dwl.taxCodeSaleId = Getv7v8IdMapNullOk(wl.TaxRateSaleID, RootObjectTypes.TaxCode); + dwl.serviceRateId = await GetRate(false, wl.ServiceRateID); dwl.serviceDetails = wl.ServiceDetails; await util.PostAsync("pm/items/labors", dwl.ToString()); @@ -4066,13 +4290,13 @@ namespace AyaNova.PlugIn.V8 dwt.pmId = RavenId; dwt.pmItemId = ravenwoitemid; //null is ok here for user - dwt.userId = Getv7v8IdMapNullOk(wt.UserID); + dwt.userId = Getv7v8IdMapNullOk(wt.UserID, RootObjectTypes.User); dwt.travelStartDate = util.DateToV8(wt.TravelStartDate); dwt.travelStopDate = util.DateToV8(wt.TravelStopDate); dwt.travelRateQuantity = wt.TravelRateQuantity; dwt.noChargeQuantity = wt.NoChargeQuantity; - dwt.taxCodeSaleId = Getv7v8IdMapNullOk(wt.TaxRateSaleID); - dwt.travelRateId = await GetRate(true, wt.TravelRateID);//Getv7v8IdMapNullOk(wt.TravelRateID); + dwt.taxCodeSaleId = Getv7v8IdMapNullOk(wt.TaxRateSaleID, RootObjectTypes.TaxCode); + dwt.travelRateId = await GetRate(true, wt.TravelRateID); dwt.travelDetails = wt.TravelDetails; dwt.distance = wt.Distance; await util.PostAsync("pm/items/travels", dwt.ToString()); @@ -4090,15 +4314,10 @@ namespace AyaNova.PlugIn.V8 dwt.sequence = ++nTaskSequence; var task = AllTasks[wt.TaskID]; dwt.task = task.Name; - dwt.status = (int)wt.WorkorderItemTaskCompletionType;//same enum values in v8 - //these two fields don't really exist in v7 so leaving out for now - //but could wing it if necessary for some reason - //dwt.completedByUserId = Getv7v8IdMapNullOk(wt.Modifier); - //dwt.completedDate= + dwt.status = (int)wt.WorkorderItemTaskCompletionType;//same enum values in v8 await util.PostAsync("pm/items/tasks", dwt.ToString()); } - }//items loop }//wo loop @@ -4360,9 +4579,9 @@ namespace AyaNova.PlugIn.V8 else d.notes = c.Details; d.dateRequested = util.DateToV8(c.Created, true); - d.customerId = Getv7v8IdMap(c.ClientID, "Client for CSR"); - d.unitId = Getv7v8IdMapNullOk(c.UnitID); - d.workOrderItemId = Getv7v8IdMapNullOk(c.WorkorderItemID); + d.customerId = Getv7v8IdMap(c.ClientID, RootObjectTypes.Customer); + d.unitId = Getv7v8IdMapNullOk(c.UnitID, RootObjectTypes.Unit); + d.workOrderItemId = Getv7v8IdMapNullOk(c.WorkorderItemID, RootObjectTypes.WorkOrderItem, false, false); d.requestedByUserId = SafeGetUserMap(c.Creator);//creator should always be a 'outside' user account d.customerReferenceNumber = c.ClientRef; d.priority = (int)c.Priority;//same int value @@ -4415,7 +4634,7 @@ namespace AyaNova.PlugIn.V8 { progress.SubOp("sync part " + i.Name); PartInventoryList v7inv = PartInventoryList.GetListForSingleItem(i.ID); - long v8PartId = Getv7v8IdMap(i.ID, "part id for synchronize inventory"); + long v8PartId = Getv7v8IdMap(i.ID, RootObjectTypes.Part); JObject v8inv = (await util.GetAsync("part/latest-inventory/" + v8PartId)).ObjectResponse; //iterate v8 inventory foreach (JObject v8o in v8inv["data"]) @@ -4426,7 +4645,7 @@ namespace AyaNova.PlugIn.V8 decimal v8OnHand = (decimal)v8o["balance"]; foreach (PartInventoryList.PartInventoryListInfo v7o in v7inv) { - long whsv7tov8id = Getv7v8IdMap(v7o.LT_O_PartWarehouse.Value, "whs for inv sync"); + long whsv7tov8id = Getv7v8IdMap(v7o.LT_O_PartWarehouse.Value, RootObjectTypes.PartWarehouse); if (whsv7tov8id == (long)v8o["partWarehouseId"]) { //this is the match, do the fixup @@ -5274,14 +5493,17 @@ namespace AyaNova.PlugIn.V8 //Form data like the bizobject type and id string RavenTypeAsString = ""; - if (specificRavenType != util.AyaType.NoType) - RavenTypeAsString = ((int)specificRavenType).ToString(); - else - RavenTypeAsString = ((int)util.RootObjectToAyaType(tid.RootObjectType)).ToString(); + int ravenType = 0;//notype is default for orphaned objects + long v8Id = Getv7v8IdMap(tid.ID, tid.RootObjectType, false, true);//default to 0 id if no match which is good for raven as it puts it into a list users can deal with in UI + if (v8Id != 0) + { + if (specificRavenType != util.AyaType.NoType) + RavenTypeAsString = ((int)specificRavenType).ToString(); + else + RavenTypeAsString = ((int)util.RootObjectToAyaType(tid.RootObjectType)).ToString(); + } formDataContent.Add(new StringContent(RavenTypeAsString), name: "AttachToAType"); - - //formDataContent.Add(new StringContent(Map[tid.ID].ToString()), name: "AttachToObjectId"); - formDataContent.Add(new StringContent(Getv7v8IdMap(tid.ID, "Object ID for attachment export (tid:" + tid.ToString() + ") ").ToString()), name: "AttachToObjectId"); + formDataContent.Add(new StringContent(v8Id.ToString()), name: "AttachToObjectId"); formDataContent.Add(new StringContent(ImportTag), name: "Notes"); formDataContent.Add(new StringContent(dFileData.ToString()), name: "FileData"); @@ -5373,14 +5595,28 @@ namespace AyaNova.PlugIn.V8 MultipartFormDataContent formDataContent = new MultipartFormDataContent(); //Form data like the bizobject type and id - string RavenTypeAsString = ""; - if (specificRavenType != util.AyaType.NoType) - RavenTypeAsString = ((int)specificRavenType).ToString(); - else - RavenTypeAsString = ((int)util.RootObjectToAyaType(tid.RootObjectType)).ToString(); + + + string RavenTypeAsString = ""; + int ravenType = 0;//notype is default for orphaned objects + long v8Id = Getv7v8IdMap(tid.ID, tid.RootObjectType, false, true);//default to 0 id if no match which is good for raven as it puts it into a list users can deal with in UI + if (v8Id != 0) + { + if (specificRavenType != util.AyaType.NoType) + RavenTypeAsString = ((int)specificRavenType).ToString(); + else + RavenTypeAsString = ((int)util.RootObjectToAyaType(tid.RootObjectType)).ToString(); + } + + + // string RavenTypeAsString = ""; + // if (specificRavenType != util.AyaType.NoType) + // RavenTypeAsString = ((int)specificRavenType).ToString(); + // else + // RavenTypeAsString = ((int)util.RootObjectToAyaType(tid.RootObjectType)).ToString(); formDataContent.Add(new StringContent(RavenTypeAsString), name: "AttachToAType"); // formDataContent.Add(new StringContent(Map[tid.ID].ToString()), name: "AttachToObjectId"); - formDataContent.Add(new StringContent(Getv7v8IdMap(tid.ID, "Object ID for attached docs export (tid:" + tid.ToString() + ") ").ToString()), name: "AttachToObjectId"); + formDataContent.Add(new StringContent(v8Id.ToString()), name: "AttachToObjectId"); @@ -5426,7 +5662,7 @@ namespace AyaNova.PlugIn.V8 MatchCollection mc = AyaBizUtils.rxAyaImageTags.Matches(content); foreach (Match m in mc) { - var RavenId = Getv7v8IdMap(new Guid(m.Groups["guid"].Value), "Object id for Wiki export (tid:" + tid.ToString() + ")"); //Map[new Guid(m.Groups["guid"].Value)]; + var RavenId = Getv7v8IdMap(new Guid(m.Groups["guid"].Value), tid.Type); ??//Map[new Guid(m.Groups["guid"].Value)]; content = content.Replace(m.Value, ""); }