mmmh…as you can see i’m doing some loop prevention…
if (!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');
// Include Medoo Framework -> original copyright Medoo Framework -> http://medoo.in/ //
require_once 'custom_library/medoo.min.php';
class UpdateOrder {
// Set static variable to prevent loop in save bean
static $already_ran = false;
function DoUpdateerp(&$bean, $event, $arguments) {
// Check if has been already saved
if(self::$already_ran == true) return;
self::$already_ran = true;
$GLOBALS['log']->fatal('Prevent Loop called for Order: '.$bean->name);
// Retrieve Bean data
$OrderId = $bean->id;
$SNumber = $bean->order_snumber_c;
$Incoterms = $bean->dbgit_incoterms_id_c;
// Declare my custom function
// Convert AS400 Date format(Centuryyearmonthday - 1160101 into a human readable format YY-mm-dd 2016-01-01)
function convertDate($wrongDate) {
$year = substr($wrongDate, 1, 2);
$month = substr($wrongDate, 3, 2);
$day = substr($wrongDate, 5, 2);
$originalDate = $year."-".$month."-".$day;
$newDate = date("Y-m-d", strtotime($originalDate));
//$GLOBALS['log']->FATAL('Original Date: '.$wrongDate);
//$GLOBALS['log']->FATAL('Converted Date: '.$newDate);
return $newDate;
}
// Initialize MYSQL Database Connection(insert imported data from as400 into mysql)
$database = new medoo([
'database_type' => 'mysql',
'database_name' => 'erpdata',
'server' => '172.20.1.66',
'username' => 'root',
'password' => 'sandbgroup',
'charset' => 'utf8'
]);
// Execute the query
$datas = $database->select("table_spedizioni_mare_ita", [
"type_sped",
"incoterms",
"container_nr",
"qta_colli",
"peso_lordo",
"volume",
"dett_merce",
"um_pezzi",
"qta_pezzi",
"routing",
"type_sped",
"pol",
"pod",
"carrier",
"container_type",
"package_code",
"booking_nr",
"etd",
"eta",
"accountname_origin",
"envcode_origin",
"address_origin",
"zip_origin",
"city_origin",
"state_origin",
"country_origin",
"accountname_destination",
"envcode_destination",
"address_destination",
"zip_destination",
"city_destination",
"state_destination",
"country_destination",
], [
"AND" => [
"office_code" => substr($SNumber, 0, 2),
"year_sped" => substr($SNumber, 2, 4),
"prog_sped" => substr($SNumber, 6, 6),
]
]);
if( is_array( $datas ) ) {
switch(count($datas)) {
case 0:
$GLOBALS['log']->FATAL('No Data to Retrieve...nothing to do....');
break;
case 1:
$GLOBALS['log']->FATAL('Only one shipment found....proceed with update....');
foreach($datas as $data)
{
// Retrieve ERP data from external database(AS400-Bridge)
// Rertrieve incoterms array based on rcode provided by ERP
$ScmIncoterms = new DBGIT_Incoterms();
$ScmIncoterms->retrieve_by_string_fields(array('incoterms_rcode' => $data["incoterms"]));
// Rertrieve POL array based on pcode provided by ERP
$ScmPol = new DBGIT_Ports();
$ScmPol->retrieve_by_string_fields(array('port_pcode' => $data["pol"]));
// Rertrieve POD array based on pcode provided by ERP
$ScmPod = new DBGIT_Ports();
$ScmPod->retrieve_by_string_fields(array('port_pcode' => $data["pod"]));
// Rertrieve Carrier array based on Carrier code provided by ERP
$ScmMCarrier = new DBGIT_MaritimeCarriers();
$ScmMCarrier->retrieve_by_string_fields(array('maritime_code' => $data["carrier"]));
// Rertrieve Container type array based on Container code provided by ERP
$ScmContainerType = new DBGIT_Containers();
$ScmContainerType->retrieve_by_string_fields(array('container_code' => $data["container_type"]));
// Rertrieve Package type array based on Package code provided by ERP
$ScmPackageType = new DBGIT_Packaging();
$ScmPackageType->retrieve_by_string_fields(array('packaging_code' => $data["package_code"]));
// Debug Message from log
/*
$GLOBALS['log']->FATAL('Before Save .... debug message from UpdateOrder');
$GLOBALS['log']->FATAL('OrderID: '.$OrderId);
$GLOBALS['log']->FATAL('Shipment Number: '.$SNumber);
$GLOBALS['log']->FATAL('Incoterms ID: '.$Incoterms);
$GLOBALS['log']->FATAL(substr($SNumber, 0, 2)." - ".substr($SNumber, 2, 4)." - ".substr($SNumber, 6, 6));
$GLOBALS['log']->FATAL('Incoterms Name: '.$ScmIncoterms->name);
$GLOBALS['log']->FATAL('POL: '.$ScmPol->name);
$GLOBALS['log']->FATAL('POD: '.$ScmPod->name);
$GLOBALS['log']->FATAL('Routing Direction: '.$data["routing"]);
$GLOBALS['log']->FATAL('Service Type: '.$data["type_sped"]);
$GLOBALS['log']->FATAL('Marittime Carrier: '.$ScmMCarrier->name);
$GLOBALS['log']->FATAL('Container Type: '.$ScmContainerType->name);
$GLOBALS['log']->FATAL('Packaging Type: '.$ScmPackageType->name);
*/
// Save data into Bean
$bean->order_container = $data["container_nr"];
$bean->order_pacnum = $data["qta_colli"];
$bean->order_goods_desc_c = $data["dett_merce"];
// todo: create Unità di misura module to relate t to quantity
$bean->order_punit = $data["um_pezzi"];
$bean->order_pnum = $data["qta_pezzi"];
// end todo
$bean->order_weight = $data["peso_lordo"];
$bean->order_volume = $data["volume"];
$bean->dbgit_incoterms_id_c = $ScmIncoterms->id;
$bean->order_routing = $data["routing"];
$bean->order_service = $data["type_sped"];
$bean->dbgit_ports_id_c = $ScmPol->id;
$bean->dbgit_ports_id1_c = $ScmPod->id;
$bean->dbgit_maritimecarriers_id_c = $ScmMCarrier->id;
$bean->dbgit_containers_id_c = $ScmContainerType->id;
$bean->dbgit_packaging_id_c = $ScmPackageType->id;
$bean->order_bookingn = $data["booking_nr"];
$bean->order_etd = convertDate($data["etd"]);
$bean->order_eta = convertDate($data["eta"]);
$bean->order_oaccountname = $data["accountname_origin"];
$bean->order_oerpcode = $data["envcode_origin"];
$bean->billing_address_street = $data["address_origin"];
$bean->billing_address_postalcode = $data["zip_origin"];
$bean->billing_address_city = $data["city_origin"];
$bean->billing_address_state = $data["state_origin"];
$bean->billing_address_country = $data["country_origin"];
$bean->order_daccountname = $data["accountname_destination"];
$bean->order_derpcode = $data["envcode_destination"];
$bean->shipping_address_street = $data["address_destination"];
$bean->shipping_address_postalcode = $data["zip_destination"];
$bean->shipping_address_city = $data["city_destination"];
$bean->shipping_address_state = $data["state_destination"];
$bean->shipping_address_country = $data["country_destination"];
$newOrder->inSync = true;
$newOrder->save(false);
}
break;
default:
$GLOBALS['log']->FATAL('TODO function to create multiple orders base on multiple shipments...');
$GLOBALS['log']->FATAL('OrderID: '.$OrderId);
$GLOBALS['log']->FATAL('Shipment Number: '.$SNumber);
$GLOBALS['log']->FATAL('Incoterms ID: '.$Incoterms);
$newOrder = new DBGIT_ManageOrders();
$newOrder->name=$bean->name;
$newOrder->order_oaccountname=$bean->order_oaccountname;
$newOrder->save(false);
} // EOF Switch
} // EOF IF STATEMENT
} // EOF DoUpdateerp Function
} // EOF UpdateOrder Class
What do u you exactly mean with “create bean by SQL”…you mean about create records directly to database instead of using bean?
Do you see any discrepancies in my code?
Thank you