sub dcb_trackntrace { my ($waybillNumber) = @_ ; our $soapenvelope = qq~ $waybillNumber ~ ; &common_debug("[API] dcb_trackntrace : [soapenvelope=$soapenvelope]") ; &dcb_send_it('TracknTrace') ; &dcb_parse_it ; &dcb_read_it('TracknTrace') ; # $returnxml = qq~ # # # # # Completed # # # # DEV # DARREN # Proof of delivery # 08052023 # 0.00 # 1 # 15 SIM ROAD # . # KEMPTON PARK # DARREN # 0834752596 # ReceiverName TESTING # 1619 # POMONA # # . # KEMPTON PARK # DEV # 0112302085 # 1619 # POMONA # EC # YES # # DCBDEVLP # # # overrideDefaultSubcontractor # no # Dn230505 # # # # # # PODCRE # 09052023 # Waybill has been PODed # JNB # 0719 # # # WBLCRE # 05052023 # Waybill Dn230505 created in import # JNB # 0718 # # # 05052023 # Dn230505 # # # # # ~ ; } #------------------------------------------------------------------------------- sub dcb_postalcode { our $soapenvelope = qq~ $postal_code $suburb ~ ; &common_debug("[API] dcb_postalcode : [soapenvelope=$soapenvelope]") ; &dcb_send_it('PostalCode') ; &dcb_parse_it ; &dcb_read_it('PostalCode') ; } #------------------------------------------------------------------------------- sub dcb_savewabill { my ($venue,$ft,$ev_id) = @_ ; my $system_loc = $i{"system_location_$ft\_$ev_id"} ; my $supplier = $i{"logistics_supplier_id_$ft\_$ev_id"} ; my $status = $i{"status_$ft\_$ev_id"} ; my $waybill_nr = $i{"waybill_nr_$ft\_$ev_id"} ; my $items = $i{"item_$ft\_$ev_id"} ; my $poc = $i{"poc_$ft\_$ev_id"} ; my $special_instructions = $i{"special_instructions_$ft\_$ev_id"} ; # my $dest = ($ft eq 'to') ? $db{organisations}{$venue}{name} : $db{logistics_locations}{$system_loc}{location} ; # my $orig = ($ft eq 'from') ? $db{organisations}{$venue}{name} : $db{logistics_locations}{$system_loc}{location} ; my $dest = ($ft eq 'from') ? $db{logistics_locations}{$system_loc}{location} : ($routeCode) ? substr($routeCode,0,3) : $db{organisations}{$venue}{region_code} ; my $orig = ($ft eq 'to') ? $db{logistics_locations}{$system_loc}{location} : ($routeCode) ? substr($routeCode,0,3) : $db{organisations}{$venue}{region_code} ; my ($poc_name,$poc_nr) = split(/\_/,$poc) ; if ($dest =~ /ITV/) { $dest =~ s/\ITV//g ; $dest =~ s/ //g ; } elsif ($orig =~ /ITV/) { $orig =~ s/\ITV//g ; $orig =~ s/ //g ; } # my $accountnumber = ($testdcd) ? 'DCBMAILBAG' : 'DI31F' ; my $accountnumber = ($testdcd) ? 'DCBMAILBAG' : 'DI31' ; our $soapenvelope = qq~ $accountnumber $address1 $address2 $address3 $address4 $poc_nr $poc_name $dcbdate $dest $waybill_nr $orig $postal_code $suburb $db{organisations}{$venue}{name} $routeCode $special_instructions 1 ~ ; &common_debug("[API] dcb_savewabill : [soapenvelope=$soapenvelope]") ; &dcb_send_it('savewabill') ; &dcb_parse_it ; &dcb_read_it('savewabill') ; } #------------------------------------------------------------------------------- sub dcb_upload_oms_waybill { my ($venue,$ft,$ev_id) = @_ ; my $tbl_log_loc = 'logistics_locations' ; my $tbl_org = 'organisations' ; my $system_loc = $i{"system_location_$ft\_$ev_id"} ; my $supplier = $i{"logistics_supplier_id_$ft\_$ev_id"} ; my $status = $i{"status_$ft\_$ev_id"} ; my $waybill_nr = $i{"waybill_nr_$ft\_$ev_id"} ; my $items = $i{"item_$ft\_$ev_id"} ; my $poc = $i{"poc_$ft\_$ev_id"} ; my ($poc_name,$poc_nr) = split(/\_/,$poc) ; # my $special_instructions = $i{"special_instructions_$ft\_$ev_id"} ; my $start_end = ($ft eq 'from') ? 'end' : 'start' ; my $special_instructions = "Event $start_end : $dcbdate. " . $i{"special_instructions_$ft\_$ev_id"} ; $rec{address1} = $address1 ; $rec{address1} .= ', ' if $address1 && $address2 ; $rec{address1} .= $address2 if $address2 ; $rec{address2} = $address3 ; $rec{address2} .= ', ' if $address3 && $address4 ; $rec{address2} .= $address4 if $address4 ; $rec{city} = $city ; $rec{suburb} = $suburb ; $rec{postal_code} = $postal_code ; $rec{poc_name} = $poc_name ; $rec{poc_nr} = $poc_nr ; $rec{name} = $db{$tbl_org}{$venue}{name} ; $rec{routecode} = $routeCode ; $send{address1} = $db{$tbl_log_loc}{$system_loc}{address_line_1} ; $send{address1} .= ', ' if $db{$tbl_log_loc}{$system_loc}{address_line_1} && $db{$tbl_log_loc}{$system_loc}{address_line_2} ; $send{address1} .= $db{$tbl_log_loc}{$system_loc}{address_line_2} if $db{$tbl_log_loc}{$system_loc}{address_line_2} ; $send{address2} = $db{$tbl_log_loc}{$system_loc}{address_line_3} ; $send{address2} .= ', ' if $db{$tbl_log_loc}{$system_loc}{address_line_3} && $db{$tbl_log_loc}{$system_loc}{address_line_4} ; $send{address2} .= $db{$tbl_log_loc}{$system_loc}{address_line_4} if $db{$tbl_log_loc}{$system_loc}{address_line_4} ; $send{city} = $db{$tbl_log_loc}{$system_loc}{city} ; $send{suburb} = $db{$tbl_log_loc}{$system_loc}{suburb} ; $send{postal_code} = $db{$tbl_log_loc}{$system_loc}{postal_code} ; $send{poc_name} = $db{$tbl_log_loc}{$system_loc}{poc_name} ; $send{poc_nr} = $db{$tbl_log_loc}{$system_loc}{poc_nr} ; $send{name} = $db{$tbl_log_loc}{$system_loc}{location} ; $send{routecode} = $db{$tbl_log_loc}{$system_loc}{dcb_route_code} ; # my $dest = ($ft eq 'from') ? $db{$tbl_log_loc}{$system_loc}{location} : ($routeCode) ? substr($routeCode,0,3) : $db{$tbl_log_loc}{$venue}{region_code} ; # my $orig = ($ft eq 'to') ? $db{$tbl_log_loc}{$system_loc}{location} : ($routeCode) ? substr($routeCode,0,3) : $db{$tbl_log_loc}{$venue}{region_code} ; if ($ft eq 'from') { foreach (keys %rec) { my $rec = $rec{$_} ; $rec{$_} = $send{$_} ; $send{$_} = $rec ; } } # if ($dest =~ /ITV/) { $dest =~ s/\ITV//g ; $dest =~ s/ //g ; } # elsif ($orig =~ /ITV/) { $orig =~ s/\ITV//g ; $orig =~ s/ //g ; } # our $soapenvelope = qq~ # # # # # DCBMAILBAG # $items_cnt~; # my $accountnumber = ($testdcd) ? 'DCBMAILBAG' : 'DI31F' ; my $accountnumber = ($testdcd) ? 'DCBMAILBAG' : 'DI31' ; our $soapenvelope = qq~ $accountnumber 0 $items_cnt~; for my $parcel_cnt (1 .. $items_cnt) { my $parcel_qty = ($db{logistics_items}{$items[$parcel_cnt-1]}{qty}) ? $db{logistics_items}{$items[$parcel_cnt-1]}{qty} : 1 ; my $parcel_desc = ($db{logistics_items}{$items[$parcel_cnt-1]}{name}) ? $db{logistics_items}{$items[$parcel_cnt-1]}{name} : 1 ; $soapenvelope .= qq~ STD G 0 1 $parcel_desc 1 1 1 $parcel_cnt $parcel_qty ~; } $soapenvelope .= qq~ $rec{address1} $rec{address2} $rec{city} $rec{poc_name} $rec{poc_nr} $rec{name} $rec{postal_code} $rec{routecode} $rec{suburb} $send{address1} $send{address2} $send{city} $send{poc_name} $send{poc_nr} $send{name} $send{postal_code} $send{routecode} $send{suburb} OE $special_instructions $waybill_nr ~ ; &common_debug("[API] dcb_upload_oms_waybill : [soapenvelope=$soapenvelope]") ; &dcb_send_it('UploadOMSWaybill') ; &dcb_parse_it ; &dcb_read_it('UploadOMSWaybill') ; } #------------------------------------------------------------------------------- sub dcb_send_it { my ($soapaction) = @_ ; my $environment = ($testdcd) ? 'APIUAT' : 'API' ; my $header_soapaction = "http://tempuri.org/IOMSIntegrate/$soapaction" ; my $host = "https://dcboms.co.za/$environment/OMSIntegrate.svc" ; &common_write_log("dcb/xml_send_$now_year\_$now_mm.log","$now_ccyymmddhrmnsc|$now_ccyy_mm_ddT$now_hh_min_sec|$soapaction|$host|$header_soapaction|$soapenvelope|"); &common_debug("[API] dcb_send_it : [host=$host]") ; &common_debug("[API] dcb_send_it : [soapaction=$header_soapaction]") ; if ($testing == 1 && $useropts{it}{$username} && $soapaction ne 'PostalCode') { &common_debug(">>>>>> *** TESTING, $soapaction API call NOT SENT *** <<<<<<") ; return ; } my $userAgent = LWP::UserAgent->new(); my $request = HTTP::Request->new(POST => $host); $request->header(SOAPAction => "$header_soapaction"); $request->content($soapenvelope); $request->content_type("text/xml; charset=utf-8"); my $response = $userAgent->request($request); # Check response my $response_code = $response -> code ; my $response_content = $response -> content ; &common_debug("[API] dcb_send_it : [response_code=$response_code]") ; &common_debug("[API] response_content : [response_content=$response_content]") ; $returnxml = $response_content ; &common_write_log("dcb/xml_response_$now_year\_$now_mm.log","$now_ccyymmddhrmnsc|$now_ccyy_mm_ddT$now_hh_min_sec|$soapaction|$response_code|$returnxml|"); } #------------------------------------------------------------------------------- sub dcb_parse_it { # use Data::Dumper; # print Dumper(\$returnxml); # exit; $returnxml =~ s/[\x80-\xFF]/?/g ; my $xml = new XML::Simple or die "Cant instantiate object XML::Simple $!" ; # my $xmldata = $xml->XMLin($returnxml) or die "Cant open xmldata $!" ; $xmldata = $xml->XMLin($returnxml, forcearray => 1) or die "Cant open xmldata $!"; if ($debug) { use Data::Dumper; print Dumper(\$xmldata); # exit ; } } #------------------------------------------------------------------------------- sub dcb_read_it { my ($soapaction) = @_ ; # my $result = '' ; if ($soapaction eq 'UploadOMSWaybill') { our $uploadwaybillresult = $xmldata->{'s:Body'}->[0]->{'UploadOMSWaybillResponse'}->[0]->{'UploadOMSWaybillResult'}->[0] ; } elsif ($soapaction eq 'savewabill') { our $savewabillResult = $xmldata->{'s:Body'}->[0]->{'savewabillResponse'}->[0]->{'savewabillResult'}->[0] ; } elsif ($soapaction eq 'PostalCode') { our $routeCode = '' ; # our $routeCode = '' ; foreach my $hashref (@{$xmldata->{'s:Body'}->[0]->{'PostalCodeResponse'}->[0]->{'PostalCodeResult'}->[0]->{'a:ArrayOfpostalCode'} } ) { foreach $address (@{$hashref}{'a:postalCode'}) { $routeCode = ${$hashref}{'a:postalCode'}->[0]->{'a:routeCode'}->[0] ; } } # $routeCode = substr($routeCode,0,3) ; } elsif ($soapaction eq 'TracknTrace') { foreach my $hashref (@{$xmldata->{'s:Body'}->[0]->{'TracknTraceResponse'}->[0]->{'TracknTraceResult'}->[0]->{'a:Waybill'} } ) { $trackntrace{booking_date} = (ref(${$hashref}{'a:BookingDate'}->[0]) eq 'HASH') ? '' : ${$hashref}{'a:BookingDate'}->[0] ; $trackntrace{comments} = ${$hashref}{'a:Comments'}->[0]->{'content'} ; $trackntrace{consignee_name} = (ref(${$hashref}{'a:ConsigneeName'}->[0]) eq 'HASH') ? '' : ${$hashref}{'a:ConsigneeName'}->[0] ; $trackntrace{consignor_name} = (ref(${$hashref}{'a:ConsignorName'}->[0]) eq 'HASH') ? '' : ${$hashref}{'a:ConsignorName'}->[0] ; $trackntrace{current_status} = (ref(${$hashref}{'a:CurrentStatus'}->[0]) eq 'HASH') ? '' : ${$hashref}{'a:CurrentStatus'}->[0] ; $trackntrace{delivery_date} = (ref(${$hashref}{'a:DeliveryDate'}->[0]) eq 'HASH') ? '' : ${$hashref}{'a:DeliveryDate'}->[0] ; $trackntrace{insured_value} = (ref(${$hashref}{'a:InsuredValue'}->[0]) eq 'HASH') ? '' : ${$hashref}{'a:InsuredValue'}->[0] ; $trackntrace{number_of_parcels} = (ref(${$hashref}{'a:NumberOfParcels'}->[0]) eq 'HASH') ? '' : ${$hashref}{'a:NumberOfParcels'}->[0] ; $trackntrace{receiver_address_line_1} = (ref(${$hashref}{'a:ReceiverAddressLine1'}->[0]) eq 'HASH') ? '' : ${$hashref}{'a:ReceiverAddressLine1'}->[0] ; $trackntrace{receiver_address_line_2} = (ref(${$hashref}{'a:ReceiverAddressLine2'}->[0]) eq 'HASH') ? '' : ${$hashref}{'a:ReceiverAddressLine2'}->[0] ; $trackntrace{receiver_city} = (ref(${$hashref}{'a:ReceiverCity'}->[0]) eq 'HASH') ? '' : ${$hashref}{'a:ReceiverCity'}->[0] ; $trackntrace{receiver_contact_name} = (ref(${$hashref}{'a:ReceiverContactName'}->[0]) eq 'HASH') ? '' : ${$hashref}{'a:ReceiverContactName'}->[0] ; $trackntrace{receiver_contact_tel_1} = (ref(${$hashref}{'a:ReceiverContactTel1'}->[0]) eq 'HASH') ? '' : ${$hashref}{'a:ReceiverContactTel1'}->[0] ; $trackntrace{receiver_name} = ${$hashref}{'a:ReceiverName'}->[0]->{'content'} ; $trackntrace{receiver_postal_code} = (ref(${$hashref}{'a:ReceiverPostalCode'}->[0]) eq 'HASH') ? '' : ${$hashref}{'a:ReceiverPostalCode'}->[0] ; $trackntrace{receiver_suburb} = (ref(${$hashref}{'a:ReceiverSuburb'}->[0]) eq 'HASH') ? '' : ${$hashref}{'a:ReceiverSuburb'}->[0] ; $trackntrace{sender_address_line_1} = (ref(${$hashref}{'a:SenderAddressLine1'}->[0]) eq 'HASH') ? '' : ${$hashref}{'a:SenderAddressLine1'}->[0] ; $trackntrace{sender_address_line_2} = (ref(${$hashref}{'a:SenderAddressLine2'}->[0]) eq 'HASH') ? '' : ${$hashref}{'a:SenderAddressLine2'}->[0] ; $trackntrace{sender_city} = (ref(${$hashref}{'a:SenderCity'}->[0]) eq 'HASH') ? '' : ${$hashref}{'a:SenderCity'}->[0] ; $trackntrace{sender_contact_name} = (ref(${$hashref}{'a:SenderContactName'}->[0]) eq 'HASH') ? '' : ${$hashref}{'a:SenderContactName'}->[0] ; $trackntrace{sender_contact_tel} = (ref(${$hashref}{'a:SenderContactTel'}->[0]) eq 'HASH') ? '' : ${$hashref}{'a:SenderContactTel'}->[0] ; $trackntrace{sender_postal_code} = (ref(${$hashref}{'a:SenderPostalCode'}->[0]) eq 'HASH') ? '' : ${$hashref}{'a:SenderPostalCode'}->[0] ; $trackntrace{sender_suburb} = (ref(${$hashref}{'a:SenderSuburb'}->[0]) eq 'HASH') ? '' : ${$hashref}{'a:SenderSuburb'}->[0] ; $trackntrace{service_type_code} = (ref(${$hashref}{'a:ServiceTypeCode'}->[0]) eq 'HASH') ? '' : ${$hashref}{'a:ServiceTypeCode'}->[0] ; $trackntrace{shipment_is_insured} = (ref(${$hashref}{'a:ShipmentIsInsured'}->[0]) eq 'HASH') ? '' : ${$hashref}{'a:ShipmentIsInsured'}->[0] ; $trackntrace{shipper_reference} = (ref(${$hashref}{'a:ShipperReference'}->[0]) eq 'HASH') ? '' : ${$hashref}{'a:ShipperReference'}->[0]->{''} ; $trackntrace{account_nr} = (ref(${$hashref}{'a:accNr'}->[0]) eq 'HASH') ? '' : ${$hashref}{'a:accNr'}->[0] ; $trackntrace{pod} = ${$hashref}{'a:pod'}->[0]->{'xmlns:b'} ; $trackntrace{waybill_date} = (ref(${$hashref}{'a:waybillDate'}->[0]) eq 'HASH') ? '' : ${$hashref}{'a:waybillDate'}->[0] ; $trackntrace{waybill_number} = (ref(${$hashref}{'a:waybillNumber'}->[0]) eq 'HASH') ? '' : ${$hashref}{'a:waybillNumber'}->[0] ; my $additional_info = $hashref->{'a:additionalInformation'}->[0]->{'b:AdditionalInformation'}->[0]; $trackntrace{additional_information}{additional_info_code} = (ref($additional_info->{'b:additionalInfoCode'}->[0]) eq 'HASH') ? '' : $additional_info->{'b:additionalInfoCode'}->[0]; $trackntrace{additional_information}{additional_info_value} = (ref($additional_info->{'b:additionalInfoValue'}->[0]) eq 'HASH') ? '' : $additional_info->{'b:additionalInfoValue'}->[0]; $trackntrace{additional_information}{waybill_number} = (ref($additional_info->{'b:waybillNumber'}->[0]) eq 'HASH') ? '' : $additional_info->{'b:waybillNumber'}->[0]; my $tracking_details = $hashref->{'a:trackingDetail'}->[0]->{'b:TrackingDetail'}; for my $i (0..$#$tracking_details) { my $event_index = $i + 1; $trackntrace{tracking_detail}{event_code}{$event_index} = (ref($tracking_details->[$i]->{'b:eventCode'}->[0]) eq 'HASH') ? '' : $tracking_details->[$i]->{'b:eventCode'}->[0]; $trackntrace{tracking_detail}{event_date}{$event_index} = (ref($tracking_details->[$i]->{'b:eventDate'}->[0]) eq 'HASH') ? '' : $tracking_details->[$i]->{'b:eventDate'}->[0]; $trackntrace{tracking_detail}{event_description}{$event_index} = (ref($tracking_details->[$i]->{'b:eventDescription'}->[0]) eq 'HASH') ? '' : $tracking_details->[$i]->{'b:eventDescription'}->[0]; $trackntrace{tracking_detail}{event_hub_code}{$event_index} = (ref($tracking_details->[$i]->{'b:eventHubCode'}->[0]) eq 'HASH') ? '' : $tracking_details->[$i]->{'b:eventHubCode'}->[0]; $trackntrace{tracking_detail}{event_time}{$event_index} = (ref($tracking_details->[$i]->{'b:eventTime'}->[0]) eq 'HASH') ? '' : $tracking_details->[$i]->{'b:eventTime'}->[0]; } # $trackntrace{additional_information}{additional_info_code} = ${$hashref}{'a:additionalInformation'}->[0]->{'b:AdditionalInformation'}->[0]->{'b:additionalInfoCode'}->[0] ; # $trackntrace{additional_information}{additional_info_value} = ${$hashref}{'a:additionalInformation'}->[0]->{'b:AdditionalInformation'}->[0]->{'b:additionalInfoValue'}->[0] ; # $trackntrace{additional_information}{waybill_number} = ${$hashref}{'a:additionalInformation'}->[0]->{'b:AdditionalInformation'}->[0]->{'b:waybillNumber'}->[0] ; # $trackntrace{tracking_detail}{event_code}{1} = ${$hashref}{'a:trackingDetail'}->[0]->{'b:TrackingDetail'}->[0]->{'b:eventCode'}->[0] ; # $trackntrace{tracking_detail}{event_date}{1} = ${$hashref}{'a:trackingDetail'}->[0]->{'b:TrackingDetail'}->[0]->{'b:eventDate'}->[0] ; # $trackntrace{tracking_detail}{event_description}{1} = ${$hashref}{'a:trackingDetail'}->[0]->{'b:TrackingDetail'}->[0]->{'b:eventDescription'}->[0] ; # $trackntrace{tracking_detail}{event_hub_code}{1} = ${$hashref}{'a:trackingDetail'}->[0]->{'b:TrackingDetail'}->[0]->{'b:eventHubCode'}->[0] ; # $trackntrace{tracking_detail}{event_time}{1} = ${$hashref}{'a:trackingDetail'}->[0]->{'b:TrackingDetail'}->[0]->{'b:eventTime'}->[0] ; # $trackntrace{tracking_detail}{event_code}{2} = ${$hashref}{'a:trackingDetail'}->[0]->{'b:TrackingDetail'}->[1]->{'b:eventCode'}->[0] ; # $trackntrace{tracking_detail}{event_date}{2} = ${$hashref}{'a:trackingDetail'}->[0]->{'b:TrackingDetail'}->[1]->{'b:eventDate'}->[0] ; # $trackntrace{tracking_detail}{event_description}{2} = ${$hashref}{'a:trackingDetail'}->[0]->{'b:TrackingDetail'}->[1]->{'b:eventDescription'}->[0] ; # $trackntrace{tracking_detail}{event_hub_code}{2} = ${$hashref}{'a:trackingDetail'}->[0]->{'b:TrackingDetail'}->[1]->{'b:eventHubCode'}->[0] ; # $trackntrace{tracking_detail}{event_time}{2} = ${$hashref}{'a:trackingDetail'}->[0]->{'b:TrackingDetail'}->[1]->{'b:eventTime'}->[0] ; } } # return ($result) ; # print "\n" . $xmldata->{'s:Body'}->[0]->{'savewabillResponse'}->[0]->{'savewabillResult'}->[0] ; # return unless $event_id ; # return unless $from_to ; # &db_min_ro("event_quotes","1,logistics_dcb_waybill","`id`='$event_id'","","") ; # my @waybill_nrs = split(/\-/,$db{event_quotes}{1}{logistics_waybill_nrs}) ; # my @dcb_waybill = split(/\-/,$logistics_dcb_waybill) ; # my $dcb_waybill = ($from_to eq 'to') ? "$dcb_waybill[0]-1" : "1-$dcb_waybill[1]" ; # $ii{$event_id}{logistics_dcb_waybill} = $dcb_waybill ; # our $testing = 1 ; # &db_min_upd('event_quotes',"`id`='$event_id'") ; # &db_min_upd('event_quotes',"`id`='5136'") ; } #------------------------------------------------------------------------------- # sub dcb_send_it_get_route_code { # my ($postal_code,$suburb) = @_ ; # my $message = qq~ # # # # # $postal_code # $suburb # # # # # ~ ; # if ($debug) { # print $message; # } # my $userAgent = LWP::UserAgent->new(); # my $request = HTTP::Request->new(POST => 'https://dcboms.co.za/APIUAT/OMSIntegrate.svc'); # $request->header(SOAPAction => '"http://tempuri.org/IOMSIntegrate/savewabill"'); # $request->content($message); # $request->content_type("text/xml; charset=utf-8"); # my $response = $userAgent->request($request); # # Check response # my $response_code = $response -> code ; # my $response_content = $response -> content ; # $returnxml = $response_content ; # } #------------------------------------------------------------------------------- 1 ;