/** * Return discount value * * @param integer $nb_discounts Number of discount currently in cart * @param boolean $order_total_products Total cart products amount * @return mixed Return a float value or '!' if reduction is 'Shipping free' */ public function getValue($nb_discounts = 0, $order_total_products = 0, $shipping_fees = 0, $idCart = false, $useTax = true) { $totalAmount = 0; $cart = new Cart((int) $idCart); if (!Validate::isLoadedObject($cart)) { return 0; } if (!$this->cumulable and (int) $nb_discounts > 1 or !$this->active or !$this->quantity and !$cart->OrderExists()) { return 0; } if ($this->usedByCustomer((int) $cart->id_customer) >= $this->quantity_per_user and !$cart->OrderExists()) { return 0; } $date_start = strtotime($this->date_from); $date_end = strtotime($this->date_to); if ((time() < $date_start or time() > $date_end) and !$cart->OrderExists()) { return 0; } $products = $cart->getProducts(); $categories = Discount::getCategories((int) $this->id); foreach ($products as $product) { if (count($categories) and Product::idIsOnCategoryId($product['id_product'], $categories)) { $totalAmount += $this->include_tax ? $product['total_wt'] : $product['total']; } } if ($this->minimal > 0 and $totalAmount < $this->minimal) { return 0; } switch ($this->id_discount_type) { /* Relative value (% of the order total) */ case 1: $amount = 0; $percentage = $this->value / 100; foreach ($products as $product) { if (Product::idIsOnCategoryId($product['id_product'], $categories)) { if ($this->cumulable_reduction or !$product['reduction_applies'] and !$product['on_sale']) { $amount += ($useTax ? $product['total_wt'] : $product['total']) * $percentage; } } } return $amount; /* Absolute value */ /* Absolute value */ case 2: // An "absolute" voucher is available in one currency only $currency = (int) $cart->id_currency ? Currency::getCurrencyInstance($cart->id_currency) : Currency::getCurrent(); if ($this->id_currency != $currency->id) { return 0; } $taxDiscount = Cart::getTaxesAverageUsed((int) $cart->id); if (!$useTax and isset($taxDiscount) and $taxDiscount != 1) { $this->value = abs($this->value / (1 + $taxDiscount * 0.01)); } // Main return $value = 0; foreach ($products as $product) { if (Product::idIsOnCategoryId($product['id_product'], $categories)) { $value = $this->value; } } // Return 0 if there are no applicable categories return $value; /* Free shipping (does not return a value but a special code) */ /* Free shipping (does not return a value but a special code) */ case 3: return '!'; } return 0; }
/** * @param Discount $discountObj * @return bool * @deprecated */ public function hasProductInCategory($discountObj) { Tools::displayAsDeprecated(); $products = $this->getProducts(); $categories = Discount::getCategories($discountObj->id); foreach ($products as $product) { if (Product::idIsOnCategoryId($product['id_product'], $categories)) { return true; } } return false; }
public function displayForm() { global $currentIndex, $cookie; $obj = $this->loadObject(true); $defaultLanguage = intval(Configuration::get('PS_LANG_DEFAULT')); $languages = Language::getLanguages(); echo ' <script type="text/javascript"> id_language = Number(' . $defaultLanguage . '); </script> <form action="' . $currentIndex . '&submitAdd' . $this->table . '=1&token=' . $this->token . '" id="discount" name="discount" method="post" enctype="multipart/form-data"> ' . ($obj->id ? '<input type="hidden" name="id_' . $this->table . '" value="' . $obj->id . '" />' : '') . ' <fieldset class="width3"><legend><img src="../img/admin/coupon.gif" />' . $this->l('Vouchers') . '</legend> <label>' . $this->l('Code:') . ' </label> <div class="margin-form"> <input type="text" size="30" maxlength="32" name="name" value="' . htmlentities($this->getFieldValue($obj, 'name'), ENT_COMPAT, 'UTF-8') . '" style="text-transform: uppercase;" id="code" /> <sup>*</sup> <img src="../img/admin/news-new.gif" onclick="gencode(8);" style="cursor: pointer" /> <span class="hint" name="help_box">' . $this->l('Invalid characters: numbers and') . ' !<>,;?=+()@#"�{}_$%:<span class="hint-pointer"> </span></span> <p style="clear: both;">' . $this->l('The voucher\'s code, at least 3 characters long, which the customer types in during check-out') . '</p> </div> <label>' . $this->l('Type:') . ' </label> <div class="margin-form"> <select name="id_discount_type" id="id_discount_type" onchange="free_shipping()">'; $discountTypes = Discount::getDiscountTypes(intval($cookie->id_lang)); foreach ($discountTypes as $discountType) { echo '<option value="' . intval($discountType['id_discount_type']) . '"' . ($this->getFieldValue($obj, 'id_discount_type') == $discountType['id_discount_type'] ? ' selected="selected"' : '') . '>' . $discountType['name'] . '</option>'; } echo ' </select> </div> <label>' . $this->l('Categories:') . ' </label> <div class="margin-form"> <table cellspacing="0" cellpadding="0" class="table" style="width: 29.5em;"> <tr> <th><input type="checkbox" name="checkme" class="noborder" onclick="checkDelBoxes(this.form, \'categoryBox[]\', this.checked)" /></th> <th>' . $this->l('ID') . '</th> <th>' . $this->l('Name') . '</th> </tr>'; $done = array(); $index = array(); $indexedCategories = isset($_POST['categoryBox']) ? $_POST['categoryBox'] : ($obj->id ? Discount::getCategories($obj->id) : array()); $categories = Category::getCategories(intval($cookie->id_lang), false); foreach ($indexedCategories as $k => $row) { $index[] = $row['id_category']; } $this->recurseCategoryForInclude($index, $categories, $categories[0][1], 1, $obj->id); echo ' </table> <p style="padding:0px; margin:0px 0px 10px 0px;">' . $this->l('Mark all checkbox(es) of categories to which the discount is to be applicated') . '<sup> *</sup></p> </div> <div class="clear" / > <label>' . $this->l('Description:') . ' </label> <div class="margin-form">'; foreach ($languages as $language) { echo ' <div id="description_' . $language['id_lang'] . '" style="display: ' . ($language['id_lang'] == $defaultLanguage ? 'block' : 'none') . '; float: left;"> <input size="33" type="text" name="description_' . $language['id_lang'] . '" value="' . htmlentities($this->getFieldValue($obj, 'description', intval($language['id_lang'])), ENT_COMPAT, 'UTF-8') . '" /><sup> *</sup> <span class="hint" name="help_box">' . $this->l('Invalid characters:') . ' <>;=#{}<span class="hint-pointer"> </span></span> <p style="clear: both;">' . $this->l('Will appear in cart next to voucher code') . '</p> </div>'; } $this->displayFlags($languages, $defaultLanguage, 'description', 'description'); echo ' </div><br /><br /><br /> <div class="clear" / > <label>' . $this->l('Value:') . ' </label> <div class="margin-form"> <input type="text" size="15" name="value" id="discount_value" value="' . floatval($this->getFieldValue($obj, 'value')) . '" onKeyUp="javascript:this.value = this.value.replace(/,/g, \'.\'); " /> <sup>*</sup> <p style="clear: both;">' . $this->l('Either the monetary amount or the %, depending on Type selected above') . '</p> </div> <label>' . $this->l('Total quantity:') . ' </label> <div class="margin-form"> <input type="text" size="15" name="quantity" value="' . intval($this->getFieldValue($obj, 'quantity')) . '" /> <sup>*</sup> <p style="clear: both;">' . $this->l('Total quantity available (mainly for vouchers open to everyone)') . '</p> </div> <label>' . $this->l('Qty per each user:'******' </label> <div class="margin-form"> <input type="text" size="15" name="quantity_per_user" value="' . intval($this->getFieldValue($obj, 'quantity_per_user')) . '" /> <sup>*</sup> <p style="clear: both;">' . $this->l('Number of times a single customer can use this voucher') . '</p> </div> <label>' . $this->l('Minimum amount') . '</label> <div class="margin-form"> <input type="text" size="15" name="minimal" value="' . ($this->getFieldValue($obj, 'minimal') ? floatval($this->getFieldValue($obj, 'minimal')) : '0') . '" onkeyup="javascript:this.value = this.value.replace(/,/g, \'.\'); " /> <sup>*</sup> <p style="clear: both;">' . $this->l('Leave blank or 0 if not applicable') . '</p> </div> <div class="margin-form"> <p> <input type="checkbox" name="cumulable"' . ($this->getFieldValue($obj, 'cumulable') == 1 ? ' checked="checked"' : '') . ' id="cumulable_on" value="1" /> <label class="t" for="cumulable_on"> ' . $this->l('Cumulative with other vouchers') . '</label> </p> </div> <div class="margin-form"> <p> <input type="checkbox" name="cumulable_reduction"' . ($this->getFieldValue($obj, 'cumulable_reduction') == 1 ? ' checked="checked"' : '') . ' id="cumulable_reduction_on" value="1" /> <label class="t" for="cumulable_reduction_on"> ' . $this->l('Cumulative with price reductions') . '</label> </p> </div> <label>' . $this->l('To be used by:') . ' </label> <div class="margin-form"> <select name="id_customer" id="id_customer"> <option value="0">-- ' . $this->l('All customers') . ' --</option> </select><br />' . $this->l('Filter:') . ' <input type="text" size="25" name="filter" id="filter" onkeyup="fillCustomersAjax();" class="space" value="" /> <script type="text/javascript"> var formDiscount = document.layers ? document.forms.discount : document.discount; function fillCustomersAjax() { var filterValue = \'' . (($value = intval($this->getFieldValue($obj, 'id_customer'))) ? $value : '') . '\'; if ($(\'#filter\').val()) filterValue = $(\'#filter\').val(); $.getJSON("' . dirname($currentIndex) . '/ajax.php",{ajaxDiscountCustomers:1,filter:filterValue}, function(customers) { if (customers.length == 0) { formDiscount.id_customer.length = 2; formDiscount.id_customer.options[1].value = -1; formDiscount.id_customer.options[1].text = \'' . $this->l('No match found') . '\'; formDiscount.id_customer.options.selectedIndex = 1; } else { formDiscount.id_customer.length = customers.length + 1; for (i = 0; i < customers.length && i < 50; i++) { formDiscount.id_customer.options[i+1].value = customers[i]["value"]; formDiscount.id_customer.options[i+1].text = customers[i]["text"]; } if (customers.length >= 50) { formDiscount.id_customer.options[50].text = "' . $this->l('Too much results...', __CLASS__, true, false) . '"; formDiscount.id_customer.options[50].value = "_"; } if ($(\'#filter\').val()) formDiscount.id_customer.options.selectedIndex = 1; else if(filterValue) for (i = 0; i < customers.length; i++) if (formDiscount.id_customer.options[i+1].value == filterValue) formDiscount.id_customer.options.selectedIndex = i + 1; } } ); } fillCustomersAjax(); </script> </div><br />'; includeDatepicker(array('date_from', 'date_to'), true); echo ' <label>' . $this->l('From:') . ' </label> <div class="margin-form"> <input type="text" size="20" id="date_from" name="date_from" value="' . ($this->getFieldValue($obj, 'date_from') ? htmlentities($this->getFieldValue($obj, 'date_from'), ENT_COMPAT, 'UTF-8') : date('Y-m-d H:i:s')) . '" /> <sup>*</sup> <p style="clear: both;">' . $this->l('Start date/time from which voucher can be used') . '<br />' . $this->l('Format: YYYY-MM-DD HH:MM:SS') . '</p> </div> <label>' . $this->l('To:') . ' </label> <div class="margin-form"> <input type="text" size="20" id="date_to" name="date_to" value="' . ($this->getFieldValue($obj, 'date_to') ? htmlentities($this->getFieldValue($obj, 'date_to'), ENT_COMPAT, 'UTF-8') : date('Y') + 1 . date('-m-d H:i:s')) . '" /> <sup>*</sup> <p style="clear: both;">' . $this->l('End date/time at which voucher is no longer valid') . '<br />' . $this->l('Format: YYYY-MM-DD HH:MM:SS') . '</p> </div> <label>' . $this->l('Status:') . ' </label> <div class="margin-form"> <input type="radio" name="active" id="active_on" value="1" ' . ($this->getFieldValue($obj, 'active') ? 'checked="checked" ' : '') . '/> <label class="t" for="active_on"> <img src="../img/admin/enabled.gif" alt="' . $this->l('Enabled') . '" title="' . $this->l('Enabled') . '" /></label> <input type="radio" name="active" id="active_off" value="0" ' . (!$this->getFieldValue($obj, 'active') ? 'checked="checked" ' : '') . '/> <label class="t" for="active_off"> <img src="../img/admin/disabled.gif" alt="' . $this->l('Disabled') . '" title="' . $this->l('Disabled') . '" /></label> <p>' . $this->l('Enable or disable voucher') . '</p> </div> <div class="margin-form"> <input type="submit" value="' . $this->l(' Save ') . '" name="submitAdd' . $this->table . '" class="button" /> </div> <div class="small"><sup>*</sup> ' . $this->l('Required field') . '</div> </fieldset> </form>'; }
public function displayForm($isMainTab = true) { global $currentIndex, $cookie; parent::displayForm(); if (!($obj = $this->loadObject(true))) { return; } echo ' <script type="text/javascript"> function discountType() { if ($("#id_discount_type").val() == 0) $("#value-div").css("display", "none"); else if ($("#id_discount_type").val() == 1) { $("#value-div").css("display", "block"); $("#percent-span").css("display", "block"); $("#id_currency").css("display", "none"); } else if ($("#id_discount_type").val() == 2) { $("#value-div").css("display", "block"); $("#percent-span").css("display", "none"); $("#id_currency").css("display", "block"); $(\'#behavior_not_exhausted\').show(); } else if ($("#id_discount_type").val() == 3) $("#value-div").css("display", "none"); if ($(\'#id_discount_type\').val() != 2) $(\'#behavior_not_exhausted\').hide(); } $(document).ready(function(){ $("#id_discount_type").change(function(){discountType();}); discountType(); }); </script> <form action="' . $currentIndex . '&submitAdd' . $this->table . '=1&token=' . $this->token . '" id="discount" name="discount" method="post" enctype="multipart/form-data"> ' . ($obj->id ? '<input type="hidden" name="id_' . $this->table . '" value="' . $obj->id . '" />' : '') . ' <fieldset><legend><img src="../img/admin/coupon.gif" />' . $this->l('Vouchers') . '</legend> <label>' . $this->l('Code:') . ' </label> <div class="margin-form"> <input type="text" size="30" maxlength="32" name="name" value="' . htmlentities($this->getFieldValue($obj, 'name'), ENT_COMPAT, 'UTF-8') . '" id="code" /> <sup>*</sup> <img src="../img/admin/news-new.gif" onclick="gencode(8);" style="cursor: pointer" /> <span class="hint" name="help_box">' . $this->l('Invalid characters: numbers and') . ' !<>,;?=+()@#"�{}_$%:<span class="hint-pointer"> </span></span> <p class="clear">' . $this->l('The voucher\'s code, at least 3 characters long, which the customer types in during check-out') . '</p> </div> <label>' . $this->l('Type:') . ' </label> <div class="margin-form"> <select name="id_discount_type" id="id_discount_type" onchange="free_shipping()"> <option value="0">' . $this->l('-- Choose --') . '</option>'; $discountTypes = Discount::getDiscountTypes((int) $cookie->id_lang); foreach ($discountTypes as $discountType) { echo '<option value="' . (int) $discountType['id_discount_type'] . '"' . ($this->getFieldValue($obj, 'id_discount_type') == $discountType['id_discount_type'] ? ' selected="selected"' : '') . '>' . $discountType['name'] . '</option>'; } echo ' </select> <sup>*</sup> </div> <div id="value-div" style="display:none"> <label>' . $this->l('Value') . '</label> <div class="margin-form"> <input style="float:left;width:80px" type="text" name="value" id="discount_value" value="' . (double) $this->getFieldValue($obj, 'value') . '" onKeyUp="javascript:this.value = this.value.replace(/,/g, \'.\'); " /> <select id="id_currency" name="id_currency" style="float:left;margin-left:10px;width:50px;display:none"> <option value="0">--</option>'; foreach (Currency::getCurrencies() as $row) { echo ' <option value="' . (int) $row['id_currency'] . '" ' . ($this->getFieldValue($obj, 'id_currency') == $row['id_currency'] ? 'selected="selected"' : '') . '>' . $row['sign'] . '</option>'; } echo ' </select> <span id="percent-span" style="margin-left:10px;display:none;float:left;font-size:12px;font-weight:bold;color:black"> %</span> <sup style="float:left;margin-left:5px">*</sup> <p class="clear">' . $this->l('Either the monetary amount or the %, depending on Type selected above') . '</p> </div> <div id="behavior_not_exhausted" style="display:none;"> <label>' . $this->l('Behavior:') . '</label> <div class="margin-form"> <select name="behavior_not_exhausted"> <option value="1" ' . ($obj->behavior_not_exhausted === 1 ? 'selected="selected"' : '') . '>' . $this->l('Reduces the voucher value to correspond to the order amount') . '</option> <option value="2" ' . ($obj->behavior_not_exhausted == 2 ? 'selected="selected"' : '') . '>' . $this->l('Create a new voucher with the remaining amount') . '</option> <option value="3" ' . ($obj->behavior_not_exhausted == 3 ? 'selected="selected"' : '') . '>' . $this->l('Create negative invoice') . '</option> </select> </div> </div> </div> <label>' . $this->l('Description:') . ' </label> <div class="margin-form">'; foreach ($this->_languages as $language) { echo ' <div id="description_' . $language['id_lang'] . '" style="display: ' . ($language['id_lang'] == $this->_defaultFormLanguage ? 'block' : 'none') . '; float: left;"> <input size="33" type="text" name="description_' . $language['id_lang'] . '" value="' . htmlentities($this->getFieldValue($obj, 'description', (int) $language['id_lang']), ENT_COMPAT, 'UTF-8') . '" /><sup> *</sup> <span class="hint" name="help_box">' . $this->l('Invalid characters:') . ' <>;=#{}<span class="hint-pointer"> </span></span> <p class="clear">' . $this->l('Will appear in cart next to voucher code') . '</p> </div>'; } $this->displayFlags($this->_languages, $this->_defaultFormLanguage, 'description', 'description'); echo ' </div> <div class="clear" / > <label>' . $this->l('Categories:') . ' </label> <div class="margin-form"> <table cellspacing="0" cellpadding="0" class="table" style="width: 600px;"> <tr> <th><input type="checkbox" name="checkme" class="noborder" onclick="checkDelBoxes(this.form, \'categoryBox[]\', this.checked)" /></th> <th>' . $this->l('ID') . '</th> <th>' . $this->l('Name') . '</th> </tr>'; $done = array(); $index = array(); $indexedCategories = isset($_POST['categoryBox']) ? $_POST['categoryBox'] : ($obj->id ? Discount::getCategories($obj->id) : array()); $categories = Category::getCategories((int) $cookie->id_lang, false); foreach ($indexedCategories as $k => $row) { $index[] = isset($row['id_category']) ? (int) $row['id_category'] : (int) $row; } $this->recurseCategoryForInclude((int) Tools::getValue($this->identifier), $index, $categories, $categories[0][1], 1, $obj->id); echo ' </table> <p style="padding:0px; margin:0px 0px 10px 0px;">' . $this->l('Check all box(es) of categories to which the discount is to be applied') . '<sup> *</sup></p> </div> <div class="clear" / > <label>' . $this->l('Total quantity:') . ' </label> <div class="margin-form"> <input type="text" size="15" name="quantity" value="' . (int) $this->getFieldValue($obj, 'quantity') . '" /> <sup>*</sup> <p class="clear">' . $this->l('Total quantity available (mainly for vouchers open to everyone)') . '</p> </div> <label>' . $this->l('Qty per each user:'******' </label> <div class="margin-form"> <input type="text" size="15" name="quantity_per_user" value="' . (int) $this->getFieldValue($obj, 'quantity_per_user') . '" /> <sup>*</sup> <p class="clear">' . $this->l('Number of times a single customer can use this voucher') . '</p> </div> <label>' . $this->l('Minimum purchase') . '</label> <div class="margin-form"> <input type="text" size="15" name="minimal" value="' . ($this->getFieldValue($obj, 'minimal') ? (double) $this->getFieldValue($obj, 'minimal') : '0') . '" onkeyup="javascript:this.value = this.value.replace(/,/g, \'.\'); " /> <sup>*</sup> <select name="include_tax" id="include_tax" style="vertical-align: middle;"> <option value="0" ' . ($obj->include_tax == 0 ? 'selected="selected"' : '') . '>' . $this->l('tax excl.') . '</option> <option value="1" ' . ($obj->include_tax == 1 ? 'selected="selected"' : '') . '>' . $this->l('tax incl.') . '</option> </select> <p class="clear">' . $this->l('0 if not applicable') . '</p> </div> <div class="margin-form"> <p> <input type="checkbox" name="cumulable"' . ($this->getFieldValue($obj, 'cumulable') == 1 ? ' checked="checked"' : '') . ' id="cumulable_on" value="1" /> <label class="t" for="cumulable_on"> ' . $this->l('Cumulative with other vouchers') . '</label> </p> </div> <div class="margin-form"> <p> <input type="checkbox" name="cumulable_reduction"' . ($this->getFieldValue($obj, 'cumulable_reduction') == 1 ? ' checked="checked"' : '') . ' id="cumulable_reduction_on" value="1" /> <label class="t" for="cumulable_reduction_on"> ' . $this->l('Cumulative with price reductions') . '</label> </p> </div> <label>' . $this->l('To be used by:') . ' </label> <div class="margin-form"> <input type="hidden" name="id_customer" value="0"> <input type="hidden" name="id_group" value="0"> <select name="id_target" id="id_target"> <option value="0_0">-- ' . $this->l('All customers') . ' --</option> <optgroup label="' . $this->l('Groups') . '" id="id_target_group"> </optgroup> <optgroup label="' . $this->l('Customers') . '" id="id_target_customers"> </optgroup> </select><br />' . $this->l('Filter:') . ' <input type="text" size="25" name="filter" id="filter" onkeyup="fillCustomersAjax();" class="space" value="" /> <script type="text/javascript"> var formDiscount = document.layers ? document.forms.discount : document.discount; function fillCustomersAjax() { var filterValue = \'' . (($value = (int) $this->getFieldValue($obj, 'id_customer')) ? '0_' . $value : (($value = (int) $this->getFieldValue($obj, 'id_group')) ? '1_' . $value : '')) . '\'; if ($(\'#filter\').val()) filterValue = $(\'#filter\').val(); $.getJSON("' . dirname($currentIndex) . '/ajax.php",{ajaxDiscountCustomers:1,filter:filterValue}, function(obj) { var groups_length = obj.groups.length; if (obj.groups.length == 0) groups_length = 1; var customers_length = obj.customers.length; if (obj.customers.length == 0) customers_length = 1; formDiscount.id_target.length = 1 + customers_length + groups_length; if (obj.groups.length == 0) { formDiscount.id_target.options[1].value = -1; formDiscount.id_target.options[1].text = \'' . $this->l('No match found') . '\'; formDiscount.id_target.options[1].className = "groups_filtered"; } else { for (i = 0; i < obj.groups.length && i < 50; i++) { formDiscount.id_target.options[i+1].value = obj.groups[i]["value"]; formDiscount.id_target.options[i+1].text = obj.groups[i]["text"]; formDiscount.id_target.options[i+1].className = "groups_filtered"; } if (obj.groups.length >= 50) { formDiscount.id_target.options[50].text = "' . $this->l('Too many results...', __CLASS__, true, false) . '"; formDiscount.id_target.options[50].value = "_"; formDiscount.id_target.options[50].className = "groups_filtered"; } } if (obj.customers.length == 0) { formDiscount.id_target.options[groups_length+1].value = -1; formDiscount.id_target.options[groups_length+1].text = \'' . $this->l('No match found') . '\'; formDiscount.id_target.options[groups_length+1].className = "customers_filtered"; } else { for (i = 0; i < obj.customers.length && i < 50; i++) { formDiscount.id_target.options[groups_length+1+i].value = obj.customers[i]["value"]; formDiscount.id_target.options[groups_length+1+i].text = obj.customers[i]["text"]; formDiscount.id_target.options[groups_length+1+i].className = "customers_filtered"; } if (obj.customers.length >= 50) { formDiscount.id_target.options[groups_length+i].text = "' . $this->l('Too many results...', __CLASS__, true, false) . '"; formDiscount.id_target.options[groups_length+i].value = "_"; formDiscount.id_target.options[groups_length+i].className = "customers_filtered"; } } $(".groups_filtered").appendTo($("#id_target_group")); $(".customers_filtered").appendTo($("#id_target_customers")); if ($(\'#filter\').val()) { if (formDiscount.id_target.options[1].value != -1) formDiscount.id_target.options.selectedIndex = 1; else formDiscount.id_target.options.selectedIndex = 2; } else if (filterValue) for (i = 0; i < (customers_length + groups_length); i++) if (formDiscount.id_target.options[i+1].value == filterValue) formDiscount.id_target.options.selectedIndex = i + 1; } ); } fillCustomersAjax(); </script> </div><br />'; includeDatepicker(array('date_from', 'date_to'), true); echo ' <label>' . $this->l('From:') . ' </label> <div class="margin-form"> <input type="text" size="20" id="date_from" name="date_from" value="' . ($this->getFieldValue($obj, 'date_from') ? htmlentities($this->getFieldValue($obj, 'date_from'), ENT_COMPAT, 'UTF-8') : date('Y-m-d H:i:s')) . '" /> <sup>*</sup> <p class="clear">' . $this->l('Date /time from which voucher is valid') . '<br />' . $this->l('Format: YYYY-MM-DD HH:MM:SS') . '</p> </div> <label>' . $this->l('To:') . ' </label> <div class="margin-form"> <input type="text" size="20" id="date_to" name="date_to" value="' . ($this->getFieldValue($obj, 'date_to') ? htmlentities($this->getFieldValue($obj, 'date_to'), ENT_COMPAT, 'UTF-8') : date('Y') + 1 . date('-m-d H:i:s')) . '" /> <sup>*</sup> <p class="clear">' . $this->l('End date/time at which voucher is no longer valid') . '<br />' . $this->l('Format: YYYY-MM-DD HH:MM:SS') . '</p> </div> <label>' . $this->l('Display the voucher in the cart summary:') . ' </label> <div class="margin-form"> <input type="radio" name="cart_display" id="cart_active_on" value="1" ' . ($this->getFieldValue($obj, 'cart_display') ? 'checked="checked" ' : '') . '/> <label class="t" for="cart_display_on"> <img src="../img/admin/enabled.gif" alt="' . $this->l('Enabled') . '" title="' . $this->l('Enabled') . '" /></label> <input type="radio" name="cart_display" id="cart_active_off" value="0" ' . (!$this->getFieldValue($obj, 'cart_display') ? 'checked="checked" ' : '') . '/> <label class="t" for="cart_display_off"> <img src="../img/admin/disabled.gif" alt="' . $this->l('Disabled') . '" title="' . $this->l('Disabled') . '" /></label> </div> <div class="clear" / > <label>' . $this->l('Status:') . ' </label> <div class="margin-form"> <input type="radio" name="active" id="active_on" value="1" ' . ($this->getFieldValue($obj, 'active') ? 'checked="checked" ' : '') . '/> <label class="t" for="active_on"> <img src="../img/admin/enabled.gif" alt="' . $this->l('Enabled') . '" title="' . $this->l('Enabled') . '" /></label> <input type="radio" name="active" id="active_off" value="0" ' . (!$this->getFieldValue($obj, 'active') ? 'checked="checked" ' : '') . '/> <label class="t" for="active_off"> <img src="../img/admin/disabled.gif" alt="' . $this->l('Disabled') . '" title="' . $this->l('Disabled') . '" /></label> <p>' . $this->l('Enable or disable voucher') . '</p> </div> <div class="margin-form"> <input type="submit" value="' . $this->l(' Save ') . '" name="submitAdd' . $this->table . '" class="button" /> </div> <div class="small"><sup>*</sup> ' . $this->l('Required field') . '</div> </fieldset> </form>'; }
/** * Return discount value * * @param integer $nb_discounts Number of discount currently in cart * @param boolean $order_total_products Total cart products amount * @return mixed Return a float value or '!' if reduction is 'Shipping free' */ function getValue($nb_discounts = 0, $order_total_products = 0, $shipping_fees = 0, $idCart = false, $useTax = true) { $totalAmount = 0; if (!$this->cumulable and intval($nb_discounts) > 1) { return 0; } if (!$this->active) { return 0; } if (!$this->quantity) { return 0; } $date_start = strtotime($this->date_from); $date_end = strtotime($this->date_to); if (time() < $date_start or time() > $date_end) { return 0; } $cart = new Cart(intval($idCart)); $products = $cart->getProducts(); $categories = Discount::getCategories(intval($this->id)); $in_category = false; foreach ($products as $product) { if (count($categories)) { if (Product::idIsOnCategoryId($product['id_product'], $categories)) { $totalAmount += $useTax ? $product['total_wt'] : $product['total']; } } } $totalAmount += floatval($shipping_fees); if ($this->minimal > 0 and $totalAmount < $this->minimal) { return 0; } switch ($this->id_discount_type) { case 1: // % on order $amount = 0; $percentage = $this->value / 100; foreach ($products as $product) { if (Product::idIsOnCategoryId($product['id_product'], $categories)) { $amount += ($useTax ? $product['total_wt'] : $product['total']) * $percentage; } } return $amount; case 2: // amount foreach ($products as $product) { if (Product::idIsOnCategoryId($product['id_product'], $categories)) { $in_category = true; break; } } return $in_category ? $this->value : 0; case 3: // Shipping is free return '!'; } return 0; }