getActionName(), ['config', 'easypackWidget']) && !stConfig::getInstance('stPaczkomatyBackend')->get('enabled')) { $this->setFlash('error', $this->getContext()->getI18N()->__('app.requires.configuration'), false); return $this->forward('stPaczkomatyBackend', 'config'); } } public function executeDispatchOrderPrintOut() { $i18n = $this->getContext()->getI18N(); $id = $this->getRequestParameter('id'); $dispatchOrder = PaczkomatyDispatchOrderPeer::retrieveByPK($id); $api = stInPostApi::getInstance(); if (null === $dispatchOrder) { $this->setFlash('error', $i18n->__('Wybrane zlecenie odbioru nie istnieje.')); return $this->redirect($this->getRequest()->getReferer()); } try { $response = $api->getDispatchOrderPrintOut($dispatchOrder->getDispatchOrderId()); } catch (stInPostApiException $e) { $message = [$i18n->__('Wystąpił błąd podczas drukowania zlecenia odbioru') . ':']; if (!empty($api->getLastError()->details)) { $error = $api->getLastError()->details; } elseif (!empty($api->getLastError()->message)) { $error = $api->getLastError()->message; } else { $error = $e->getMessage(); } $message[] = $error; $this->setFlash('error', implode('
', $message)); return $this->redirect($this->getRequest()->getReferer()); } return $this->downloadDocument($response, stPropelSeoUrlBehavior::makeSeoFriendly($i18n->__('Zlecenie odbioru')).'-'.$dispatchOrder->getDispatchOrderExternalId()); } public function executeDispatchOrder() { if (!stDeliveryTypeConfiguration::has('inpostk')) { return $this->redirect($this->getRequest()->getReferer()); } $i18n = $this->getContext()->getI18N(); if ($this->getRequest()->getMethod() == sfRequest::POST) { $ids = $this->getRequestParameter('paczkomaty_pack[selected]'); } else { $ids = [$this->getRequestParameter('id')]; } $shipmentIds = []; $packs = PaczkomatyPackPeer::retrieveByPKsOrder(array_values($ids)); if (empty($packs)) { $this->setFlash('error', $i18n->__('Przesyłki o id %%id%% nie istnieją.', [ '%%id%%' => implode(', ', $ids), ])); return $this->redirect($this->getRequest()->getReferer()); } $api = stInPostApi::getInstance(); $errors = []; foreach ($packs as $pack) { if (null !== $pack->getDispatchOrderId()) { $errors[] = $i18n->__('Dla przesyłki %%shipment%% zostało już utworzone zlecenie odbioru.', [ '%%shipment%%' => $pack->getTrackingNumber(), ]); continue; } if ($pack->getSendingMethod() != 'dispatch_order') { $errors[] = $i18n->__('Przesyłka %%shipment%% ma nieprawidłową metodę wysyłki', [ '%%shipment%%' => $pack->getTrackingNumber(), ]); continue; } $shipmentIds[] = $pack->getInpostShipmentId(); } if (!empty($errors)) { $errors = array_merge([$i18n->__('Wystąpił błąd podczas tworzenia zlecenia odbioru') . ':'], $errors); $this->setFlash('error', implode('
', $errors)); return $this->redirect($this->getRequest()->getReferer()); } try { $response = $api->createDispatchOrders($shipmentIds); } catch (stInPostApiException $e) { $error = $api->getLastError(); $message = [$i18n->__('Wystąpił błąd podczas tworzenia zlecenia odbioru') . ':']; if (isset($error->details->shipments)) { foreach ($error->details->shipments as $index => $shipmentError) { $message[] = stInPostApi::translateErrorMessage($shipmentError, [ '%%subject%%' => $i18n->__('Przesyłka'), '%%subject_id%%' => $packs[$index]->getTrackingNumber(), ]); } $this->setFlash('error', implode('
', $message)); } else { $this->setFlash('error', $e->getMessage()); } return $this->redirect($this->getRequest()->getReferer()); } while (!isset($response->external_id)) { sleep(5); $response = stInPostApi::getInstance()->getDispatchOrder($response->id); } $dispatchOrder = new PaczkomatyDispatchOrder(); $dispatchOrder->setDispatchOrderId($response->id); $dispatchOrder->setDispatchOrderExternalId($response->external_id); $dispatchOrder->setStatus($response->status); $dispatchOrder->save(); foreach ($packs as $pack) { $pack->setPaczkomatyDispatchOrder($dispatchOrder); $pack->save(); } return $this->redirect($this->getRequest()->getReferer()); } /** * Undocumented function * * @param PaczkomatyPack $paczkomaty_pack * @return void */ protected function deletePaczkomatyPack($paczkomaty_pack) { $api = stInPostApi::getInstance(); $i18n = $this->getContext()->getI18N(); try { $api->deleteShipment($paczkomaty_pack->getInpostShipmentId()); } catch (stInPostApiException $e) { throw new Exception($i18n->__('Przesyłka dla zamówienia "%%order%%": %%message%%', [ '%%order%%' => $paczkomaty_pack->getOrder()->getNumber(), '%%message%%' => $e->getMessage(), ])); } parent::deletePaczkomatyPack($paczkomaty_pack); } /** * {@inheritDoc} * @return PaczkomatyPack */ protected function getPaczkomatyPackOrCreate($id = 'id') { if (!isset($this->paczkomaty_pack)) { $pack = parent::getPaczkomatyPackOrCreate($id); $order = $pack->getOrder(); if ($pack->hasCourierService() && !stDeliveryTypeConfiguration::has('inpostk')) { return $this->redirect('@stOrder?action=edit&id=' . $order->getId()); } if ($pack->isNew()) { $packs = $order->getPaczkomatyPacks(); if ($packs) { return $this->redirect('@stPaczkomatyPlugin?action=edit&id=' . $packs[0]->getId() . '&order_id=' . $order->getId()); } } $i18n = $this->getContext()->getI18N(); if ($pack->isNew()) { $config = stConfig::getInstance('stPaczkomatyBackend'); $pack->setSendingMethod($config->get('sending_method')); $pack->setDropOffPoint($config->get('dropoff_point')); $pack->setDescription($i18n->__('Zamówienie ' . $pack->getOrder()->getNumber())); if ($pack->hasCourierService() && $pack->hasCashOnDelivery()) { $pack->setInsurance($pack->getCashOnDelivery(true)); } } else { $api = stInPostApi::getInstance(); try { $response = $api->getShipment($pack->getInpostShipmentId()); $pack->setSendingMethod($response->custom_attributes->sending_method); if (isset($response->custom_attributes->target_point)) { $pack->setCustomerPickupPoint($response->custom_attributes->target_point); } if (isset($response->custom_attributes->dropoff_point)) { $pack->setDropOffPoint($response->custom_attributes->dropoff_point); } if (!$pack->getTrackingNumber()) { $pack->setTrackingNumber($response->tracking_number); } if (isset($response->parcels[0]->template)) { $pack->setParcelTemplate($response->parcels[0]->template); } $pack->setStatus($response->status); $pack->setEndOfWeekCollection($response->end_of_week_collection); $pack->setCashOnDelivery(isset($response->cod) && $response->cod && $response->cod->amount ? $response->cod->amount : 0); $pack->setInsurance(isset($response->insurance) && $response->insurance && $response->insurance->amount ? $response->insurance->amount : 0); } catch (stInPostApiException $e) { $this->getRequest()->setError('api', $e->getMessage()); } } if ($pack->hasCourierService()) { $this->removeField('customer_pickup_point'); $this->removeField('pack_type'); } else { $this->removeField('parcels'); $this->removeField('customer_country_code'); $this->removeField('customer_name'); $this->removeField('customer_company_name'); $this->removeField('customer_post_code'); $this->removeField('customer_city'); $this->removeField('customer_street'); $this->removeField('customer_building_number'); } if (!$pack->isAdminGeneratorPlainField()) { $this->hideAction('download_sticker'); $this->removeField('status_label'); $this->removeField('tracking_number'); } else { $this->hideAction('_save'); } } return $this->paczkomaty_pack; } public function executeList() { if (!stDeliveryTypeConfiguration::has('inpostk')) { $this->hideField('dispatch_order_id'); } if ($this->getRequestParameter('order_id')) { return $this->redirect('@stOrder?action=edit&id=' . $this->getRequestParameter('order_id')); } try { $result = parent::executeList(); $this->pager->getResults(); return $result; } catch (stInPostApiException $e) { $i18n = $this->getContext()->getI18N(); $this->setFlash('error', $i18n->__('Wystąpił podczas próby nawiązania połączenia z API (błąd: %%error%%)', [ '%%error%%' =>$e->getMessage() ])); return $this->redirect('@stPaczkomatyPlugin?action=config'); } } public function executeDownloadLabel() { $pack = PaczkomatyPackPeer::retrieveByPK($this->getRequestParameter('id')); $api = stInPostApi::getInstance(); $i18n = $this->getContext()->getI18N(); try { if ($pack->getInpostShipmentId()) { $id = $pack->getInpostShipmentId(); } else { $shipment = $api->getShipmentByTrackingNumber($pack->getTrackingNumber()); $id = $shipment->id; } $response = $api->downloadLabel($id); return $this->downloadDocument($response, $i18n->__('etykieta').'-'.$pack->getTrackingNumber(), stConfig::getInstance('stPaczkomatyBackend')->get('label_format')); } catch (stInPostApiException $e) { $i18n = $this->getContext()->getI18N(); if (!empty($api->getLastError()->details)) { $error = $api->getLastError()->details; } elseif (!empty($api->getLastError()->message)) { $error = $api->getLastError()->message; } else { $error = $e->getMessage(); } $this->getRequest()->setError('api', $i18n->__('Wystąpił bład podczas pobierania etykiety (Błąd: "%error%")', array('%error%' => $error))); return $this->forward('stPaczkomatyBackend', 'edit'); } } public function validateEdit() { $request = $this->getRequest(); if ($request->getMethod() == sfRequest::POST) { $this->related_object = OrderPeer::retrieveByPK($this->getRequestParameter('order_id')); $pack = $this->getPaczkomatyPackOrCreate(); $this->updatePaczkomatyPackFromRequest(); $api = stInPostApi::getInstance(); $i18n = $this->getContext()->getI18N(); $config = stConfig::getInstance('stPaczkomatyBackend'); $required = ['customer_email', 'customer_phone', 'customer_pickup_point']; $data = $this->getRequestParameter('paczkomaty_pack'); if ($pack->hasCourierService()) { $required = ['customer_street', 'customer_building_number', 'customer_post_code', 'customer_city', 'customer_country_code', 'customer_email', 'customer_phone', 'parcels']; } if (in_array($pack->getSendingMethod(), array('parcel_locker'))) { $required[] = 'dropoff_point'; } foreach ($required as $fieldName) { if (!isset($data[$fieldName]) || empty($data[$fieldName])) { $request->setError('paczkomaty_pack{' . $fieldName . '}', $i18n->__('Proszę uzupełnić pole.')); } } if ($pack->hasCourierService() && empty($data['customer_name']) && empty($data['customer_company_name'])) { $request->setError('paczkomaty_pack{customer_name}', $i18n->__('Musisz podać nazwę firmy lub imię i nazwisko odbiorcy')); $request->setError('paczkomaty_pack{customer_company_name}', $i18n->__('Musisz podać nazwę firmy lub imię i nazwisko odbiorcy')); } if ($pack->hasCourierService() && isset($data['parcels'])) { $this->validateParcelSize($pack, $data['parcels']); } if ($request->hasErrors()) { return false; } $shipmentRequest = array( 'receiver' => array( 'email' => $pack->getCustomerEmail(), 'phone' => $pack->getCustomerPhone(), ), 'sender' => array( "company_name" => !empty($config->get('sender_company')) ? $config->get('sender_company') : null, "first_name" => !empty($config->get('sender_name')) ? $config->get('sender_name') : null, "last_name" => !empty($config->get('sender_surname')) ? $config->get('sender_surname') : null, "email" => trim($config->get('sender_email')), "phone" => str_replace(array('+48', ' ', '-'), '', $config->get('sender_phone')), "address" => array( "street" => $config->get('sender_street'), "building_number" => $config->get('sender_building'), "city" => $config->get('sender_city'), "post_code" => $config->get('sender_post_code'), "country_code" => $config->get('sender_country_code'), ), ), 'custom_attributes' => array( 'target_point' => $pack->getCustomerPickupPoint(), 'sending_method' => $pack->getSendingMethod(), ), 'service' => $pack->getService(), 'reference' => $pack->getDescription(), 'only_choice_of_offer' => false, ); if (!$pack->hasCourierService()) { $shipmentRequest['parcels'] = [ ['template' => $pack->getParcelTemplate()], ]; } else { $parcels = []; list($firstName, $lastName) = explode(' ', $pack->getCustomerName(), 2); foreach (array_values($pack->getParcels()) as $index => $parcel) { $parcels[] = [ 'id' => $index + 1, 'dimensions' => [ 'width' => $parcel['width'] * 10, 'height' => $parcel['height'] * 10, 'length' => $parcel['length'] * 10, 'unit' => 'mm', ], 'weight' => [ 'amount' => $parcel['weight'], 'unit' => 'kg', ] ]; } $shipmentRequest['parcels'] = $parcels; $shipmentRequest['receiver'] = array_merge($shipmentRequest['receiver'], [ 'company_name' => !empty($pack->getCustomerCompanyName()) ? $pack->getCustomerCompanyName() : null, 'first_name' => !empty($firstName) ? $firstName : null, 'last_name' => !empty($lastName) ? $lastName : null, 'address' => [ 'street' => $pack->getCustomerStreet(), 'building_number' => $pack->getCustomerBuildingNumber(), 'post_code' => $pack->getCustomerPostCode(), 'city' => $pack->getCustomerCity(), 'country_code' => $pack->getCustomerCountryCode(), ], ]); } if ($pack->getInsurance() > 0) { $shipmentRequest['insurance'] = array( 'amount' => $pack->getInsurance(), 'currency' => 'PLN', ); } if ($pack->getEndOfWeekCollection()) { $shipmentRequest['end_of_week_collection'] = true; } if ($pack->getCashOnDelivery() > 0) { $shipmentRequest['cod'] = array( 'amount' => $pack->getCashOnDelivery(), 'currency' => 'PLN', ); } if (in_array($pack->getSendingMethod(), array('parcel_locker'))) { $shipmentRequest['custom_attributes']['dropoff_point'] = $pack->getDropOffPoint(); } if (!$request->hasErrors()) { try { $response = $api->createShipment($shipmentRequest); $count = 0; while ((null === $response->tracking_number || $response->status != 'confirmed') && $count <= 5) { sleep(5); $result = $api->getShipment($response->id); if ($result && is_object($result)) { $response = $result; } if (!empty($response->offers) && $response->offers[0]->status == 'unavailable') { $request->setError('api', stInPostApi::formatUnavailableError($response->offers[0]->unavailability_reasons)); break; } $count++; } $request->setParameter('create_shipment', $response, 'soteshop/stInPostApi'); } catch (stInPostApiException $e) { $error = $api->getLastError(); if ($error && $error->error == stInPostApi::VALIDATION_FAILED) { if (isset($error->details->cod)) { $request->setError('paczkomaty_pack{cash_on_delivery}', stInPostApi::formatDetailError($error->details->cod)); } if (isset($error->details->insurance)) { $request->setError('paczkomaty_pack{insurance}', stInPostApi::formatDetailError($error->details->insurance)); } if (isset($error->details->custom_attributes)) { foreach ($error->details->custom_attributes as $item) { if (isset($item->dropoff_point) && $item->dropoff_point[0] == "dropoff_and_target_points_must_be_different") { $request->setError('paczkomaty_pack{dropoff_point}', $i18n->__('Paczkomat nadawcy nie może być taki sam jak paczkomat odbiorcy')); } } } if (isset($error->details->receiver[0]->email)) { $request->setError('paczkomaty_pack{customer_email}', stInPostApi::formatDetailError($error->details->receiver[0]->email)); } if (isset($error->details->receiver[0]->address[0]->post_code)) { $request->setError('paczkomaty_pack{customer_post_code}', stInPostApi::formatDetailError($error->details->receiver[0]->address[0]->post_code)); } if (isset($error->details->sender[0]->phone)) { sfLoader::loadHelpers(array('Helper', 'stUrl')); $request->setError('api', $i18n->__('Numer nadawcy jest nieprawidłowy. Numer musi być podany w formacie 9 cyfrowym bez spacji oraz myślników. Przejdź do %link%, aby skorygować problem.', array( '%link%' => st_link_to($i18n->__('konfiguracji'), '@stPaczkomatyPlugin?action=config', array('target' => '_blank')), ))); } if (isset($error->details->sender[0]->address[0]->post_code)) { sfLoader::loadHelpers(array('Helper', 'stUrl')); $request->setError('api', $i18n->__('Nieprawidłowy kod pocztowy nadawcy. Przejdź do %link%, aby skorygować problem.', array( '%link%' => st_link_to($i18n->__('konfiguracji'), '@stPaczkomatyPlugin?action=config', array('target' => '_blank')), ))); } if (isset($error->details->service)) { $request->setError('api', stInPostApi::formatDetailError($error->details->service)); } if (!$request->hasErrors()) { $request->setError('api', $i18n->__("Wystąpił nieobsługiwany wyjątek (błąd: %error%)", array('%error%' => json_encode($error->details)))); } } else { $request->setError('api', $e->getMessage()); } } } } return !$request->hasErrors(); } /** * Zapisuje model PaczkomatyPack * * @param PaczkomatyPack $pack * @return void */ protected function savePaczkomatyPack($pack) { $response = $this->getRequest()->getParameter('create_shipment', null, 'soteshop/stInPostApi'); if (!$pack->isNew() && $pack->getInpostShipmentId()) { $api = stInPostApi::getInstance(); $api->deleteShipment($pack->getInpostShipmentId()); } $pack->setInpostShipmentId($response->id); $pack->setStatus($response->status); $pack->setTrackingNumber($response->tracking_number); $parcels = $pack->getParcels(); foreach ($response->parcels as $index => $parcel) { $parcels[$index]['number'] = $parcel->tracking_number; } $pack->setParcels($parcels); $isNew = $pack->isNew(); $result = parent::savePaczkomatyPack($pack); if ($isNew) { $this->updateOrderStatus($pack->getOrder()); } return $result; } public function executeEasypackWidget() { $this->setLayout(false); if (!$this->getRequestParameter('sandbox')) { $this->endpoint = 'https://api-pl-points.easypack24.net/v1'; } else { $this->endpoint = 'https://stage-api-pl-points.easypack24.net/v1'; } $this->scope = $this->getRequestParameter('scope'); } public function validateConfig() { $request = $this->getRequest(); $this->config = stConfig::getInstance('stPaczkomatyBackend'); $api = stInPostApi::getInstance(); $i18n = $this->getContext()->getI18N(); if ($request->getMethod() == sfRequest::POST) { $this->updateConfigFromRequest(); if ($this->config->get('enabled')) { if (!$this->config->get('token')) { $request->setError('config{token}', $i18n->__('Proszę uzupełnić pole.')); } if (!$request->hasErrors()) { if ($api->isValid()) { if (!$this->config->get('sending_method')) { $request->setError('config{sending_method}', $i18n->__('Proszę uzupełnić pole.')); } elseif ($this->config->get('sending_method') == 'parcel_locker' && !$this->config->get('dropoff_point')) { $request->setError('config{dropoff_point}', $i18n->__('Proszę uzupełnić pole.')); } $required = array('sender_email', 'sender_country_code', 'sender_street', 'sender_building', 'sender_city', 'sender_post_code'); if (!$this->config->get('sender_company') && (!$this->config->get('sender_company') || !$this->config->get('sender_company'))) { $required = array_merge(array('sender_name', 'sender_surname'), $required); } foreach ($required as $field) { if (!$this->config->get($field)) { $request->setError('config{' . $field . '}', $i18n->__('Proszę uzupełnić pole.')); } } } try { $organizations = $api->getOrganizations(); $request->setParameter('organizations', $organizations, 'soteshop/stInPostApi'); } catch (stInPostApiException $e) { $request->setError('api', $e->getMessage()); } } } } if ($this->config->get('enabled') && $this->config->get('token') && !$request->hasErrors() && !$api->isValid()) { $request->setError('api', $api->getLastErrorMessage()); } return !$request->hasErrors(); } protected function updateConfigFromRequest() { parent::updateConfigFromRequest(); $this->updateSenderFromOrganization(); } protected function updateOrderStatus(Order $order) { $config = stConfig::getInstance('stPaczkomatyBackend'); if ($config->get('order_status') && $order->getOrderStatusId() != $config->get('order_status')) { $order->setOrderStatusId($config->get('order_status')); $order->save(); if ($order->getOrderStatus()->getHasMailNotification()) { $orderNotification = new stOrderMailNotification($this->getContext()); $orderNotification->sendStatusChangeNotification($order); } } } protected function saveConfig() { $ret = parent::saveConfig(); stTheme::clearSmartyCache(true); return $ret; } protected function updateSenderFromOrganization() { $organizations = $this->getRequest()->getParameter('organizations', null, 'soteshop/stInPostApi'); if ($organizations && !$this->config->get('organization')) { $organization = $organizations->items[0]; $this->config->set('organization', $organization->id); $this->config->set('sender_company', $organization->name); $this->config->set('sender_street', $organization->address->street); $this->config->set('sender_building', $organization->address->building_number); $this->config->set('sender_post_code', $organization->address->post_code); $this->config->set('sender_country_code', $organization->address->country_code); $this->config->set('sender_city', $organization->address->city); $this->config->set('sender_email', $organization->contact_person->email); $this->config->set('sender_phone', $organization->contact_person->phone); $this->config->set('sender_name', $organization->contact_person->first_name); $this->config->set('sender_surname', $organization->contact_person->last_name); $this->config->set('services', $organization->services); } } protected function updatePaczkomatyPackFromRequest() { parent::updatePaczkomatyPackFromRequest(); $data = $this->getRequestParameter('paczkomaty_pack'); foreach (array('customer_email', 'customer_phone', 'customer_paczkomat', 'use_sender_paczkomat', 'sender_paczkomat', 'pack_type', 'insurance', 'cash_on_delivery', 'description') as $v) { if (isset($data[$v])) { call_user_func(array($this->paczkomaty_pack, sfInflector::camelize('set_' . $v)), $data[$v]); } } if (!isset($data['insurance'])) { $this->paczkomaty_pack->setInsurance(null); } if (!isset($data['cash_on_delivery'])) { $this->paczkomaty_pack->setCashOnDelivery(null); } } protected function getLabels() { $labels = parent::getLabels(); $labels['api'] = 'InPost'; return $labels; } protected function getConfigLabels() { $labels = parent::getConfigLabels(); $labels['api'] = 'InPost'; return $labels; } protected function addFiltersCriteria($c) { parent::addFiltersCriteria($c); if (isset($this->filters['dispatch_order']) && !empty($this->filters['dispatch_order'])) { $c->add(PaczkomatyDispatchOrderPeer::DISPATCH_ORDER_EXTERNAL_ID, $this->filters['dispatch_order']); } if (isset($this->filters['service_type']) && !empty($this->filters['service_type'])) { $c->addJoin(OrderPeer::ORDER_DELIVERY_ID, OrderDeliveryPeer::ID); $c->addJoin(OrderDeliveryPeer::DELIVERY_ID, DeliveryPeer::ID); $c->addJoin(DeliveryPeer::TYPE_ID, DeliveryTypePeer::ID); $c->add(DeliveryTypePeer::TYPE, $this->filters['service_type']); } } protected function deleteDispatchOrderPaczkomatyDispatchOrder($dispatchOrder) { $i18n = $this->getContext()->getI18N(); if (!in_array($dispatchOrder->getStatus(), ['sent', 'new'])) { throw new Exception($i18n->__('Zlecenie odbioru %%dispatch_order%% posiada nieprawidłowy status.', ['%%dispatch_order%%' => $dispatchOrder->getDispatchOrderExternalId()])); } $api = stInPostApi::getInstance(); try { $api->deleteDispatchOrder($dispatchOrder->getDispatchOrderId()); } catch (stInPostApiException $e) { throw new Exception($i18n->__('Zlecenie odbioru "%%dispatch_order%%": %%message%%', [ '%%dispatch_order%%' => $dispatchOrder->getDispatchOrderExternalId(), '%%message%%' => $e->getMessage(), ])); } return parent::deleteDispatchOrderPaczkomatyDispatchOrder($dispatchOrder); } protected function downloadDocument(string $content, string $filename, string $type = 'Pdf') { $types = [ 'Pdf' => 'application/pdf', 'Zpl' => 'application/octet-stream', 'Epl' => 'application/octet-stream', ]; if (!isset($types[$type])) { throw new Exception(sprintf('Przekazany typ plik nie jest obsługiwany (dostępne: %s)', implode(', ', array_keys($types)))); } $this->getResponse()->clearHttpHeaders(); $this->getResponse()->setHttpHeader('Content-Type', $types[$type]); $this->getResponse()->setHttpHeader('Content-Disposition', 'attachment;filename=' . $filename . '.' . lcfirst($type)); return $this->renderText($content); } protected function validateParcelSize(PaczkomatyPack $pack, array $parcels) { $errors = []; $validator = new stInPostParcelSizeValidator(); $validator->initialize($this->getContext(), [ 'service' => $pack->getService(), ]); if (!$validator->execute($parcels, $errors)) { $this->getRequest()->setError('paczkomaty_pack{parcels}', implode('
', $errors)); } } protected function getActionSelectControlOptions() { $options = parent::getActionSelectControlOptions(); if (!stDeliveryTypeConfiguration::has('inpostk')) { array_pop($options['NONE']); } return $options; } }