123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349 |
- <?php
- class KataoProduct extends BaseKataoProduct {
- public function __construct() {
- $this->setMargin(wpConfig::getDefaultProductMargin() / 100);
- }
- public function save($con = null) {
- if ('' == $this->getUrlIdentifier()) {
- $this->setUrlIdentifier(Catalyz::normalizeUrlIdentifier($this->getName()));
- }
- if ('' == $this->getAccountingCodePurchase()) {
- $this->setAccountingCodePurchase(wpConfig::getAccountingCodePrefixPurchase() . $this->getKataoProductFamily()->getKataoProductCategory()->getAccountingCodeSuffix());
- }
- if ('' == $this->getAccountingCodeSell()) {
- $this->setAccountingCodeSell(wpConfig::getAccountingCodePrefixSell() . $this->getKataoProductFamily()->getKataoProductCategory()->getAccountingCodeSuffix());
- }
- if (!$this->isNew() && ($this->isColumnModified(KataoProductPeer::UNIT_PRICE_EURO) || $this->isColumnModified(KataoProductPeer::MARGIN) || $this->isColumnModified(KataoProductPeer::TVA_RATE))) {
- $this->notifyProductPriceModification();
- }
- parent::save($con);
- }
- public function delete($con = null) {
- parent::delete($con);
- if (is_file(sfConfig::get('sf_web_dir') . $this->getPicture())) {
- unlink(sfConfig::get('sf_web_dir') . $this->getPicture());
- }
- }
- public function getTotalPriceWithoutTaxes() {
- return round($this->getUnitPriceEuro() * (1 + $this->getMargin()), 2);
- }
- public function getTotalPriceWithTaxes() {
- return round($this->getUnitPriceEuro() * (1 + $this->getMargin()) * (1 + $this->getTvaRate()), 2);
- }
- public function isCartable() {
- $return = true;
- $return &= in_array($this->getId(), sfContext::getInstance()->getUser()->getCartableProducts());
- $return &= sfContext::getInstance()->getUser()->getActivePeriod()->getOrderEndedAt('Y-m-d') >= date('Y-m-d');
- return $return;
- }
- public function getCompletedPackages($katao_period_id, $katao_node_id, $with_adjusted_quantity = false) {
- return $this->getMinOrderNumber()?floor($this->getOrderedProductQuantity($katao_period_id, $katao_node_id, $with_adjusted_quantity) / $this->getMinOrderNumber()):0;
- }
- public function getLastIncompletePackageQuantity($katao_period_id, $katao_node_id, $with_adjusted_quantity = false) {
- $ordered_product_quantity = $this->getOrderedProductQuantity($katao_period_id, $katao_node_id, $with_adjusted_quantity);
- $min_order_number = $this->getMinOrderNumber();
- return $min_order_number?($ordered_product_quantity - $min_order_number * floor($ordered_product_quantity / $min_order_number)):0;
- }
- protected function getOrderedProductQuantity($katao_period_id, $katao_node_id, $with_adjusted_quantity = false) {
- $return = 0;
- $criteria = new Criteria();
- $criteria->addSelectColumn(KataoCartProductPeer::KATAO_PRODUCT_ID);
- if ($with_adjusted_quantity) {
- $criteria->addAsColumn('quantity', sprintf('SUM(%s)', KataoCartProductPeer::QUANTITY_ADJUSTED));
- } else {
- $criteria->addAsColumn('quantity', sprintf('SUM(%s)', KataoCartProductPeer::QUANTITY));
- }
- $criteria->addJoin(KataoCartPeer::ID, KataoCartProductPeer::KATAO_CART_ID);
- $criteria->add(KataoCartPeer::STATUS, array(KataoCart::STATUS_IN_PROGRESS, KataoCart::STATUS_VALIDATED), Criteria::IN);
- $criteria->add(KataoCartPeer::KATAO_PERIOD_ID, $katao_period_id);
- $criteria->add(KataoCartPeer::KATAO_NODE_ID, $katao_node_id);
- $criteria->add(KataoCartProductPeer::KATAO_PRODUCT_ID, $this->getId());
- $criteria->addGroupByColumn(KataoCartProductPeer::KATAO_PRODUCT_ID);
- $rs = KataoProductPeer::doSelectRS($criteria);
- if ($rs->next()) {
- $return = number_format($rs->getFloat(2), 3);
- }
- return $return;
- }
- /**
- * KataoProduct::getUrlDetails()
- *
- * @param string $katao_product_category
- * @param string $katao_product_family
- * @return string
- */
- public function getUrlDetails($katao_product_category = '', $katao_product_family = '') {
- if ('' == $katao_product_category || '' == $katao_product_family) {
- $criteria = new Criteria();
- $criteria->addSelectColumn(KataoProductFamilyPeer::URL_IDENTIFIER);
- $criteria->addSelectColumn(KataoProductCategoryPeer::URL_IDENTIFIER);
- $criteria->addJoin(KataoProductPeer::KATAO_PRODUCT_FAMILY_ID, KataoProductFamilyPeer::ID);
- $criteria->addJoin(KataoProductFamilyPeer::KATAO_PRODUCT_CATEGORY_ID, KataoProductCategoryPeer::ID);
- $criteria->add(KataoProductPeer::URL_IDENTIFIER, $this->getUrlIdentifier());
- $criteria->setLimit(1);
- $rs = KataoProductPeer::doSelectRS($criteria);
- if ($rs->next()) {
- $katao_product_category = $rs->getString(2);
- $katao_product_family = $rs->getString(1);
- }
- }
- return url_for('@katao_boutique_produit?category=' . $katao_product_category . '&family=' . $katao_product_family . '&product=' . $this->getUrlIdentifier());
- }
- public function getCategoryLink($with_link = false) {
- $return = '';
- $criteria = new Criteria();
- $criteria->addSelectColumn(KataoProductCategoryPeer::ID);
- $criteria->addSelectColumn(KataoProductCategoryPeer::NAME);
- $criteria->addJoin(KataoProductPeer::KATAO_PRODUCT_FAMILY_ID, KataoProductFamilyPeer::ID);
- $criteria->addJoin(KataoProductFamilyPeer::KATAO_PRODUCT_CATEGORY_ID, KataoProductCategoryPeer::ID);
- $criteria->add(KataoProductPeer::ID, $this->getId());
- $criteria->setLimit(1);
- $rs = KataoProductCategoryPeer::doSelectRS($criteria);
- if ($rs->next()) {
- if ($with_link) {
- $return = link_to($rs->getString(2), '@katao_product_category_show?id=' . $rs->getInt(1));
- } else {
- $return = $rs->getString(2);
- }
- }
- return $return;
- }
- public function getFamilyLink($with_link = false) {
- $return = '';
- $criteria = new Criteria();
- $criteria->addSelectColumn(KataoProductFamilyPeer::ID);
- $criteria->addSelectColumn(KataoProductFamilyPeer::NAME);
- $criteria->addJoin(KataoProductPeer::KATAO_PRODUCT_FAMILY_ID, KataoProductFamilyPeer::ID);
- $criteria->add(KataoProductPeer::ID, $this->getId());
- $criteria->setLimit(1);
- $rs = KataoProductFamilyPeer::doSelectRS($criteria);
- if ($rs->next()) {
- if ($with_link) {
- $return = link_to($rs->getString(2), '@katao_product_family_show?id=' . $rs->getInt(1));
- } else {
- $return = $rs->getString(2);
- }
- }
- return $return;
- }
- public function getSupplierName() {
- $result = '';
- if (null != $katao_supplier = $this->getKataoSupplier()) {
- $result = $katao_supplier->getName();
- }
- return $result;
- }
- public function getSupplierLink($with_link = false) {
- $result = '';
- if (null != $katao_supplier = $this->getKataoSupplier()) {
- if ($with_link) {
- $result = link_to($katao_supplier->getName(), '@katao_supplier_show?id=' . $katao_supplier->getId());
- } else {
- $result = link_to($katao_supplier->getName(), sprintf('%sles-partenaires/%s', sfConfig::get('app_katao_frontend_url'), $katao_supplier->getUrlIdentifier()), array('target' => '_blank'));
- }
- }
- return $result;
- }
- public function getOrderDetails($katao_period_id, $katao_node_id, $with_adjusted_quantity = false) {
- $completed_packages = $this->getCompletedPackages($katao_period_id, $katao_node_id, $with_adjusted_quantity);
- $last_incomplete_package = $this->getLastIncompletePackageQuantity($katao_period_id, $katao_node_id, $with_adjusted_quantity);
- $format_quantity = $this->getAuthorizeDecimal()?'%.3f':'%d';
- return sprintf('%d ('.$format_quantity.' / %d)%s', $completed_packages, $last_incomplete_package, $this->getMinOrderNumber(), ($completed_packages || $last_incomplete_package)?sprintf(' %s', image_tag($last_incomplete_package?'actions/bullet_red.png':'actions/bullet_green.png', array('alt' => $last_incomplete_package?'Colis incomplet':'Colis complet', 'title' => $last_incomplete_package?'Colis incomplet':'Colis complet', 'align' => 'top'))):'');
- }
- public function getUnitPriceEuroStr() {
- return Utils::formatCurrencyEuro($this->getUnitPriceEuro());
- }
- public function getIsArchivedStr() {
- return $this->getIsArchived()?'Oui':'Non';
- }
- public function getAuthorizeDecimalStr() {
- return $this->getAuthorizeDecimal()?'Oui':'Non';
- }
- public function getRealPicture() {
- return $this->hasPicture()?$this->getPicture():(wpConfig::hasDefaultProductPicture()?wpConfig::getDefaultProductPicture():'img04.gif');
- }
- public function hasPicture() {
- return '' != $this->getPicture() && is_file(sfConfig::get('sf_web_dir') . $this->getPicture());
- }
- public function getTotalPriceWithTaxesStr() {
- return Utils::formatCurrencyEuro($this->getTotalPriceWithTaxes());
- }
- public function getMarginStr() {
- return sprintf('%s%%', 100 * $this->getMargin());
- }
- public function getTvaRateStr() {
- return sprintf('%s%%', 100 * $this->getTvaRate());
- }
- public function notifyProductPriceModification() {
- return true;
- // désactivation temporaire suite au ticket #001525 (supprimer l'envois des modifs de prix au clients)
- $criteria = new Criteria();
- $criteria->add(KataoCartProductPeer::KATAO_PRODUCT_ID, $this->getId());
- $criteria->add(KataoCartPeer::STATUS, array(KataoCart::STATUS_IN_PROGRESS, KataoCart::STATUS_VALIDATED), Criteria::IN);
- $criteria->addJoin(KataoCartProductPeer::KATAO_CART_ID, KataoCartPeer::ID);
- $criteria->setDistinct();
- $katao_carts = KataoCartPeer::doSelectJoinKataoUser($criteria);
- if (0 < count($katao_carts)) {
- // referer
- $katao_user_referer = null;
- if (null != $katao_member_referer = $this->getKataoSupplier()->getKataoMemberRelatedByRefererId()) {
- $katao_user_referer = $katao_member_referer->getFirstKataoUser();
- }
- // seo
- $katao_user_seo = null;
- if (null != $katao_member_seo = wpConfig::getInstance()->getKataoMember()) {
- $katao_user_seo = $katao_member_seo->getFirstKataoUser();
- }
- $mailer = new wpMail();
- foreach ($katao_carts as/*(KataoCart)*/ $katao_cart) {
- try {
- // member
- $katao_user = $katao_cart->getKataoUser();
- $katao_member = $katao_user->getKataoMember();
- $mailer->send(new Swift_Message('KATAO : modification d\'un produit de votre panier', sprintf('Bonjour %s,
- Le produit "%s" (réf. %s, prix unit. %s) vient d\'être modifié.
- Votre panier a automatiquement été invalidé.
- Cliquez sur le lien ci-dessous pour accèder à votre panier :
- %smon-panier
- A bientôt,
- L\'équipe KATAO', $katao_user->getFullName(), $this->getName(), $this->getReference(), Utils::formatCurrencyEuro($this->getTotalPriceWithTaxes()), sfConfig::get('app_katao_frontend_url'))), new Swift_Address($katao_user->getEmail(), $katao_user->getFullName()), sfConfig::get('app_mail_from'));
- $recipients = new Swift_RecipientList();
- if (!is_null($katao_user_referer)) {
- $recipients->addTo($katao_user_referer->getEmail(), $katao_user_referer->getFullName());
- }
- if (!is_null($katao_user_seo)) {
- $recipients->addTo($katao_user_seo->getEmail(), $katao_user_seo->getFullName());
- }
- // delegate
- if (null != $katao_user_delegate = $katao_member->getKataoNode()->getKataoUser()) {
- $recipients->addTo($katao_user_delegate->getEmail(), $katao_user_delegate->getFullName());
- }
- $mailer->send(new Swift_Message(sprintf('KATAO : modification d\'un produit du panier de %s', $katao_user->getFullName()), sprintf('Bonjour,
- Le produit "%s" (réf. %s, prix unit. %s) vient d\'être modifié.
- Le panier de cet adhérent a automatiquement été invalidé.
- Cliquez sur le lien ci-dessous pour visualiser les demandes :
- %sgestion-des-demandes
- A bientôt,
- L\'équipe KATAO', $this->getName(), $this->getReference(), Utils::formatCurrencyEuro($this->getTotalPriceWithTaxes()), sfConfig::get('app_katao_backend_url'))), $recipients, sfConfig::get('app_mail_from'));
- // unvalidate cart
- $katao_cart->setStatus(KataoCart::STATUS_IN_PROGRESS);
- $katao_cart->save();
- }
- catch (Exception $e) {
- $mailer->disconnect();
- }
- }
- $mailer->disconnect();
- }
- }
- public function getMaxSolAmountStr() {
- return Utils::formatCurrencySol($this->getMaxSolAmount());
- }
- public function isDeletable() {
- return (0 == $this->countKataoCartProducts()) && (0 == $this->countKataoOrderProducts()) && (0 == $this->countKataoInvoiceProducts());
- }
- /**
- * KataoProduct::getTotalReceivedQuantity()
- *
- * @param int $katao_period_id
- * @param int $katao_node_id
- * @return float
- */
- public function getTotalReceivedQuantity($katao_period_id, $katao_node_id) {
- $return = 0;
- $criteria = new Criteria();
- $criteria->addSelectColumn(KataoOrderProductPeer::QUANTITY_RECEIVED);
- $criteria->addJoin(KataoOrderProductPeer::KATAO_ORDER_ID, KataoOrderPeer::ID);
- $criteria->add(KataoOrderProductPeer::KATAO_PRODUCT_ID, $this->getId());
- $criteria->add(KataoOrderPeer::KATAO_PERIOD_ID, $katao_period_id);
- $criteria->add(KataoOrderPeer::KATAO_NODE_ID, $katao_node_id);
- $rs = KataoOrderProductPeer::doSelectRS($criteria);
- if ($rs->next()) {
- $return = number_format($rs->getFloat(1), 3);
- }
- return $return;
- }
- /**
- * KataoProduct::getTotalDeliveredQuantity()
- *
- * @param int $katao_period_id
- * @param int $katao_node_id
- * @return float
- */
- public function getTotalDeliveredQuantity($katao_invoice_id = false, $katao_period_id, $katao_node_id) {
- $return = 0;
- $criteria = new Criteria();
- $criteria->addSelectColumn(KataoInvoiceProductPeer::QUANTITY_DELIVERED);
- $criteria->addJoin(KataoInvoiceProductPeer::KATAO_INVOICE_ID, KataoInvoicePeer::ID);
- $criteria->add(KataoInvoiceProductPeer::KATAO_PRODUCT_ID, $this->getId());
- if ($katao_invoice_id) {
- $criteria->add(KataoInvoicePeer::ID, $katao_invoice_id, Criteria::NOT_EQUAL);
- }
- $criteria->add(KataoInvoicePeer::KATAO_PERIOD_ID, $katao_period_id);
- $criteria->add(KataoInvoicePeer::KATAO_NODE_ID, $katao_node_id);
- $rs = KataoInvoiceProductPeer::doSelectRS($criteria);
- while ($rs->next()) {
- $return += number_format($rs->getFloat(1), 3);
- }
- return $return;
- }
- public function getUnitPriceEuroCalculated() {
- $total_ttc = $this->getTotalPriceWithTaxes();
- return $total_ttc / (1 + $this->getMargin()) / (1 + $this->getTvaRate());
- }
- }
|