ソースを参照

MMIProductDLUO : Option for automatic promotional price depending on ddm

Mathieu Moulin 1 年間 前
コミット
d99072950d

+ 16 - 15
htdocs/core/tpl/objectline_create.tpl.php

@@ -263,9 +263,6 @@ if ($nolinesbefore) {
 				} else {
 					$form->select_produits(GETPOST('idprod'), 'idprod', $filtertype, $conf->product->limit_size, $buyer->price_level, $statustoshow, 2, '', 1, array(), $buyer->id, '1', 0, 'maxwidth500', 0, '', GETPOST('combinations', 'array'));
 				}
-				// Added by MMI Mathieu Moulin iProspective
-				if (!empty($conf->global->MAIN_SHOW_ADDED_PRODUCT_LABEL))
-					echo '<span id="added_labelprod"></span>';
 				if (!empty($conf->global->MAIN_AUTO_OPEN_SELECT2_ON_FOCUS_FOR_CUSTOMER_PRODUCTS)) {
 					?>
 				<script>
@@ -346,6 +343,9 @@ if ($nolinesbefore) {
 				echo '<div id="attributes_box"></div>';
 			}
 		}
+		// Added by MMI Mathieu Moulin iProspective
+		if (!empty($conf->global->MAIN_SHOW_ADDED_PRODUCT_LABEL))
+			echo '<div id="added_labelprod"></div>';
 		// Editor wysiwyg
 		require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
 		$nbrows = ROWS_2;
@@ -714,18 +714,6 @@ if (!empty($usemargins) && $user->rights->margins->creer) {
 		<?php
 	} ?>
 
-	<?php
-	// Added by MMI Mathieu Moulin iProspective
-	if (!empty($conf->global->MAIN_SHOW_ADDED_PRODUCT_LABEL)) { ?>
-	$("#idprod").change(function()
-	{
-		var label = $(this).attr('data-label');
-		$("#added_labelprod").html(label);
-	});
-		<?php
-	}
-	?>
-
 	/* When changing predefined product, we reload list of supplier prices required for margin combo */
 	$("#idprod, #idprodfournprice").change(function()
 	{
@@ -775,6 +763,19 @@ if (!empty($usemargins) && $user->rights->margins->creer) {
 
 						console.log("objectline_create.tpl set content of price_ht");
 						jQuery("#price_ht").val(data.price_ht);
+						// Added by MMI Mathieu Moulin iProspective
+						<?php
+						if (!empty($conf->global->MAIN_SHOW_ADDED_PRODUCT_LABEL)) { ?>
+						if (data.ref != undefined) {
+							var label = data.ref+' - '+data.label+' - QTY: '+data.qty;
+							if (data.sellby != undefined)
+								label += ' - DDM: '+data.sellby.split('-').reverse().join('/')+' (QTY:'+data.lot_qty+')';
+							$("#added_labelprod").html('<b>'+label+'</b>');
+						}
+						<?php } ?>
+						// MMI Discount
+						//alert(data.discount);
+						jQuery("#remise_percent").val(data.discount);
 						<?php
 						if (!empty($conf->global->PRODUIT_AUTOFILL_DESC) && $conf->global->PRODUIT_AUTOFILL_DESC == 1) {
 							if (!empty($conf->global->MAIN_MULTILANGS) && !empty($conf->global->PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE)) { ?>

+ 1 - 1
htdocs/custom/mmiproductdluo

@@ -1 +1 @@
-Subproject commit d7f9d6f638cf15aface9c39c5497ab97372b83e2
+Subproject commit 584e2f8a86c9295b710bdb6a9ef60b796ac64936

+ 51 - 0
htdocs/product/ajax/products.php

@@ -149,6 +149,53 @@ if ($action == 'fetch' && !empty($id)) {
 			}
 		}
 
+		// MMI
+		// Price by DDM
+		if (!empty($conf->global->MMIPRODUCTDLUO_ORDER_PROMOPRICE_ENABLE)) { // If we need a particular price related to qty
+			$sql = "SELECT l.rowid, l.fk_product, l.sellby, sl.qty stock";
+			$sql .= " FROM ".MAIN_DB_PREFIX."product_lot l";
+			$sql .= " INNER JOIN ".MAIN_DB_PREFIX."product_stock s ON s.fk_product=l.fk_product";
+			$sql .= " INNER JOIN ".MAIN_DB_PREFIX."product_batch sl ON sl.fk_product_stock=s.rowid AND sl.batch=l.batch";
+			$sql .= " WHERE l.fk_product = ".((int) $id);
+			$sql .= " AND sl.qty >0";
+			$sql .= " ORDER BY l.sellby";
+			$sql .= " LIMIT 1";
+			// @todo considérer le stock réservé ET ce qui est déjà mis dans le même document !
+			// cela permettra d'ajouter le même produit plusieurs fois,
+			// et au fur et à mesure les lots les plus vieux disparaissent et les prix sont bons
+			//echo $sql; die();
+
+			$result = $db->query($sql);
+			if ($result) {
+				$time = time();
+				$date_promo = date('Y-m-d', $time+86400*$conf->global->MMIPRODUCTDLUO_PROMO);
+				$date_antigaspi = date('Y-m-d', $time+86400*$conf->global->MMIPRODUCTDLUO_ANTIGASPI);
+				$objp = $db->fetch_object($result);
+				$sellby = $objp->sellby;
+				$lot_qty = $objp->stock;
+				if ($objp) {
+					//var_dump($objp); die();
+					if ($objp->sellby < $date_antigaspi) {
+						$outdiscount = $conf->global->MMIPRODUCTDLUO_ORDER_PROMOPRICE_ANTIGASPI;
+						$upd = true;
+					}
+					elseif ($objp->sellby < $date_promo) {
+						$outdiscount = $conf->global->MMIPRODUCTDLUO_ORDER_PROMOPRICE_PROMO;
+						$upd = true;
+					}
+				}
+				if (!empty($upd)) {
+					$found = true;
+					$outprice_ht = price($object->price*(100-$outdiscount)/100);
+					$outprice_ttc = price($object->price_ttc*(100-$outdiscount)/100);
+					$outqty = $objp->stock;
+					$outpricebasetype = $object->price_base_type;
+					$outtva_tx = $object->tva_tx;
+					$outdefault_vat_code = $object->default_vat_code;
+				}
+			}
+		}
+
 		// Multiprice (1 price per level)
 		if (!$found && isset($price_level) && $price_level >= 1 && (!empty($conf->global->PRODUIT_MULTIPRICES) || !empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES))) { // If we need a particular price level (from 1 to 6)
 			$sql = "SELECT price, price_ttc, price_base_type,";
@@ -225,6 +272,10 @@ if ($action == 'fetch' && !empty($id)) {
 			'discount' => $outdiscount,
 			'mandatory_period' => $mandatory_period,
 			'array_options'=>$object->array_options);
+		if (!empty($sellby)) {
+			$outjson['sellby'] = $sellby;
+			$outjson['lot_qty'] = $lot_qty;
+		}
 	}
 
 	echo json_encode($outjson);