public function generateMultiple($package_ids, $output_doc_format = 'PDF', $output_doc_page_format = 'LBL_PRINTER', $policy = 'STOP_ON_FIRST_ERROR')
 {
     $session_type = '';
     $package_number = null;
     foreach ($package_ids as $id_package_ws) {
         $package = new DpdPolandPackage((int) $id_package_ws);
         if (!$session_type || $session_type == $package->getSessionType()) {
             $session_type = $package->getSessionType();
             if ($package_number === null) {
                 $package_number = $package->payerNumber;
             } elseif ($package_number !== $package->payerNumber) {
                 $package_number = 'null';
             }
         } else {
             self::$errors[] = $this->l('Manifests of DOMESTIC shipments cannot be mixed with INTERNATIONAL shipments');
             return false;
         }
     }
     $params = array('dpdServicesParamsV1' => array('pickupAddress' => $package->getSenderAddress($package_number), 'policy' => $policy, 'session' => array('sessionType' => $session_type, 'packages' => array())), 'outputDocFormatV1' => $output_doc_format, 'outputDocPageFormatV1' => $output_doc_page_format);
     foreach ($package_ids as $id_package_ws) {
         $params['dpdServicesParamsV1']['session']['packages'][] = array('packageId' => (int) $id_package_ws);
     }
     $result = $this->generateProtocolV1($params);
     if (isset($result['session']) && isset($result['session']['statusInfo']) && $result['session']['statusInfo']['status'] == 'OK') {
         foreach ($package_ids as $id_package_ws) {
             $manifest = new DpdPolandManifest();
             $manifest->id_manifest_ws = (int) $result['documentId'];
             $manifest->id_package_ws = (int) $id_package_ws;
             if (!$manifest->save()) {
                 return false;
             }
         }
         return $result['documentData'];
     } else {
         if (isset($result['session']['statusInfo']['description'])) {
             self::$errors[] = $result['session']['statusInfo']['description'];
         } elseif (isset($result['session']['statusInfo']['status'])) {
             self::$errors[] = $result['session']['statusInfo']['status'];
         }
         return false;
     }
 }
Esempio n. 2
0
 public static function separatePackagesBySession($ids)
 {
     $international_packages = array();
     $domestic_packages = array();
     foreach ($ids as $id_package_ws) {
         $package = new DpdPolandPackage((int) $id_package_ws);
         $session_type = $package->getSessionType();
         if ($session_type == 'INTERNATIONAL') {
             $international_packages[] = (int) $id_package_ws;
         } elseif ($session_type == 'DOMESTIC') {
             $domestic_packages[] = (int) $id_package_ws;
         }
     }
     return array('INTERNATIONAL' => $international_packages, 'DOMESTIC' => $domestic_packages);
 }
 public function generateLabelsForMultiplePackages($package_ids, $outputDocFormat, $outputDocPageFormat, $policy)
 {
     $sessionType = '';
     $packages = array();
     foreach ($package_ids as $id_package_ws) {
         $package = new DpdPolandPackage((int) $id_package_ws);
         if (!$sessionType || $sessionType == $package->getSessionType()) {
             $sessionType = $package->getSessionType();
         } else {
             self::$errors[] = $this->l('Manifests of DOMESTIC shipments cannot be mixed with INTERNATIONAL shipments');
             return false;
         }
         $packages[] = array('packageId' => (int) $id_package_ws);
     }
     $this->prepareSenderAddress();
     $params = array('dpdServicesParamsV1' => array('policy' => $policy, 'session' => array('packages' => $packages, 'sessionType' => $sessionType)), 'outputDocFormatV1' => $outputDocFormat, 'outputDocPageFormatV1' => $outputDocPageFormat, 'pickupAddress' => $this->sender);
     if (!($result = $this->generateSpedLabelsV1($params))) {
         return false;
     }
     if (isset($result['session']['statusInfo']['status']) && $result['session']['statusInfo']['status'] == 'OK') {
         foreach ($packages as $id_package_ws) {
             $package = new DpdPolandPackage($id_package_ws);
             $package->labels_printed = 1;
             $package->update();
         }
         return $result['documentData'];
     } else {
         $packages = $result['session']['statusInfo'];
         $packages = array_values($packages) === $packages ? $packages : array($packages);
         // array must be multidimentional
         foreach ($packages as $package) {
             if (isset($package['description'])) {
                 self::$errors[] = $package['description'];
             } elseif (isset($package['status'])) {
                 self::$errors[] = $package['status'];
             }
         }
         return false;
     }
 }