startetd meintenance plan instert
This commit is contained in:
@ -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.')
|
Reference in New Issue
Block a user