startetd meintenance plan instert

This commit is contained in:
Rene Kaßeböhmer
2025-06-18 14:44:21 +02:00
parent b675a38baf
commit 39fb8a759b
6 changed files with 250 additions and 8 deletions

View File

@ -0,0 +1,16 @@
PicklistValue.SCQualificationSpecification__c.ProductUnitClass.00 (standard)
PicklistValue.SCQualificationSpecification__c.ProductUnitClass.01 WHB
PicklistValue.SCQualificationSpecification__c.ProductUnitClass.02 FSB GAS
PicklistValue.SCQualificationSpecification__c.ProductUnitClass.03 FSB OTHER
PicklistValue.SCQualificationSpecification__c.ProductUnitClass.04 GAS INSTANTANEOUS
PicklistValue.SCQualificationSpecification__c.ProductUnitClass.05 STORAGE
PicklistValue.SCQualificationSpecification__c.ProductUnitClass.06 ELECTRO WATER HEATERS
PicklistValue.SCQualificationSpecification__c.ProductUnitClass.07 REGENERATIVE ENERGY
PicklistValue.SCQualificationSpecification__c.ProductUnitClass.08 AIR CONDITIONING
PicklistValue.SCQualificationSpecification__c.ProductUnitClass.10 SYSTEM COMPONENTS
PicklistValue.SCQualificationSpecification__c.ProductUnitClass.11 ELECTRICAL APPLIANCES
PicklistValue.SCQualificationSpecification__c.ProductUnitClass.12 MCHP (MICRO COMBINED HEAT AND POWER)
PicklistValue.SCQualificationSpecification__c.ProductUnitClass.13 HEATING SATELLITES
PicklistValue.SCQualificationSpecification__c.ProductUnitClass.14 RADIATORS
PicklistValue.SCQualificationSpecification__c.ProductUnitClass.40 OTHERS
PicklistValue.SCQualificationSpecification__c.ProductUnitClass.99 NON-ALLOCATED ARTICLES

View File

@ -0,0 +1,99 @@
PicklistValue.SCQualificationSpecification__c.ProductUnitType.000 (standard)
PicklistValue.SCQualificationSpecification__c.ProductUnitType.011 WHB NON CONDENSING
PicklistValue.SCQualificationSpecification__c.ProductUnitType.012 WHB CONDENSING
PicklistValue.SCQualificationSpecification__c.ProductUnitType.021 FSB GAS NON CONDENSING
PicklistValue.SCQualificationSpecification__c.ProductUnitType.022 FSB GAS CONDENSING
PicklistValue.SCQualificationSpecification__c.ProductUnitType.031 OIL NON CONDENSING
PicklistValue.SCQualificationSpecification__c.ProductUnitType.032 OIL CONDENSING
PicklistValue.SCQualificationSpecification__c.ProductUnitType.033 SOLID FUEL
PicklistValue.SCQualificationSpecification__c.ProductUnitType.041 GAS INSTANTANEOUS NON CONDENSING
PicklistValue.SCQualificationSpecification__c.ProductUnitType.051 INDIRECT STORAGE
PicklistValue.SCQualificationSpecification__c.ProductUnitType.052 GAS STORAGE
PicklistValue.SCQualificationSpecification__c.ProductUnitType.053 ELECTRICAL STORAGE
PicklistValue.SCQualificationSpecification__c.ProductUnitType.054 BUFFER STORAGE
PicklistValue.SCQualificationSpecification__c.ProductUnitType.061 INSTANTANEOUS ELECTRIC WATERHEATERS
PicklistValue.SCQualificationSpecification__c.ProductUnitType.062 HOT BOILLING APPLIANCES
PicklistValue.SCQualificationSpecification__c.ProductUnitType.071 SOLAR ENERGY
PicklistValue.SCQualificationSpecification__c.ProductUnitType.072 DOMESTIC VENTILATION
PicklistValue.SCQualificationSpecification__c.ProductUnitType.073 HEAT PUMPS
PicklistValue.SCQualificationSpecification__c.ProductUnitType.074 ZEOLITE HEATING UNIT
PicklistValue.SCQualificationSpecification__c.ProductUnitType.075 PHOTOVOLTAIC
PicklistValue.SCQualificationSpecification__c.ProductUnitType.076 076
PicklistValue.SCQualificationSpecification__c.ProductUnitType.081 AIR - AIR (DIRECT EXPANSION)
PicklistValue.SCQualificationSpecification__c.ProductUnitType.082 AIR - WATER
PicklistValue.SCQualificationSpecification__c.ProductUnitType.101 ACC. FLUE SYSTEMS
PicklistValue.SCQualificationSpecification__c.ProductUnitType.102 ACC. HYDRAULICS
PicklistValue.SCQualificationSpecification__c.ProductUnitType.103 ACC. CONTROLS
PicklistValue.SCQualificationSpecification__c.ProductUnitType.104 ACC. ELECTRICALS
PicklistValue.SCQualificationSpecification__c.ProductUnitType.105 ACC. SOLAR
PicklistValue.SCQualificationSpecification__c.ProductUnitType.106 ACC. OTHER
PicklistValue.SCQualificationSpecification__c.ProductUnitType.107 ACC. HEAT PUMP
PicklistValue.SCQualificationSpecification__c.ProductUnitType.108 ACC. SOLID FUEL
PicklistValue.SCQualificationSpecification__c.ProductUnitType.109 ACC. DOMESTIC VENTILATION
PicklistValue.SCQualificationSpecification__c.ProductUnitType.10C 10C
PicklistValue.SCQualificationSpecification__c.ProductUnitType.111 HEAT STORAGE
PicklistValue.SCQualificationSpecification__c.ProductUnitType.112 ROOM HEATER
PicklistValue.SCQualificationSpecification__c.ProductUnitType.113 HEATING WATER STORAGE
PicklistValue.SCQualificationSpecification__c.ProductUnitType.114 ELECTRICAL WHB
PicklistValue.SCQualificationSpecification__c.ProductUnitType.121 ICE - GAS MOTOR
PicklistValue.SCQualificationSpecification__c.ProductUnitType.122 FUEL CELL
PicklistValue.SCQualificationSpecification__c.ProductUnitType.131 HEATING SATELLITES 2-STRING-SYSTEM
PicklistValue.SCQualificationSpecification__c.ProductUnitType.132 HEATING SATELLITES 4-STRING-SYSTEM
PicklistValue.SCQualificationSpecification__c.ProductUnitType.141 TOWEL HEATERS
PicklistValue.SCQualificationSpecification__c.ProductUnitType.142 CAST IRON RADIATORS
PicklistValue.SCQualificationSpecification__c.ProductUnitType.143 STEEL PANEL 25MM RADIATORS
PicklistValue.SCQualificationSpecification__c.ProductUnitType.144 STEEL PANEL 33MM RADIATORS
PicklistValue.SCQualificationSpecification__c.ProductUnitType.145 FIX RADIATORS
PicklistValue.SCQualificationSpecification__c.ProductUnitType.301 Spares
PicklistValue.SCQualificationSpecification__c.ProductUnitType.401 GAS ROOM HEATERS
PicklistValue.SCQualificationSpecification__c.ProductUnitType.404 SKD
PicklistValue.SCQualificationSpecification__c.ProductUnitType.405 BACK BOILERS
PicklistValue.SCQualificationSpecification__c.ProductUnitType.406 Components
PicklistValue.SCQualificationSpecification__c.ProductUnitType.407 Radiator
PicklistValue.SCQualificationSpecification__c.ProductUnitType.409 OTHERS
PicklistValue.SCQualificationSpecification__c.ProductUnitType.501 External Sales Customer Service
PicklistValue.SCQualificationSpecification__c.ProductUnitType.601 Packages Whb
PicklistValue.SCQualificationSpecification__c.ProductUnitType.605 Packages Store Tank
PicklistValue.SCQualificationSpecification__c.ProductUnitType.607 Packages Solar
PicklistValue.SCQualificationSpecification__c.ProductUnitType.608 Packages Clima
PicklistValue.SCQualificationSpecification__c.ProductUnitType.609 Packages Fsb Oil
PicklistValue.SCQualificationSpecification__c.ProductUnitType.702 PL (Third Parties)
PicklistValue.SCQualificationSpecification__c.ProductUnitType.706 DK (Third Parties)
PicklistValue.SCQualificationSpecification__c.ProductUnitType.707 BE (Third Parties)
PicklistValue.SCQualificationSpecification__c.ProductUnitType.708 CH (Third)
PicklistValue.SCQualificationSpecification__c.ProductUnitType.710 GU Merchandise TG
PicklistValue.SCQualificationSpecification__c.ProductUnitType.711 GU Merchandise AT
PicklistValue.SCQualificationSpecification__c.ProductUnitType.712 GU Merchandise IT
PicklistValue.SCQualificationSpecification__c.ProductUnitType.713 GU Merchandise ES
PicklistValue.SCQualificationSpecification__c.ProductUnitType.714 GU Merchandise GB
PicklistValue.SCQualificationSpecification__c.ProductUnitType.715 GU Merchandise FR
PicklistValue.SCQualificationSpecification__c.ProductUnitType.717 GU Merchandise DK
PicklistValue.SCQualificationSpecification__c.ProductUnitType.718 GU Merchandise BE
PicklistValue.SCQualificationSpecification__c.ProductUnitType.719 GU Others Merchandise
PicklistValue.SCQualificationSpecification__c.ProductUnitType.721 GE Merchandise TG AT
PicklistValue.SCQualificationSpecification__c.ProductUnitType.723 GE Merchandise TG DK
PicklistValue.SCQualificationSpecification__c.ProductUnitType.724 GE Merchandise TG BE
PicklistValue.SCQualificationSpecification__c.ProductUnitType.730 GK Merchandise TG
PicklistValue.SCQualificationSpecification__c.ProductUnitType.731 GK Merchandise AT
PicklistValue.SCQualificationSpecification__c.ProductUnitType.732 GK Merchandise ES
PicklistValue.SCQualificationSpecification__c.ProductUnitType.741 EC Merchandise AT
PicklistValue.SCQualificationSpecification__c.ProductUnitType.742 GB (Third) EC
PicklistValue.SCQualificationSpecification__c.ProductUnitType.751 Merchandise TG AT For GE-MAG
PicklistValue.SCQualificationSpecification__c.ProductUnitType.753 Merchandise TG IT For GE-MAG
PicklistValue.SCQualificationSpecification__c.ProductUnitType.761 Spare Parts Merchandise AT
PicklistValue.SCQualificationSpecification__c.ProductUnitType.762 Spare Parts Merchandise IT
PicklistValue.SCQualificationSpecification__c.ProductUnitType.764 Spare Parts Merchandise GB
PicklistValue.SCQualificationSpecification__c.ProductUnitType.767 Spare Parts Merchandise DK
PicklistValue.SCQualificationSpecification__c.ProductUnitType.801 Advertising Material
PicklistValue.SCQualificationSpecification__c.ProductUnitType.809 Other Merchandise
PicklistValue.SCQualificationSpecification__c.ProductUnitType.821 Components
PicklistValue.SCQualificationSpecification__c.ProductUnitType.831 Aluminium
PicklistValue.SCQualificationSpecification__c.ProductUnitType.832 Brass
PicklistValue.SCQualificationSpecification__c.ProductUnitType.833 Services Rendered/Others
PicklistValue.SCQualificationSpecification__c.ProductUnitType.834 Siemens
PicklistValue.SCQualificationSpecification__c.ProductUnitType.841 Tools For Punching And Bending
PicklistValue.SCQualificationSpecification__c.ProductUnitType.842 Diecasting/Deburring Tools
PicklistValue.SCQualificationSpecification__c.ProductUnitType.843 Samples/Prototypes
PicklistValue.SCQualificationSpecification__c.ProductUnitType.901 Old Appliances
PicklistValue.SCQualificationSpecification__c.ProductUnitType.951 Dummy
PicklistValue.SCQualificationSpecification__c.ProductUnitType.999 NON-ALLOCATED ARTICLES

View File

@ -26,23 +26,45 @@
"query": "SELECT Id, InstalledBaseLocation__c, Role__c, ValidFrom__c, ValidTo__c, Account__c FROM SCInstalledBaseRole__c WHERE InstalledBaseLocation__r.Country__c = '{country}' AND InstalledBaseLocation__c IN ('a1B1r000008XXEdEAO', 'a1B1r000008XXEiEAO', 'a1B1r000008XXH8EAO')"
},{
"sobject": "SCPriceList__c",
"useREST": true,
"query": "SELECT Id, Name, Brand__r.Name, Country__c from SCPriceList__c WHERE Country__c = '{country}' AND PriceList__c != null"
},{
"sobject": "SCPriceListItem__c",
"query": "SELECT Id, Article__r.Name, Price__c, PriceUnit__c, Pricelist__c, ValidFrom__c, ValidTo__c, Article__r.EANCode__c, Pricelist__r.Brand__r.Name, Pricelist__r.Country__c FROM SCPriceListItem__c WHERE Country__c = '{country}' AND PriceList__c != null AND (ValidTo__c >= TODAY OR ValidFrom__c >= TODAY) AND Article__c = 'a0Gw000001R9slpEAB'"
},{
"sobject": "SCResourceAssignment__c",
"query": "SELECT Id, ValidTo__c, ValidFrom__c, Country__c, City__c, PostalCode__c, District__c, Street__c, HouseNo__c, Extension__c, FlatNo__c, Floor__c, GeoY__c, GeoX__c, Resource__c, Resource__r.Employee__r.Name, Stock__c, Stock__r.ID2__c FROM SCResourceAssignment__c WHERE Country__c = '{country}' AND ValidTo__c >= TODAY"
"useREST": true,
"query": "SELECT Id, ValidTo__c, ValidFrom__c, Country__c, City__c, PostalCode__c, District__c, Street__c, HouseNo__c, Extension__c, FlatNo__c, Floor__c, GeoY__c, GeoX__c, Resource__c, Resource__r.Employee__r.Name, Stock__c, Stock__r.ID2__c, QualificationProfile__c FROM SCResourceAssignment__c WHERE Country__c = '{country}' AND ValidTo__c >= TODAY"
},{
"sobject": "ContractTemplates",
"useREST": true,
"query": "SELECT id, name, TemplateName__c, status__c, Brand__r.Name, Country__c, Runtime__c FROM SCContract__c WHERE Template__c = null AND Country__c = '{country}'"
},{
"sobject": "SCContract__c",
"query": "SELECT id, name, Template__c, status__c, Brand__r.Name, Country__c, Runtime__c, EndDate__c, StartDate__c, Account__c, AccountOwner__c, IoT_Registration_Status__c FROM SCContract__c WHERE Template__c != null AND EndDate__c >= TODAY AND Country__c = '{country}' limit 3"
"query": "SELECT id, name, Template__c, status__c, Brand__r.Name, Country__c, Runtime__c, EndDate__c, StartDate__c, Account__c, AccountOwner__c, IoT_Registration_Status__c, Maintenance_price_inclusion_of_VAT__c, MaintenanceAfterDue__c, MaintenanceBeforeDue__c, MaintenanceCreationLeadtime__c, MaintenanceCreationShiftFactor__c, MaintenanceDuration__c, MaintenanceFirstDate__c, MaintenanceLastDate__c, MaintenanceInterval__c, MaintenancePriceRequired__c, util_MaintenancePrice__c, util_MaintenanceDuration__c, util_MaintenanceNextDate__c FROM SCContract__c WHERE Template__c != null AND EndDate__c >= TODAY AND Country__c = '{country}' limit 3"
},{
"sobject": "WarrantyTerm",
"useREST": true,
"query": "SELECT Id, WarrantyTermName, WarrantyDuration, WarrantyType, pricebook2.country__c FROM WarrantyTerm WHERE Pricebook2Id = null OR pricebook2.Country__c = '{country}'"
},{
"sobject": "SCQualificationProfile__c",
"useREST": true,
"query": "SELECT Id, Name, Description__c, Id2__c, Standard__c FROM SCQualificationProfile__c WHERE Name like '{country}%'"
},{
"sobject": "SCQualificationProfileItem__c",
"useREST": true,
"query": "SELECT CertificationId__c,Id,Info__c,Level__c,ValidFrom__c,ValidTo__c, Name,Qualification__c FROM SCQualificationProfileItem__c WHERE Profile__r.Name Like '{country}%' AND (ValidTo__c >= TODAY OR ValidFrom__c >= TODAY)"
},{
"sobject": "SCQualificationSpecification__c",
"useREST": true,
"query": "SELECT Id, Name, Brand__c, CertificationId__c, Combined__c, OrderType__c, QualificationProfile__c, ProductUnitType__c, ProductUnitClass__c FROM SCQualificationSpecification__c WHERE Country__c = '{country}'"
},{
"sobject": "LastMaintenanceInformation",
"query": "SELECT Id, InstalledBase__r.SerialNo__c, Order__r.Closed__c FROM SCOrderItem__c WHERE Order__r.Status__c IN ('5506', '5508') AND InstalledBase__r.SerialNo__c != null AND Order__r.Type__c = '5707' AND Order__r.Country__c = '{country}'"
},{
"sobject": "WorkType",
"useREST": true,
"query": "SELECT Id, Name from WorkType"
}
]
}

View File

@ -41,6 +41,10 @@ read_df_location_iot = pd.read_csv('../1_extract_data/results/ParentLocation.csv
read_df_servicecontracttemplates = pd.read_csv('../1_extract_data/results/ContractTemplates.csv', header=0, keep_default_na=False, dtype=str)
read_df_servicecontracts = pd.read_csv('../1_extract_data/results/SCContract__c.csv', header=0, keep_default_na=False, dtype=str)
read_df_warrantyterm = pd.read_csv('../1_extract_data/results/WarrantyTerm.csv', header=0, keep_default_na=False, dtype=str)
read_df_qualificationprofile = pd.read_csv('../1_extract_data/results/SCQualificationProfile__c.csv', header=0, keep_default_na=False, dtype=str)
read_df_qualificationprofileitem = pd.read_csv('../1_extract_data/results/SCQualificationProfileItem__c.csv', header=0, keep_default_na=False, dtype=str)
read_df_lastmaintenance = pd.read_csv('../1_extract_data/results/LastMaintenanceInformation.csv', header=0, keep_default_na=False, dtype=str)
read_df_worktype = pd.read_csv('../1_extract_data/results/WorkType.csv', header=0, keep_default_na=False, dtype=str)
# Columns for reindexing
reindex_columns = ['Id','City__c','Country__c','GeoY__c','GeoX__c','PostalCode__c','Street__c','Extension__c','HouseNo__c','FlatNo__c','Floor__c']
@ -53,8 +57,12 @@ reindex_columns_resourceassignment = ['Id', 'ValidTo__c', 'ValidFrom__c', 'Count
reindex_columns_address_iot = ['Id', 'Country', 'CountryCode', 'Street', 'City', 'ParentId', 'PostalCode']
reindex_columns_location_iot = ['Id', 'Name']
reindex_columns_servicecontracttemplates = ['Id', 'Name', 'TemplateName__c', 'Status__c', 'Brand__r.Name', 'Country__c', 'Runtime__c']
reindex_columns_servicecontracts = ['Id', 'Name', 'Template__c', 'Status__c', 'Brand__r.Name', 'Country__c', 'Runtime__c', 'EndDate__c', 'StartDate__c', 'Account__c', 'AccountOwner__c', 'IoT_Registration_Status__c']
reindex_columns_servicecontracts = ['Id', 'Name', 'Template__c', 'Status__c', 'Brand__r.Name', 'Country__c', 'Runtime__c', 'EndDate__c', 'StartDate__c', 'Account__c', 'AccountOwner__c', 'IoT_Registration_Status__c', 'Maintenance_price_inclusion_of_VAT__c', 'MaintenanceAfterDue__c', 'MaintenanceBeforeDue__c', 'MaintenanceCreationLeadtime__c', 'MaintenanceCreationShiftFactor__c', 'MaintenanceDuration__c', 'MaintenanceFirstDate__c', 'MaintenanceLastDate__c', 'MaintenanceInterval__c', 'MaintenancePriceRequired__c', 'util_MaintenancePrice__c', 'util_MaintenanceDuration__c', 'util_MaintenanceNextDate__c']
reindex_columns_warrantyterm = ['Id', 'WarrantyTermName', 'WarrantyDuration', 'WarrantyType', 'Pricebook2']
reindex_columns_qualificationprofile = ['Id', 'Name', 'Description__c', 'ID2__c', 'Standard__c']
reindex_columns_qualificationprofileitem = ['CertificationId__c', 'Id', 'Info__c', 'Level__c', 'ValidFrom__c', 'ValidTo__c', 'Name', 'Qualification__c']
reindex_columns_lastmaintenance = ['Id', 'InstalledBase__r.SerialNo__c', 'Order__r.Closed__c']
reindex_columns_worktype = ['Id', 'Name']
# Reindex the columns to match the desired format
df = read_df.reindex(reindex_columns, axis=1)
@ -69,6 +77,10 @@ df_location_iot = read_df_location_iot.reindex(reindex_columns_location_iot, axi
df_servicecontracttemplates = read_df_servicecontracttemplates.reindex(reindex_columns_servicecontracttemplates, axis=1)
df_servicecontract = read_df_servicecontracts.reindex(reindex_columns_servicecontracts, axis=1)
df_warrantyterm = read_df_warrantyterm.reindex(reindex_columns_warrantyterm, axis=1)
df_qualificationprofile = read_df_qualificationprofile.reindex(reindex_columns_qualificationprofile, axis=1)
df_qualificationprofileitem = read_df_qualificationprofileitem.reindex(reindex_columns_qualificationprofileitem, axis=1)
df_lastmaintenance = read_df_lastmaintenance.reindex(reindex_columns_lastmaintenance, axis=1)
df_worktype = read_df_worktype.reindex(reindex_columns_worktype, axis=1)
##--------------------------------------------------------------------------##
## Update for IoT Addresses and Locations
@ -227,7 +239,7 @@ df_assetwarranty_standard['WarrantyTermId'] = standard_warranty['Id'].iloc[0]
print(df_assetwarranty_standard)
# Rename columns for asset warranty
df_assetwarranty_standard.columns = ['Asset.PKey__c', 'StartDate', 'EndDate', 'WarrantyTerm.Id']
df_assetwarranty_standard.columns = ['Asset.PKey__c', 'StartDate', 'EndDate', 'WarrantyTerm.PKey__c']
#Fetching data for extended warranty where GuaranteeExtended__c is filled and different from GuaranteeStandard__c
df_assetwarranty_extended = df_ib[
@ -255,13 +267,19 @@ if(not df_assetwarranty_extended.empty):
print(df_assetwarranty_extended)
# Rename columns for asset warranty
df_assetwarranty_extended.columns = ['Asset.PKey__c', 'StartDate', 'EndDate', 'WarrantyTerm.Id']
df_assetwarranty_extended.columns = ['Asset.PKey__c', 'StartDate', 'EndDate', 'WarrantyTerm.PKey__c']
# Convert EndDate to datetime and extract only the date part
df_assetwarranty_extended['EndDate'] = pd.to_datetime(df_assetwarranty_extended['EndDate']).dt.date
# Add them to a merged df for saving purposes
df_assetwarranty_save = pd.concat(df_assetwarranty_standard, df_assetwarranty_extended)
df_assetwarranty_save = pd.concat([df_assetwarranty_standard, df_assetwarranty_extended])
else:
df_assetwarranty_save = df_assetwarranty_standard
# Filter out rows where either StartDate or EndDate is empty or null
df_assetwarranty_save = df_assetwarranty_save.dropna(subset=['StartDate', 'EndDate'])
merged_df_ib = merged_df_ib.drop('GuaranteeStandard__c', axis=1)
merged_df_ib = merged_df_ib.drop('GuaranteeExtended__c', axis=1)
merged_df_ib = merged_df_ib.drop('WarrantyDuration__c', axis=1)
@ -364,6 +382,32 @@ for index, row in tqdm(merged_df_ib.iterrows(), total=len(merged_df_ib)):
if product_group not in valid_groups:
merged_df_ib.loc[index, 'Kind_of_Energy__c'] = None # or set to empty string
##--------------------------------------------------------------------------##
## Asset Maintenance Information
##--------------------------------------------------------------------------##
# Create asset maintenance records based on last maintenance information
df_maintenance = pd.merge(
merged_df_ib[['SerialNumber', 'PKey__c']],
df_lastmaintenance[['InstalledBase__r.SerialNo__c', 'Order__r.Closed__c']],
left_on='SerialNumber',
right_on='InstalledBase__r.SerialNo__c',
how='inner'
)
# Clean up the maintenance dataframe
df_maintenance = df_maintenance.drop('InstalledBase__r.SerialNo__c', axis=1)
df_maintenance.columns = ['SerialNumber', 'FSL_Asset__r.PKey__c', 'FSL_Maintenance_Date__c']
# Sort the maintenance records by SerialNumber and FSL_Maintenance_Date__c in descending order
df_maintenance = df_maintenance.sort_values(by=['SerialNumber', 'FSL_Maintenance_Date__c'], ascending=[True, False])
# Remove any duplicates
df_maintenance = df_maintenance.drop_duplicates(subset=['SerialNumber'], keep='first')
# Extract just the date part from the FSL_Maintenance_Date__c field
df_maintenance['FSL_Maintenance_Date__c'] = pd.to_datetime(df_maintenance['FSL_Maintenance_Date__c']).dt.date
##--------------------------------------------------------------------------##
## Pricebook2 and PricebookEntry
##--------------------------------------------------------------------------##
@ -519,6 +563,26 @@ df_servicecontracttemplates['Term'] = df_servicecontracttemplates['Term'].fillna
## Service Contract
##--------------------------------------------------------------------------##
# Create new dataframe for maintenance plan fields
df_maintenanceplan = df_servicecontract[['Id', 'StartDate__c', 'EndDate__c', 'Account__c', 'Maintenance_price_inclusion_of_VAT__c', 'MaintenanceAfterDue__c',
'MaintenanceBeforeDue__c', 'MaintenanceCreationLeadtime__c',
'MaintenanceCreationShiftFactor__c', 'MaintenanceDuration__c',
'MaintenanceFirstDate__c', 'MaintenanceLastDate__c',
'MaintenanceInterval__c', 'MaintenancePriceRequired__c',
'util_MaintenancePrice__c', 'util_MaintenanceDuration__c',
'util_MaintenanceNextDate__c']].copy()
# Drop maintenance fields from service contract dataframe, except Id
maintenance_fields = ['Maintenance_price_inclusion_of_VAT__c', 'MaintenanceAfterDue__c',
'MaintenanceBeforeDue__c', 'MaintenanceCreationLeadtime__c',
'MaintenanceCreationShiftFactor__c', 'MaintenanceDuration__c',
'MaintenanceFirstDate__c', 'MaintenanceLastDate__c',
'MaintenanceInterval__c', 'MaintenancePriceRequired__c',
'util_MaintenancePrice__c', 'util_MaintenanceDuration__c',
'util_MaintenanceNextDate__c']
df_servicecontract = df_servicecontract.drop(maintenance_fields, axis=1)
df_servicecontract['Pricebook2.Name'] = (
df_servicecontract['Country__c'].astype(str).fillna('').str.upper() + ' ' +
df_servicecontract['Brand__r.Name'].astype(str).fillna('').str.upper() + ' ' +
@ -539,6 +603,40 @@ df_servicecontract['TemplateCountry__c'] = df_servicecontract['BillingCountryCod
df_servicecontract['Term'] = pd.to_numeric(df_servicecontract['Term'].str.extract('(\d+)')[0], errors='coerce')
df_servicecontract['Term'] = df_servicecontract['Term'].fillna(0).astype(int)
##--------------------------------------------------------------------------##
## MaintenancePlan, MaintenanceAsset
##--------------------------------------------------------------------------##
df_maintenanceplan.columns = ['ServiceContract.PKey__c', 'StartDate', 'AccountId', 'MaintenancePriceInclusionOfVAT__c',
'MaintenanceWindowEndDays', 'MaintenanceWindowStartDays', 'GenerationTimeframe',
'MaintenanceCreationShiftFactor__c', 'MaintenanceDuration__c', 'Frequency', 'MaintenancePriceRequired__c',
'util_MaintenancePrice__c', 'util_MaintenanceDuration__c', 'util_MaintenanceNextDate__c']
# Add 'Days' to the 'GenerationTimeframe' column
df_maintenanceplan['GenerationTimeframeType'] = 'Days'
maintenance_fields_to_drop = ['MaintenancePriceInclusionOfVAT__c',
'MaintenanceCreationShiftFactor__c', 'MaintenanceDuration__c',
'MaintenanceFirstDate__c', 'MaintenanceLastDate__c',
'MaintenancePriceRequired__c',
'util_MaintenancePrice__c', 'util_MaintenanceDuration__c',
'util_MaintenanceNextDate__c']
df_maintenanceplan = df_maintenanceplan.drop(maintenance_fields_to_drop, axis=1)
# Get the worktype ID for "Planned Maintenance"
maintenance_worktype_id = df_worktype[df_worktype['Name'] == 'Planned Maintenance']['Id'].iloc[0]
# Add WorkTypeId to maintenance plan
df_maintenanceplan['WorkTypeId'] = maintenance_worktype_id
##--------------------------------------------------------------------------##
## Skills
##--------------------------------------------------------------------------##
##--------------------------------------------------------------------------##
## Saving to CSV
##--------------------------------------------------------------------------##
@ -555,6 +653,7 @@ merged_df_location_iot.to_csv('../3_update_address_and_location_data_for_migrati
df_servicecontracttemplates.to_csv('../14_insert_servicecontracttemplates_dummies/ServiceContract.csv', index=False)
df_servicecontract.to_csv('../16_insert_servicecontract/ServiceContract_beforetransform.csv', index=False)
df_assetwarranty_save.to_csv('../9_upsert_assets/AssetWarranty.csv', index=False)
df_maintenance.to_csv('../9_upsert_assets/FSL_Asset_Maintenance_Information__c.csv', index=False)
## end mapping
print('Data has been successfully transformed and saved to CSV files.')

View File

@ -19,7 +19,7 @@
"master": false
},{
"query": "SELECT PKey__c,Product2Id,InstallDate,Name,Kind_of_Energy__c,Main_Product_Group__c,SerialNumber,Serialnumber_Exception__c,LocationId FROM Asset",
"operation": "Insert",
"operation": "Upsert",
"externalId": "PKey__c",
"master": true,
"useValuesMapping": true,
@ -30,6 +30,11 @@
"master": true,
"useValuesMapping": true,
"useSourceCSVFile": true
},{
"query": "SELECT FSL_Asset__c$Asset,FSL_Maintenance_Date__c FROM FSL_Asset_Maintenance_Information__c",
"master": true,
"operation": "Insert",
"useSourceCSVFile": true
}
]
}