* * @package stOrder * @subpackage actions */ class stOrderActions extends autostOrderActions { protected $orderProductRequest = null; public function executeAjaxPriceModifiers() { $ids = explode('-', $this->getRequestParameter('ids')); $product = ProductPeer::retrieveByPK($this->getRequestParameter('id')); $price_brutto = stPrice::computePriceModifiers($product, $product->getPriceBrutto(), 'brutto'); $price_netto = stPrice::extract($price_brutto, $product->getVat()); $data = $this->getPriceModifierData($product, $ids); $ids = array(); foreach ($data as $v) { $ids[] = $v['selected']; } $options = ProductOptionsValuePeer::retrieveByPKs($ids); $price_type = ProductOptionsValuePeer::getPriceType($product); foreach ($options as $option) { stNewProductOptions::addProductPriceModifier($product, $option->getPrice(), $option->getDepth(), $price_type); } $price_brutto = stPrice::computePriceModifiers($product, $product->getPriceBrutto(), 'brutto'); $price_netto = stPrice::extract($price_brutto, $product->getVat()); $this->getResponse()->setContentType('application/json'); return $this->renderText(json_encode(array('pb' => $price_brutto, 'pn' => $price_netto, 'data' => $data))); } public static function getPriceModifierDataRecursive($product, $options, &$selected_ids, $price_type, &$data) { $product_config = $product->getConfiguration(); $select_options = array(); $field_id = $options[0]->getProductOptionsField()->getId(); $selected = $options[0]; $last_option_id = end($options)->getId(); $selected_id = current($selected_ids); foreach ($options as $option) { $option_id = $option->getId(); $field = $option->getProductOptionsField(); $current_field_id = $field->getId(); if ($field_id != $current_field_id) { $data[] = array('field' => $field->getName(), 'data' => $select_options, 'selected' => $selected->getId()); $selected_id = next($selected_ids); if ($selected->hasChildren()) { self::getPriceModifierDataRecursive($product, $selected->getChildOptions($product_config->get('hide_options_with_empty_stock')), $selected_ids, $price_type, $data); } $select_options = array(); $selected = $option; } elseif ($selected_id && $selected_id == $option_id || false === $selected_id && $option->getOptValue() == $field->getOptDefaultValue()) { $selected = $option; } $select_options[$option_id] = $option->getValue(); if ($last_option_id == $option_id) { $data[] = array('field' => $field->getName(), 'data' => $select_options, 'selected' => $selected->getId()); $selected_id = next($selected_ids); if ($selected->hasChildren()) { self::getPriceModifierDataRecursive($product, $selected->getChildOptions($product_config->get('hide_options_with_empty_stock')), $selected_ids, $price_type, $data); } } } return $data; } public function executeAjaxSearchProduct() { $query = $this->getRequestParameter('query'); $by = $this->getRequestParameter('by'); $vat_eu = $this->getRequestParameter('vat_eu'); $order = OrderPeer::retrieveByPK($this->getRequestParameter('order_id')); $currency = stCurrency::getInstance(sfContext::getInstance()); $prev_currency_id = $currency->get()->getId(); if ($order) { $order_currency = CurrencyPeer::retrieveByIso($order->getOrderCurrency()->getShortcut()); if ($order_currency) { $currency->set($order_currency->getId()); $dispatcher = $this->getController()->getDispatcher(); $dispatcher->connect('Product.postHydrate', array('appAddPricePluginListener', 'productPostHydrate')); $dispatcher->connect('ProductOptionsValue.postHydrate', array('appAddPricePluginListener', 'productOptionsValuePostHydrate')); $dispatcher->connect('ProductPeer.postAddSelectColumns', array('appAddPricePluginListener', 'productPostAddSelectColumns')); $dispatcher->connect('BasePeer.preDoSelectRs', array('appAddPricePluginListener', 'preDoSelectRs')); } } $c = new Criteria(); $c->setLimit(50); switch ($by) { case 'code': $c->add(ProductPeer::CODE, $query.'%', Criteria::LIKE); break; case 'name': $cc = $c->getNewCriterion(ProductI18nPeer::NAME, '%'.$query.'%', Criteria::LIKE); $cc->addOr($c->getNewCriterion(ProductPeer::OPT_NAME, '%'.$query.'%', Criteria::LIKE)); $c->add($cc); break; } Product::enableFrontendFunctions(); $products = ProductPeer::doSelectWithI18n($c, $order->getClientCulture()); $suggestions = array(); $data = array(); sfLoader::loadHelpers(array('Helper', 'stCurrency', 'stProductImage')); $i18n = $this->getContext()->getI18N(); if ($vat_eu) { $tax = TaxPeer::retrieveByTax(0); $tax_id = $tax->getId(); } foreach ($products as $product) { $price_modifiers = array(); $price_netto = $product->getPriceNetto(true, false, false); $price_brutto = $vat_eu ? $price_netto : $product->getPriceBrutto(true, false, false); $suggestions[] = $product->getCode().': '.$product->getName(); $hidden_data = array('pm' => $price_modifiers, 'io' => $product->getOptImage(), 'id' => $product->getId()); $data[] = array('ip' => st_product_image_path($product, 'icon'), 'c' => $product->getCode(), 'n' => $product->getName(), 'pn' => $price_netto, 't' => $vat_eu ? $tax_id : $product->getTaxId(), 'pb' => $price_brutto); } $currency->set($prev_currency_id); Product::enableFrontendFunctions(false); return $this->renderJSON(array('query' => $query, 'suggestions' => $suggestions, 'data' => $data)); } protected function getOrderOrCreate($id = 'id') { $config = stConfig::getInstance('stOrder'); $order = parent::getOrderOrCreate($id); if ($order->isAllegroOrder() && $this->forward_parameters['type'] != 'allegro') { $this->forward_parameters['type'] = 'allegro'; return $this->redirect(stAdminGeneratorHelper::generateModelUrl($order, 'stOrder', 'edit', $this->forward_parameters)); } $mode = $this->getConfigurationParameter('mode'); if ($mode == 'edit') { $this->hideField('proforma'); $this->hideField('invoice'); } if ($order->getInvoice() && !$order->getInvoice()->getIsConfirm() && $order->getInvoice()->getIsRequest()) { $this->hideField('invoice'); } if ($order->getInvoice() && $order->getInvoice()->getIsConfirm()) { $this->hideField('invoice_request'); } if (!$order->getDiscountCouponCode()) { $this->hideField('summary_discount_coupon_code'); } if (!$order->isAllegroOrder()) { $this->hideField('allegro'); } if (!$config->get('show_not_professional_purchase') || empty($order->getOrderUserDataBilling()->getCompany())) { $this->hideField('not_professional_purchase_label'); } return $order; } protected function getPriceModifierData($product, $selected_ids = array()) { $options = ProductOptionsValuePeer::doSelectByProduct($product); $price_type = ProductOptionsValuePeer::getPriceType($product); $data = array(); self::getPriceModifierDataRecursive($product, $options, $selected_ids, $price_type, $data); return $data; } /** * Filtr po kolumnie klient * Szukanie po imieniu i nazwisku, ale również po mail'u jeśli zawarta jest '@' w wyszukiwaniu * * @param Criteria $c */ protected function addFiltersCriteria($c) { if (isset($this->filters['assigned_id']) && $this->filters['assigned_id'] === 'none') { $this->filters['assigned_id_is_empty'] = true; } parent::addFiltersCriteria($c); if (isset($this->filters['order_product']) && $this->filters['order_product']) { if (is_numeric($this->filters['order_product'])) { $token = array('id' => $this->filters['order_product']); } else { $tokens = stJQueryToolsHelper::parseTokensFromRequest($this->filters['order_product']); $token = $tokens ? $tokens[0] : null; } if ($token && !isset($token['new'])) { $c->addJoin(OrderPeer::ID, OrderProductPeer::ORDER_ID); $c->add(OrderProductPeer::PRODUCT_ID, $token['id']); } elseif ($token) { $c->addJoin(OrderPeer::ID, OrderProductPeer::ORDER_ID); $cc = $c->getNewCriterion(OrderProductPeer::CODE, trim($token['id']), Criteria::LIKE); $cc->addOr($c->getNewCriterion(OrderProductPeer::NAME, '%'.trim($token['id']).'%', Criteria::LIKE)); $c->add($cc); } } if (isset($this->filters['filter_client']) && !empty($this->filters['filter_client'])) { $cc = $c->getNewCriterion(OrderPeer::OPT_CLIENT_NAME, '%'.$this->filters['filter_client'].'%', Criteria::LIKE); $cc->addOr($c->getNewCriterion(OrderPeer::OPT_CLIENT_EMAIL, '%'.$this->filters['filter_client'].'%', Criteria::LIKE)); $cc->addOr($c->getNewCriterion(OrderPeer::OPT_CLIENT_COMPANY, '%'.$this->filters['filter_client'].'%', Criteria::LIKE)); $c->add($cc); } if (isset($this->filters['filter_order_status']) && !empty($this->filters['filter_order_status'])) { OrderPeer::addStatusFilterCriteria($c, $this->filters['filter_order_status']); } if (isset($this->filters['is_confirmed']) && !empty($this->filters['is_confirmed'])) { $c->add(OrderPeer::IS_CONFIRMED, $this->filters['is_confirmed']); } if (isset($this->filters['is_payed']) && $this->filters['is_payed'] !== "") { $c->add(OrderPeer::OPT_IS_PAYED, $this->filters['is_payed']); } if (isset($this->filters['filter_delivery']) && $this->filters['filter_delivery'] !== "") { $c->addJoin(OrderPeer::ORDER_DELIVERY_ID, OrderDeliveryPeer::ID); $c->add(OrderDeliveryPeer::DELIVERY_ID, $this->filters['filter_delivery']); } if (isset($this->filters['filter_payment']) && $this->filters['filter_payment'] !== "" || isset($this->filters['gift_card_code']) && $this->filters['gift_card_code'] !== "") { $c->addJoin(OrderPeer::ID, OrderHasPaymentPeer::ORDER_ID); $c->addJoin(OrderHasPaymentPeer::PAYMENT_ID, PaymentPeer::ID); if ($this->filters['filter_payment'] == 'gift_card') { $c->add(PaymentPeer::GIFT_CARD_ID, null, Criteria::ISNOTNULL); } elseif (isset($this->filters['filter_payment']) && $this->filters['filter_payment'] !== "") { $c->add(PaymentPeer::PAYMENT_TYPE_ID, $this->filters['filter_payment']); } if (isset($this->filters['gift_card_code']) && $this->filters['gift_card_code'] !== "") { $giftCard = GiftCardPeer::retrieveByCode($this->filters['gift_card_code']); $c->add(PaymentPeer::GIFT_CARD_ID, $giftCard ? $giftCard->getId() : 0); } } if (isset($this->filters['discount_coupon_code']) && $this->filters['discount_coupon_code'] !== "") { $c->addJoin(OrderPeer::DISCOUNT_COUPON_CODE_ID, DiscountCouponCodePeer::ID); $c->add(DiscountCouponCodePeer::CODE, $this->filters['discount_coupon_code']); } $c->add(OrderPeer::OPT_ALLEGRO_NICK, null, Criteria::ISNULL); } protected function addAllegroFiltersCriteria($c) { parent::addAllegroFiltersCriteria($c); if (isset($this->filters['order_product']) && $this->filters['order_product']) { if (is_numeric($this->filters['order_product'])) { $token = array('id' => $this->filters['order_product']); } else { $tokens = stJQueryToolsHelper::parseTokensFromRequest($this->filters['order_product']); $token = $tokens ? $tokens[0] : null; } if ($token && !isset($token['new'])) { $c->addJoin(OrderPeer::ID, OrderProductPeer::ORDER_ID); $c->add(OrderProductPeer::PRODUCT_ID, $token['id']); } elseif ($token) { $c->addJoin(OrderPeer::ID, OrderProductPeer::ORDER_ID); $cc = $c->getNewCriterion(OrderProductPeer::CODE, trim($token['id']), Criteria::LIKE); $cc->addOr($c->getNewCriterion(OrderProductPeer::NAME, '%'.trim($token['id']).'%', Criteria::LIKE)); $c->add($cc); } } if (isset($this->filters['filter_client']) && !empty($this->filters['filter_client'])) { $cc = $c->getNewCriterion(OrderPeer::OPT_CLIENT_NAME, '%'.$this->filters['filter_client'].'%', Criteria::LIKE); $cc->addOr($c->getNewCriterion(OrderPeer::OPT_CLIENT_EMAIL, '%'.$this->filters['filter_client'].'%', Criteria::LIKE)); $cc->addOr($c->getNewCriterion(OrderPeer::OPT_CLIENT_COMPANY, '%'.$this->filters['filter_client'].'%', Criteria::LIKE)); $c->add($cc); } if (isset($this->filters['filter_order_status']) && !empty($this->filters['filter_order_status'])) { OrderPeer::addStatusFilterCriteria($c, $this->filters['filter_order_status']); } if (isset($this->filters['is_confirmed']) && !empty($this->filters['is_confirmed'])) { $c->add(OrderPeer::IS_CONFIRMED, $this->filters['is_confirmed']); } if (isset($this->filters['is_payed']) && $this->filters['is_payed'] !== "") { $c->add(OrderPeer::OPT_IS_PAYED, $this->filters['is_payed']); } if (isset($this->filters['filter_delivery']) && $this->filters['filter_delivery'] !== "") { $c->addJoin(OrderPeer::ORDER_DELIVERY_ID, OrderDeliveryPeer::ID); $c->add(OrderDeliveryPeer::DELIVERY_ID, $this->filters['filter_delivery']); } if (isset($this->filters['filter_payment']) && $this->filters['filter_payment'] !== "") { $c->addJoin(OrderPeer::ID, OrderHasPaymentPeer::ORDER_ID); $c->addJoin(OrderHasPaymentPeer::PAYMENT_ID, PaymentPeer::ID); $c->add(PaymentPeer::PAYMENT_TYPE_ID, $this->filters['filter_payment']); } // $c->add(OrderPeer::OPT_ALLEGRO_AUCTION_ID, null, Criteria::ISNULL); } protected function addSortCriteria($c) { if ($sort_column = $this->getUser()->getAttribute('sort', null, 'sf_admin/autoStOrder/sort')) { if ($sort_column == 'total_amount') { $this->addOptTotalAmountCriteria($c); } else { $sort_column = $this->translateSortColumn($sort_column); } if ($this->getUser()->getAttribute('type', null, 'sf_admin/autoStOrder/sort') == 'asc') { if ($sort_column == OrderPeer::NUMBER) { $c->addAscendingOrderByColumn($sort_column.' + 0'); } $c->addAscendingOrderByColumn($sort_column); } else { if ($sort_column == OrderPeer::NUMBER) { $c->addDescendingOrderByColumn($sort_column.' + 0'); } $c->addDescendingOrderByColumn($sort_column); } } } protected function addAllegroSortCriteria($c) { if ($sort_column = $this->getUser()->getAttribute('sort', null, 'sf_admin/autoStOrder/allegro_sort')) { if ($sort_column == 'total_amount') { $this->addOptTotalAmountCriteria($c); } else { $sort_column = $this->translateAllegroSortColumn($sort_column); } if ($sort_column == OrderStatusPeer::OPT_NAME) { $c->addJoin(OrderPeer::ORDER_STATUS_ID, OrderStatusPeer::ID); } if ($this->getUser()->getAttribute('type', null, 'sf_admin/autoStOrder/allegro_sort') == 'asc') { if ($sort_column == OrderPeer::NUMBER) { $c->addAscendingOrderByColumn($sort_column.' + 0'); } $c->addAscendingOrderByColumn($sort_column); } else { if ($sort_column == OrderPeer::NUMBER) { $c->addDescendingOrderByColumn($sort_column.' + 0'); } $c->addDescendingOrderByColumn($sort_column); } } } /** * Wysłanie maila ze statusem po zapisie zamówienia * * @param $order Order */ public function saveOrder($order) { $i18n = $this->getContext()->getI18N(); $culture = $this->getUser()->getCulture(); if ($order->getClientCulture()) { $this->getUser()->setCulture($order->getClientCulture()); } $order_status_modified = $order->isColumnModified(OrderPeer::ORDER_STATUS_ID); if ($this->getConfigurationParameter('mode') == 'edit') { $this->cleanOrderProducts($order); $this->cleanOrderPayments($order); $order->forceTotalAmountUpdate(); } parent::saveOrder($order); $this->saveOrderPayment($order); if ($order_status_modified && $order->getOrderStatus()->getHasMailNotification()) { $status = $this->sendOrderStatus($order); } $this->getUser()->setCulture($culture); if ($order_status_modified && $order->getOrderStatus()->getHasMailNotification()) { if (!$status) { $this->setFlash('warning', 'e-mail informujący o zmianie statusu nie został wysłany do klienta -> sprawdź konfigurację e-mail...'); } else { $flash_text = $i18n->__('Twoje zmiany zostały zapisane - informacja o zmianie statusu wysłana na adres'); $this->setFlash('notice', $flash_text.' "'.$this->order->getGuardUser().'"'); } } DashboardPeer::doRefreshAll(); } /** * Weryfikuje poprawność formatu numeru zamówienia * * @return bool */ public function validateConfig() { if ($this->getRequest()->getMethod() == sfRequest::POST) { $config = $this->getRequestParameter('config'); $validator = new stOrderValidator(); if (!$validator->execute($config['number_format'], $error)) { $this->getRequest()->setError('config{number_format}', $error); } } return !$this->getRequest()->hasErrors(); } public function validateOrderStatusEdit() { $ok = true; if ($this->getRequest()->getMethod() == sfRequest::POST && $this->hasRequestParameter('order_status[attach_coupon_code]')) { $coupon_code = $this->getRequestParameter('coupon_code'); $validator = new sfNumberValidator(); if (empty($coupon_code['discount'])) { $this->getRequest()->setError('order_status{coupon_code_discount}', 'Podaj kod'); $ok = false; } else { $validator->initialize($this->getContext(), array( 'type' => 'any', 'min' => 0.1, 'max' => 99, 'min_error' => 'Wartość musi być większa od 0', 'max_error' => 'Wartość nie może być większa od 99', 'type_error' => "Nieprawidłowy format (przykład: 10, 10.5)", 'nan_error' => "Nieprawidłowy format (przykład: 10, 10.5)" )); if (!$validator->execute($coupon_code['discount'], $error)) { $this->getRequest()->setError('order_status{coupon_code_discount}', $error); $ok = false; } } if (empty($coupon_code['valid_for']) && $coupon_code['valid_for'] === '') { $this->getRequest()->setError('order_status{coupon_code_valid_for}', 'Podaj ilość dni'); $ok = false; } else { $validator->initialize($this->getContext(), array( 'type' => 'integer', 'min' => 0, 'min_error' => 'Wartość nie może być ujemna', 'type_error' => "Nieprawidłowy format (przykład: 1, 10)", 'nan_error' => "Nieprawidłowy format (przykład: 1, 10)" )); if (!$validator->execute($coupon_code['valid_for'], $error)) { $this->getRequest()->setError('order_status{coupon_code_valid_for}', $error); $ok = false; } } } return $ok; } public function validateEdit() { $request = $this->getRequest(); if ($this->getConfigurationParameter('mode') == 'edit' && $request->getMethod() == sfRequest::POST) { if (!$this->hasRequestParameter('validation_token')) { $this->setFlash('warning', 'Przesłane żądanie jest niekompletne, proszę ponownie wprowadzić i zapisać zmiany.
Jeżeli problem będzie się powtarzał proszę spróbować ponownie z poziomu innej przeglądarki, komputera lub innego połączenia internetowego'); return $this->redirect($request->getReferer()); } $this->validateOrderProducts(); $this->validateUserData('billing'); $this->validateUserData('delivery'); $this->validatePayment(); $this->validateDelivery(); } return !$request->hasErrors(); } protected function validateDelivery() { $i18n = $this->getContext()->getI18N(); $request = $this->getRequest(); $orderData = $this->getRequestParameter('order'); if (isset($orderData['delivery']['number']) && !empty($orderData['delivery']['number'])) { $numbers = explode(',', $orderData['delivery']['number']); $numbers = array_map('trim', $numbers); foreach ($numbers as $number) { if (!preg_match('/^[a-zA-Z0-9_()-]+$/', $number)) { $request->setError('order{delivery_number}', $i18n->__('Numer przesyłki posiada nieprawidłowy format (dozwolone znaki: a-z, 0-9, _, -)')); break; } } } } protected function validatePayment() { $i18n = $this->getContext()->getI18N(); $request = $this->getRequest(); $orderData = $this->getRequestParameter('order'); if (!isset($orderData['payment'])) { $request->setError('order{payments}', $i18n->__('Musisz dodać przynajmniej jedną płatność')); } } protected function validateOrderProducts() { $i18n = $this->getContext()->getI18N(); $request = $this->getRequest(); $orderProducts = $this->getOrderProductRequest(); if (false === $orderProducts) { $this->setFlash('warning', 'Przesłane żądanie jest niekompletne, proszę ponownie wprowadzić i zapisać zmiany.
Jeżeli problem będzie się powtarzał proszę spróbować ponownie z poziomu innej przeglądarki, komputera lub innego połączenia internetowego'); return $this->redirect($request->getReferer()); } $index = 0; foreach ($orderProducts as $orderProduct) { if (empty($orderProduct['name'])) { $request->setError('order{product}{'.$index.'}{name}', $i18n->__('Podaj nazwę produktu')); } if (empty($orderProduct['code'])) { $request->setError('order{product}{'.$index.'}{code}', $i18n->__('Podaj kod produktu')); } $index++; } if ($request->hasErrors()) { $request->setError('order{products}', $i18n->__('Popraw dane')); } elseif (!$orderProducts) { $request->setError('order{products}', $i18n->__('Musisz dodać przynajmniej jeden produkt')); } } protected function validateUserData($type) { $i18n = $this->getContext()->getI18N(); $request = $this->getRequest(); $parameters = $request->getParameter('order[user_data]['.$type.']'); $error_namespace = 'order{user_data}{'.$type.'}'; $codeTownErrors = []; if (isset($parameters['address']) && empty($parameters['address'])) { $request->setError($error_namespace.'{address}', $i18n->__('Adres linia 1')); } if (isset($parameters['code']) && empty($parameters['code'])) { $codeTownErrors[] = $i18n->__('Uzupełnij kod pocztowy'); } if (isset($parameters['town']) && empty($parameters['town'])) { $codeTownErrors[] = $i18n->__('Uzupełnij miasto'); } if ($codeTownErrors) { $request->setError($error_namespace.'{code_town}', implode(', ', $codeTownErrors)); } if ($request->hasErrors()) { $request->setError('order{user_data}', $i18n->__('Popraw dane')); } return !$request->hasErrors(); } public function handleErrorEdit() { $this->initEditMode(); $ret = parent::handleErrorEdit(); $request = $this->getOrderProductRequest(); $order_products = $this->order->getOrderProducts(); foreach ($order_products as $order_product) { if (!$order_product->isNew() && !isset($request[$order_product->getId()])) { $order_product->setDeleted(true); } } return $ret; } protected function initEditMode() { $this->getUser()->setAttribute('edit_mode', $this->getConfigurationParameter('mode') == 'edit', 'soteshop/stOrder'); } protected function processEditForwardParameters() { parent::processEditForwardParameters(); if ($this->getRequestParameter('type') == 'allegro') { $this->forward_parameters['type'] = 'allegro'; } } protected function cleanOrderProducts($order) { $request = $this->getOrderProductRequest(); $order_products = $order->getOrderProducts(); foreach ($order_products as $order_product) { if (!$order_product->isNew() && !isset($request[$order_product->getId()])) { $order_product->delete(); } } } protected function cleanOrderPayments($order) { $request = array(); $order_request = $this->getRequestParameter('order'); foreach ($order_request['payment'] as $data) { if (!$data['payment_id']) { continue; } $request[$data['payment_id']] = $data['payment_id']; } foreach ($order->getOrderHasPaymentsJoinPayment() as $ohp) { $payment = $ohp->getPayment(); if (!$payment->isNew() && !isset($request[$payment->getId()])) { echo "deleteing: {$payment->getId()}
"; $payment->delete(); } } } protected function getOrderProductRequest() { if (null === $this->orderProductRequest) { $request = json_decode($this->getRequestParameter('order[product]'), true); if (false === $request) { return false; } $tmp = array(); if ($request) { foreach ($request as $index => $v) { if (isset($v['oid']) && $v['oid']) { $tmp[$v['oid']] = $v; } else { $tmp['new-'.$index] = $v; } } } $this->orderProductRequest = $tmp; } return $this->orderProductRequest; } protected function updateOrderUserData() { $request = $this->getRequestParameter('order[user_data]'); if ($request) { $this->order->getOrderUserDataBilling()->fromArray($request['billing'], BasePeer::TYPE_FIELDNAME); $this->order->getOrderUserDataDelivery()->fromArray($request['delivery'], BasePeer::TYPE_FIELDNAME); if (isset($request['billing']['full_name'])) { $this->order->setOptClientName($request['billing']['full_name']); } if (isset($request['billing']['company'])) { $this->order->setOptClientCompany($request['billing']['company']); } } } protected function updateOrderProducts() { $request = $this->getOrderProductRequest(); if ($request) { $order_products = array(); foreach ($this->order->getOrderProducts() as $order_product) { $order_products[$order_product->getId()] = $order_product; } $currency = $this->order->getOrderCurrency(); foreach ($request as $id => $v) { if (isset($order_products[$id])) { $order_product = $order_products[$id]; } else { $order_product = new OrderProduct(); $order_product->setVersion(2); $this->order->addOrderProduct($order_product); } if ($v['code'] != $order_product->getCode()) { $order_product->setCode($v['code']); $c = new Criteria(); $c->add(ProductPeer::CODE, $v['code']); $product = ProductPeer::doSelectOne($c); if ($product) { $order_product->setProductId($product->getId()); $order_product->setImage($product->getOptImage()); } } if ($v['discount']) { if ($v['discount_type'] == '%') { $discount = array('value' => null, 'percent' => $v['discount']); } else { $discount = array('name' => null, 'value' => $v['discount']); } $order_product->setDiscount(array('value' => $v['discount'], 'type' => $v['discount_type'])); } else { $order_product->setDiscount(null); } $order_product->setName($v['name']); $order_product->setTaxId($v['tax']); if ($order_product->getVersion() >= 2) { $order_product->setPriceNetto($v['price_netto']); $order_product->setPriceBrutto($v['price_brutto']); } else { $order_product->setCustomPriceNetto($v['price_netto']); $order_product->setCustomPriceBrutto($v['price_brutto']); } $order_product->setQuantity($v['quantity']); } } } protected function updateOrderStatusOrderStatusFromRequest() { parent::updateOrderStatusOrderStatusFromRequest(); if ($this->hasRequestParameter('order_status[attach_coupon_code]')) { $coupon_code = $this->getRequestParameter('coupon_code'); $cc = new OrderStatusCouponCode(); $cc->setDiscount($coupon_code['discount']); $cc->setValidFor($coupon_code['valid_for']); $this->order_status->setCouponCode($cc); } } protected function updateOrderFromRequest() { parent::updateOrderFromRequest(); $order = $this->getRequestParameter('order'); if (isset($order['delivery_number'])) { $this->order->getOrderDelivery()->setNumber($order['delivery_number']); } if (isset($order['discount'])) { $this->order->setDiscountId($order['discount'] === "" ? null : $order['discount']); } $this->updateOrderProducts(); $this->updateOrderUserData(); $this->updateOrderDelivery(); } protected function updateOrderDelivery() { $order = $this->getRequestParameter('order'); $order_delivery = $this->order->getOrderDelivery(); if (isset($order['delivery']['type_id'])) { $order_delivery->setDeliveryId($order['delivery']['type_id']); $order_delivery->setName($order_delivery->getDelivery()->getName()); } elseif (isset($order['delivery']['type'])) { $order_delivery->setName($order['delivery']['type']); } if (isset($order['delivery']['cost'])) { $order_delivery->setCustomCostBrutto($order['delivery']['cost']); } if (isset($order['delivery']['delivery_date']) && !empty($order['delivery']['delivery_date'])) { $order_delivery->setDeliveryDate($order['delivery']['delivery_date']); } $order_delivery->setNumber($order['delivery']['number']); $order_delivery->setIsWeekendDelivery(isset($order['delivery']['is_weekend_delivery'])); } protected function saveOrderPayment(Order $order) { $request = $this->getRequestParameter('order'); $payments = array(); foreach ($order->getOrderHasPaymentsJoinPayment() as $ohp) { $payments[$ohp->getPayment()->getId()] = $ohp->getPayment(); } foreach ($request['payment'] as $data) { $payment = $data['payment_id'] && isset($payments[$data['payment_id']]) ? $payments[$data['payment_id']] : null; if (!$payment) { $payment = stPayment::newPaymentInstance($data['payment_type'], $data['payment_amount'], array('user_id' => $order->getSfGuardUserId(), 'is_paid' => isset($data['payment_status']))); $order->addOrderPayment($payment); } if (isset($data['payment_type'])) { $payment->setPaymentTypeId($data['payment_type']); if ($payment->isColumnModified(PaymentPeer::PAYMENT_TYPE_ID)) { $payment->setPaymentChannel(null); } } if (isset($data['payment_amount'])) { $payment->setAmount($data['payment_amount']); } if (isset($data['payment_status']) || null !== $payment->getGiftCard()) { $payment->setStatus(true); } else { $payment->setStatus(false); $payment->setPayedAt(null); } $payment->save(); } } /** * Wysyła mail z zamówieniem do klienta */ public function sendOrderStatus(Order $order) { $orderMailNotification = new stOrderMailNotification($this->getContext()); return $orderMailNotification->sendStatusChangeNotification($order); } /** * Dodanie błędu wysyłania */ protected function getLabels() { $labels = parent::getLabels(); $i18n = $this->getContext()->getI18N(); $labels['send_error'] = ''; $labels['order{products}'] = $i18n->__('Zawartość'); $labels['order{payments}'] = $i18n->__('Płatność'); $labels['order{user_data}'] = $i18n->__('Dane klienta'); return $labels; } protected function filterCriteriaByIsConfirmed(Criteria $c, $v) { if (!$v) { $criterion = $c->getNewCriterion(OrderPeer::IS_CONFIRMED, false); $criterion->addOr($c->getNewCriterion(OrderPeer::IS_CONFIRMED, null, Criteria::ISNULL)); $c->add($criterion); } else { $c->add(OrderPeer::IS_CONFIRMED, $v); } return true; } public function executeAllegroEdit() { return $this->redirect('@stOrder?action=edit&id='.$this->getRequestParameter('id').'&type=allegro'); } public function executeEdit() { $this->initEditMode(); $result = parent::executeEdit(); return $result; } public function executeList() { if ($this->getRequestParameter('type') == 'allegro') { return $this->redirect('@stOrder?action=allegroList'); } return parent::executeList(); } /** * wyswietl zamowienie pdf */ public function executePrintPdf() { return $this->redirect('stOrderPrintPdf/show?id='.$this->getRequestParameter('id').'&download=1'); } protected function filterCriteriaByOrderOptTotalAmount(Criteria $c, $total_amount) { $custom = array(); $column = sprintf('ROUND(%s * %s, 2)', OrderPeer::OPT_TOTAL_AMOUNT, OrderCurrencyPeer::EXCHANGE); if ($total_amount['from']) { $custom[] = sprintf('%s >= %s', $column, floatval($total_amount['from'])); } if ($total_amount['to']) { $custom[] = sprintf('%s <= %s', $column, floatval($total_amount['to'])); } if ($custom) { $this->addOptTotalAmountCriteria($c); $c->add(OrderPeer::OPT_TOTAL_AMOUNT, implode(' AND ', $custom), Criteria::CUSTOM); } return true; } protected function addOptTotalAmountCriteria(Criteria $c) { if (!$c->getColumnForAs('total_amount')) { $c->addJoin(OrderPeer::ORDER_CURRENCY_ID, OrderCurrencyPeer::ID); $c->addAsColumn('total_amount', sprintf('ROUND(%s * %s, 2)', OrderPeer::OPT_TOTAL_AMOUNT, OrderCurrencyPeer::EXCHANGE)); } } public function executeBulkStatusUpdate() { if ($this->getRequest()->getMethod() == sfRequest::POST) { $id = $this->getRequestParameter('id'); $page = $this->getRequestParameter('page'); $order = $this->getRequestParameter('order'); $culture = $this->getUser()->getCulture(); foreach (OrderPeer::retrieveByPKs(array_values($order['selected'])) as $order ) { $order->setOrderStatusId($id); $order->save(); if ($order->getClientCulture()) { $this->getUser()->setCulture($order->getClientCulture()); } if($order->getOrderStatus()->getHasMailNotification()) { $this->sendOrderStatus($order); } } DashboardPeer::doRefreshAll(); $this->getUser()->setCulture($culture); } return $this->redirect($this->getRequest()->getReferer()); } public function executeBulkPaymentStatusUpdate() { if ($this->getRequest()->getMethod() == sfRequest::POST) { $id = $this->getRequestParameter('id'); $page = $this->getRequestParameter('page'); $order = $this->getRequestParameter('order'); $c = new Criteria(); $c->addJoin(PaymentPeer::ID, OrderHasPaymentPeer::PAYMENT_ID); $c->add(OrderHasPaymentPeer::ORDER_ID, array_values($order['selected']), Criteria::IN); foreach (PaymentPeer::doSelect($c) as $payment) { if (null !== $payment->getGiftCardId()) { continue; } $payment->setStatus($id); $payment->save(); } DashboardPeer::doRefreshAll(); } return $this->redirect($this->getRequest()->getReferer()); } public function executeBulkConfirmedStatusUpdate() { if ($this->getRequest()->getMethod() == sfRequest::POST) { $id = $this->getRequestParameter('id'); $page = $this->getRequestParameter('page'); $order = $this->getRequestParameter('order'); foreach (OrderPeer::retrieveByPKs(array_values($order['selected'])) as $order ) { $order->setIsConfirmed($id); OrderPeer::doUpdate($order); } DashboardPeer::doRefreshAll(); } return $this->redirect($this->getRequest()->getReferer()); } }