diff --git a/.gitignore b/.gitignore index 98ed8fb..84735d1 100644 --- a/.gitignore +++ b/.gitignore @@ -39,4 +39,6 @@ successful_records.csv server.key server.crt AssetWarranty.csv -FSL_Asset_Maintenance_Information__c.csv \ No newline at end of file +FSL_Asset_Maintenance_Information__c.csv +MaintenancePlan.csv +MaintenancePlan_beforetransform.csv \ No newline at end of file diff --git a/prepared_steps/19_create_maintenance_plan/command.txt b/prepared_steps/19_create_maintenance_plan/command.txt new file mode 100644 index 0000000..adc851f --- /dev/null +++ b/prepared_steps/19_create_maintenance_plan/command.txt @@ -0,0 +1 @@ +python fill_fields_and_insert.py --context qa2 --csv MaintenancePlan.csv \ No newline at end of file diff --git a/prepared_steps/19_create_maintenance_plan/export.json b/prepared_steps/19_create_maintenance_plan/export.json new file mode 100644 index 0000000..b13e9ef --- /dev/null +++ b/prepared_steps/19_create_maintenance_plan/export.json @@ -0,0 +1,16 @@ +{ + "allOrNone": true, + "objects": [ + { + "query": "SELECT Id FROM ServiceContract WHERE IsTemplate__c = true", + "operation": "Readonly", + "externalId": "Id", + "master": false + },{ + "query": "SELECT Id, TemplateId__c FROM ServiceContract", + "operation": "Update", + "externalId": "Id", + "useSourceCSVFile": true + } + ] +} \ No newline at end of file diff --git a/prepared_steps/19_create_maintenance_plan/fill_fields_and_insert.py b/prepared_steps/19_create_maintenance_plan/fill_fields_and_insert.py new file mode 100644 index 0000000..7409cb2 --- /dev/null +++ b/prepared_steps/19_create_maintenance_plan/fill_fields_and_insert.py @@ -0,0 +1,62 @@ +import pandas as pd +import argparse +from sys import path +path.append('../..') +from utils import bulk_insert_records + +if __name__ == '__main__': + + parser = argparse.ArgumentParser(description='Insert MaintenancePlan records via Bulk API') + parser.add_argument('--context', type=str, required=True, + help='Salesforce org context (e.g., "qa2", "prod")') + parser.add_argument('--csv', type=str, default='MaintenancePlan.csv', + help='CSV file to process (default: MaintenancePlan.csv)') + args = parser.parse_args() + + #read_df_sc = pd.read_csv('../16_insert_servicecontract/successful_records.csv', header=0, keep_default_na=False, dtype=str) + read_df_mp = pd.read_csv('./MaintenancePlan_beforetransform.csv', header=0, keep_default_na=False, dtype=str) + + #"sf__Id","sf__Created",PKey__c,BillingCountryCode,Term,EndDate,StartDate,AccountId,Service_Recipient__c,IoT_Registration_Status__c,Name,Pricebook2Id,TemplateId__c + #reindex_columns_sc = ['sf__Id','sf__Created','PKey__c', 'BillingCountryCode', 'Term', 'EndDate', 'StartDate', 'AccountId', 'Service_Recipient__c', 'IoT_Registration_Status__c', 'Name', 'Pricebook2Id', 'TemplateId__c'] + #ServiceContract.PKey__c,StartDate,EndDate,AccountId,MaintenanceWindowEndDays,MaintenanceWindowStartDays,GenerationTimeframe,Frequency,GenerationTimeframeType,WorkTypeId + reindex_columns_mp = ['ServiceContract.PKey__c', 'StartDate', 'EndDate', 'AccountId', 'MaintenanceWindowEndDays', 'MaintenanceWindowStartDays', 'GenerationTimeframe', 'Frequency', 'GenerationTimeframeType', 'WorkTypeId'] + + + # Reindex the columns to match the desired format + #df_sc = read_df_sc.reindex(reindex_columns_sc, axis=1) + df_mp = read_df_mp.reindex(reindex_columns_mp, axis=1) + + + # Only load 'sf__Id' and 'PKey__c' from the ServiceContract CSV + df_sc = pd.read_csv('../16_insert_servicecontract/successful_records.csv', usecols=['sf__Id', 'PKey__c']) + + print(df_sc) + print(df_mp) + # + # Merge df_mp with df_sc including Id based on PKey__c + merged_df_mp = pd.merge(df_mp, + df_sc[['sf__Id', 'PKey__c']], + left_on='ServiceContract.PKey__c', + right_on='PKey__c', + how='left') + + print(merged_df_mp) + + # Rename only 'old_name' to 'new_name' + merged_df_mp = merged_df_mp.rename(columns={'sf__Id': 'ServiceContractId'}) + + merged_df_mp = merged_df_mp.drop('ServiceContract.PKey__c', axis=1) + merged_df_mp = merged_df_mp.drop('PKey__c', axis=1) + + #transform values into int + merged_df_mp['MaintenanceWindowEndDays'] = pd.to_numeric(merged_df_mp['MaintenanceWindowEndDays'], errors='coerce').fillna(0).astype(int) + merged_df_mp['MaintenanceWindowStartDays'] = pd.to_numeric(merged_df_mp['MaintenanceWindowStartDays'], errors='coerce').fillna(0).astype(int) + merged_df_mp['GenerationTimeframe'] = pd.to_numeric(merged_df_mp['GenerationTimeframe'], errors='coerce').fillna(0).astype(int) + merged_df_mp['Frequency'] = pd.to_numeric(merged_df_mp['Frequency'], errors='coerce').fillna(0).astype(int) + + #safe csv + merged_df_mp.to_csv('./MaintenancePlan.csv', index=False) + + + bulk_insert_records(args.context, 'MaintenancePlan', args.csv) + diff --git a/prepared_steps/2_transform_via_script/TransformScript.py b/prepared_steps/2_transform_via_script/TransformScript.py index f563ab7..b13c4dd 100644 --- a/prepared_steps/2_transform_via_script/TransformScript.py +++ b/prepared_steps/2_transform_via_script/TransformScript.py @@ -606,10 +606,11 @@ df_servicecontract['Term'] = df_servicecontract['Term'].fillna(0).astype(int) ##--------------------------------------------------------------------------## ## MaintenancePlan, MaintenanceAsset ##--------------------------------------------------------------------------## +print(df_maintenanceplan.columns) -df_maintenanceplan.columns = ['ServiceContract.PKey__c', 'StartDate', 'AccountId', 'MaintenancePriceInclusionOfVAT__c', +df_maintenanceplan.columns = ['ServiceContract.PKey__c', 'StartDate', 'EndDate', 'AccountId', 'MaintenancePriceInclusionOfVAT__c', 'MaintenanceWindowEndDays', 'MaintenanceWindowStartDays', 'GenerationTimeframe', - 'MaintenanceCreationShiftFactor__c', 'MaintenanceDuration__c', 'Frequency', 'MaintenancePriceRequired__c', + 'MaintenanceCreationShiftFactor__c', 'MaintenanceDuration__c', 'MaintenanceFirstDate__c', 'MaintenanceLastDate__c', 'Frequency', 'MaintenancePriceRequired__c', 'util_MaintenancePrice__c', 'util_MaintenanceDuration__c', 'util_MaintenanceNextDate__c'] # Add 'Days' to the 'GenerationTimeframe' column @@ -630,6 +631,9 @@ maintenance_worktype_id = df_worktype[df_worktype['Name'] == 'Planned Maintenanc # Add WorkTypeId to maintenance plan df_maintenanceplan['WorkTypeId'] = maintenance_worktype_id +print(df_maintenanceplan) + + ##--------------------------------------------------------------------------## ## Skills ##--------------------------------------------------------------------------## @@ -654,6 +658,7 @@ df_servicecontracttemplates.to_csv('../14_insert_servicecontracttemplates_dummie 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) +df_maintenanceplan.to_csv('../19_create_maintenance_plan/MaintenancePlan_beforetransform.csv', index=False) ## end mapping print('Data has been successfully transformed and saved to CSV files.') \ No newline at end of file