Post by spirit » Thu Sep 08, 2011 2:33 pm

Hola muchachos/as:

Necesito de su ayuda con el siguiente problema relativo a las pre-ventas.

Estuve leyendo hartos topics sobre el problema que hay con el sistema de pre-ventas de opencart, que en realidad no funciona como muchos quisiéramos. El problema se presenta en que al dejar un producto en estado de "pre-venta" con unidades disponibles para comprar (10 unidades por ejemplo), en la página se muestra que el producto está con disponibilidad "En stock" y no en "Pre-venta" como debiese ser.

Image

Es decir, al colocar unidades disponibles de un producto en el admin, siempre muestra que el producto está "En Stock", independiente del estado de disponibilidad que se haya seleccionado en el admin (pre-venta, disponibles en 2-3 días, otros). Y si uno coloca una fecha de lanzamiento/llegada del producto, el producto no se mostrará en la página hasta la llegada de ese día. Esto es pésimo porque no permite a los clientes comprar un producto por adelantado por así decirlo (a mi modo de ver es bastante mala la lógica del sistema de pre-ventas, nosé a quien se pudo ocurrir algo así como ocultar el producto hasta la llegada de esa fecha).

En varios topics, los consejos para que funcionara de algún modo casero el sistema de pre-ventas (para que se mostrara en la página un producto en "Pre-venta"), se centraban en:

- Dejar el stock del producto en pre-venta en "0" (sin unidades disponibles).
- Marcar la opción de "permitir comprar productos aunque estén sin stock", sin unidades disponibles.
- Marcar la opción de "no mostrar que el producto está fuera de stock" (no mostrar un mensaje de advertencia).
- Colocar el estado del inventario del producto en "Pre-venta".

El problema de esta forma por así decirlo "casera", es que uno como administrador del sitio, no puede establecer un número determinado de unidades en pre-ventas disponibles, sino que se podrán comprar cuantas se pueda (un desorden).

Además, desordena todo el asunto del stock con los demás productos, puesto que este cambio afecta a "todos" los productos por igual (me refiero al cambio de dejar habilitada la opción de "permitir comprar un producto aunque esté fuera de stock".

Bueno, mi inquietud entonces es ¿De qué forma puedo dejar un producto en estado de "pre-venta", por ejemplo con 10 unidades disponibles, y que este estado de disponibilidad "Pre-venta", aparezca en la página del producto como corresponde?

Ojalá no sea muy compleja la modificación de código y podamos solucionar este gran problema para muchos.
O si alguien tiene una buena solución para el asunto.

Espero su ayuda porfavor,

Un saludo y gracias como siempre! :)

Active Member

Posts

Joined
Sat Oct 02, 2010 7:40 am

Post by cofran » Sat Sep 10, 2011 12:04 am

Anda a la base de datos (phpmyadmin por lo general) y agrega un campo nuevo a la tabla "PRODUCT" llamado por ejemplo "preventa" que sea un buleano para luego hacerlo TRUE o FALSE (activo o inactivo) la sentencia del SQL puede ser esta:

Code: Select all

ALTER TABLE  `product` ADD  `preventa` BOOLEAN NOT NULL DEFAULT  '0' AFTER  `stock_status_id`
Luego vas al archivo ubicado en: admin/controller/catalog/product.php y buscas la linea 877 aproximadamente que dice:

Code: Select all

		if (isset($this->request->post['stock_status_id'])) {
      		$this->data['stock_status_id'] = $this->request->post['stock_status_id'];
    	} else if (isset($product_info)) {
      		$this->data['stock_status_id'] = $product_info['stock_status_id'];
    	} else {
			$this->data['stock_status_id'] = $this->config->get('config_stock_status_id');
		}
y debajo de eso agregas:

Code: Select all

		if (isset($this->request->post['preventa'])) {
      		$this->data['preventa'] = $this->request->post['preventa'];
    	} elseif (isset($product_info)) {
      		$this->data['preventa'] = $product_info['preventa'];
    	} else {
			$this->data['preventa'] = 0;
		}
ahora vas al archivo admin/model/catalog/product.php y buscas donde dice:

Code: Select all

	public function addProduct($data) {
		$this->db->query("INSERT INTO " . DB_PREFIX . "product SET model = '" . $this->db->escape($data['model']) . "', sku = '" . $this->db->escape($data['sku']) . "' blablablablabla...
allí, donde esta el blablabla podes poner el nuevo dato, mira que va con coma ',' el código a insertar sería:

Code: Select all

preventa = '" . (int)$preventa . "'
te tendría que quedar así:

Code: Select all

	public function addProduct($data) {
		$this->db->query("INSERT INTO " . DB_PREFIX . "product SET model = '" . $this->db->escape($data['model']) . "', sku = '" . $this->db->escape($data['sku']) . "', preventa = '" . (int)$preventa . "' blablablablabla...
también busca (en este mismo archivo) donde dice:

Code: Select all

	public function editProduct($product_id, $data) {
		$this->db->query("UPDATE " . DB_PREFIX . "product SET model = '" . $this->db->escape($data['model']) . "', sku = '" . $this->db->escape($data['sku']) . "', balblablabla...
y hace lo mismo, agrega lo de la preventa exactamente igual como hiciste en el de arriba.

Ahora vamos al archivo admin/view/template/catalog/product_form.tpl y busca la linea 101 aproximadamente que dice:

Code: Select all

            <tr>
              <td><?php echo $entry_stock_status; ?></td>
              <td><select name="stock_status_id">
                  <?php foreach ($stock_statuses as $stock_status) { ?>
                  <?php if ($stock_status['stock_status_id'] == $stock_status_id) { ?>
                  <option value="<?php echo $stock_status['stock_status_id']; ?>" selected="selected"><?php echo $stock_status['name']; ?></option>
                  <?php } else { ?>
                  <option value="<?php echo $stock_status['stock_status_id']; ?>"><?php echo $stock_status['name']; ?></option>
                  <?php } ?>
                  <?php } ?>
                </select></td>
            </tr>
y debajo de esta agrega el siguiente código:

Code: Select all

            <tr>
              <td>Pre-Venta</td>
              <td><select name="preventa">
                  <?php if ($preventa) { ?>
                  <option value="1" selected="selected"><?php echo $text_yes; ?></option>
                  <option value="0"><?php echo $text_no; ?></option>
                  <?php } else { ?>
                  <option value="1"><?php echo $text_yes; ?></option>
                  <option value="0" selected="selected"><?php echo $text_no; ?></option>
                  <?php } ?>
                </select></td>
            </tr>
Bueno ahí ya terminamos con el admin, ahora hay que ir al FRONT del sitio a seguir modificando...

Anda al archivo catalog/controller/product/product.php y busca la linea 185 aproximadamente que dice:

Code: Select all

			if ($product_info['quantity'] <= 0) {
				$this->data['stock'] = $product_info['stock_status'];
			} elseif ($this->config->get('config_stock_display')) {
				$this->data['stock'] = $product_info['quantity'];
			} else {
				$this->data['stock'] = $this->language->get('text_instock');
			}
y debajo de esto agrega lo siguiente:

Code: Select all

			if ($product_info['preventa'] === TRUE && $product_info['quantity'] >= 1) {
				$this->data['stock'] = 'Pre-Venta';
			} else {
				$this->data['stock'] = $product_info['stock_status'];
			}
Nota: si no funciona, proba modificando $product_info['preventa'] === TRUE por $product_info['preventa'] == 1 sin eliminar el resto de código!!!!

Ahora lo último, anda al archivo catalog/model/catalog/product.php y busca la linea 27 que dice:

Code: Select all

'stock_status'     => $query->row['stock_status'],
y debajo de esta agrega:

Code: Select all

'preventa'     => $query->row['preventa'],
No lo he probado pero por lógica debe de funcionar, ahora cuando un producto este en "preventa" donde aparece la información del stock, va a aparecer el texto "preventa", en caso de que vendas todo el "stock" que pongas, aparecerá el texto de Agotado o lo que hayas configurado que queres que aparezca allí cuando no hay stock

User avatar
Active Member

Posts

Joined
Thu Oct 01, 2009 7:37 am
Location - Córdoba, Argentina

Post by celestial » Sat Sep 10, 2011 12:52 am

MUY bueno Cofran, lo usare para otros asuntos, para lo que el necesita es el mismo post que puse anteriormente, la logica del programa para PREVENTA es perfecta, lo que pasa es que no la saben usar. Aca esta la explicacion.

http://forum.opencart.com/viewtopic.php ... 44#p194881

Celestial - Martín Abel Rosales
WhatsApp: 50671482211
Email: martinrosales2012@hotmail.com
Skype: martin.abel.rosales
San José , Costa Rica


User avatar
Expert Member

Posts

Joined
Sat Mar 20, 2010 4:19 am
Location - Costa Rica

Post by cofran » Sat Sep 10, 2011 1:07 am

esta buena la solución celestial lo único que de esa forma no controlaría el stock... pero es obvio que esta mucho mas sencillo que modificar archivos :crazy:

User avatar
Active Member

Posts

Joined
Thu Oct 01, 2009 7:37 am
Location - Córdoba, Argentina

Post by spirit » Sat Sep 10, 2011 1:16 am

celestial wrote:MUY bueno Cofran, lo usare para otros asuntos, para lo que el necesita es el mismo post que puse anteriormente, la logica del programa para PREVENTA es perfecta, lo que pasa es que no la saben usar. Aca esta la explicacion.

http://forum.opencart.com/viewtopic.php ... 44#p194881
Celestial, lee el post que puse en ese topic porfavor :)
Me parece que este topic y el otro que indicas, buscan exactamente lo mismo, por lo que sería bueno que centráramos la discusión en un sólo topic.

Cofran: te pasaste master, al parecer esta es la solución que andábamos buscando! =D
Pero antes de implementarla y probar si funciona todo, quiero que ver si es realmente esta la forma indicada o se les ocurre otra cosa. Porfavor lee también el topic que indicó celestial, para ver si tu solución es precisamente para eso.

EDITO:

Sí, celestial planteó lo mismo que coloqué al comienzo de este topic, por lo que al parecer diste con la solución cofran!
Ahora voy saliendo, pero apenas regrese, seguiré todos los pasos que indicaste y veremos como anda.

Gracias! :)

Active Member

Posts

Joined
Sat Oct 02, 2010 7:40 am

Post by celestial » Sat Sep 10, 2011 1:23 am

cofran wrote:esta buena la solución celestial lo único que de esa forma no controlaría el stock... pero es obvio que esta mucho mas sencillo que modificar archivos :crazy:
Cofran cual STOCK si esta en preventa??? ahi es donde esta la confusion, si esta en preventa significa que no hay, que lo estan vendiendo por adelantado y ademas que esta pagado, que cuando llegue (ahi entra en juego la fecha de disponibilidad) se lo enviaras, más bien deberia de preocuparse por mostrar a los clientes en el producto esa fecha.

EDITO: Propuesta, lo que has hecho COFRAN hay que disminuirlo para quede como un simple campo numerico donde podemos meter datos de MINIMO_PARA_NUEVO_PEDIDO para aumentar el INVENTARIO esto al lado administrativo y siempre hacer una revision entre el campo de CANTIDAD y el campo nuevo o sea:

Si CANTIDAD MINIMA PARA HACER NUEVO PEDIDO <= CANTIDAD (Avisar al administrador que es hora de pedir ese producto (en rojo con alarma y aviso por email, etc. :crazy: ) cuanto antes. Seria buena performance dejar un margen del 5% del total del inventario del producto como minimo de pedir. Porque esta es la principal preocupacion que se queden sin inventario y que los clientes comiencen a comprar sin haber en existencia por haber marcado si en poder comprar sin stock. Yo les vendo a los clientes aunque no tenga el producto y le aumento el tiempo de entrega para darme más plazo mientras lo pido al proveedor, pero eso sabiendo que el proveedor es super cumplido por supuesto. ;)

Celestial - Martín Abel Rosales
WhatsApp: 50671482211
Email: martinrosales2012@hotmail.com
Skype: martin.abel.rosales
San José , Costa Rica


User avatar
Expert Member

Posts

Joined
Sat Mar 20, 2010 4:19 am
Location - Costa Rica

Post by jmariani » Sat Sep 10, 2011 1:55 am

jaaj esta muy bueno, la solucion que yo di esta mas locaaa.. estoy que la borro.. jeje era muy hardcore.. modificaba todos lo de status in stock a pre-venta.. :crazy: jaja la verdad que no la pense bien, aunque bueno, porlomenos quedo la explicacion de como modificar algo del lenguaje..:)

tengo una confusión increíble respecto al concepto de pre-venta.. osea en la definicion de los terminos..

osea pre-venta es ..que lo pueden comprar pero el producto no se encuentra en stock? en stock es que existe..
y lo de poner la fecha de publicacion.. esa es la parte que me confunde.. alguien que me haga ejemplo con manzanitas.. :S

jeje.. :)

User avatar
Active Member

Posts

Joined
Mon Sep 05, 2011 11:36 pm

Post by celestial » Sat Sep 10, 2011 2:03 am

jmariani wrote:jaaj esta muy bueno, la solucion que yo di esta mas locaaa.. estoy que la borro.. jeje era muy hardcore.. modificaba todos lo de status in stock a pre-venta.. :crazy: jaja la verdad que no la pense bien, aunque bueno, porlomenos quedo la explicacion de como modificar algo del lenguaje..:)

tengo una confusión increíble respecto al concepto de pre-venta.. osea en la definicion de los terminos..

osea pre-venta es ..que lo pueden comprar pero el producto no se encuentra en stock? en stock es que existe..
y lo de poner la fecha de publicacion.. esa es la parte que me confunde.. alguien que me haga ejemplo con manzanitas.. :S

jeje.. :)
Entra a cualquiera de tus productos y editalo y vete al tab DATOS, lee ahi todos los campos que se muestran.

Celestial - Martín Abel Rosales
WhatsApp: 50671482211
Email: martinrosales2012@hotmail.com
Skype: martin.abel.rosales
San José , Costa Rica


User avatar
Expert Member

Posts

Joined
Sat Mar 20, 2010 4:19 am
Location - Costa Rica

Post by spirit » Sat Sep 10, 2011 4:23 am

Cofran cual STOCK si esta en preventa??? ahi es donde esta la confusion, si esta en preventa significa que no hay, que lo estan vendiendo por adelantado y ademas que esta pagado, que cuando llegue (ahi entra en juego la fecha de disponibilidad) se lo enviaras, más bien deberia de preocuparse por mostrar a los clientes en el producto esa fecha.
Celestial, se refiere a que con tu propuesta del otro topic, que también señalé al comienzo de este topic (es la misma), deshabilitas el control de stock de los productos. A eso se refiere con que no podríamos controlar el stock.

Por otra parte, mi lógica de preventa para juegos por ejemplo, es otra: si un juego se lanza el 10 de diciembre de 2011 por ejemplo y yo como vendedor, ya puedo comprarlo "por adelantado" a mi proveedor, la idea es que yo también pueda publicarlo en mi sitio web para que la gente pueda comprarlo por adelantado (la pre-venta) y quizás acceder incluso a un mejor precio, etc.

Entonces, claramente la función actual de opencart pre-order, fué hecha y pensada de una forma distinta que al menos en este rubro, no sirve para nada. Imagínate, si le colocas una fecha de lanzamiento al producto, sencillamente este no se muestra en la web y entonces ¿Cómo el cliente podrá comprarlo? ¿tendrá que esperar hasta que se publique el día programado? Sería absurdo y en ese caso, ya no sería pre-venta (el nombre lo dice todo: "es una venta por anticipado, antes de la fecha oficial de lanzamiento).

Esto último, creo que también te dejará un poco más claro en el concepto de preventa jmariani :)

Y si tienen más dudas de como debiese funcionar un sistema de pre-ventas, sólo pasen un rato por alguna web de juegos como http://store.steampowered.com/ (ahí está lleno de juegos en pre-venta, es decir, para comprar por adelantado).

Si alguien tiene otra propuesta, bienvenida también. Ojalá, y es mi idea, que el resultado final de toda esta discusión sobre las pre-ventas, sirva para implementarse oficialmente en versiones posteriores de opencart.

Saludos! :)

Active Member

Posts

Joined
Sat Oct 02, 2010 7:40 am

Post by cofran » Sat Sep 10, 2011 4:37 am

A ver... el post esta super claro y no tienen ninguna confución, spirit necesitaba poder tener productos en pre-venta y que esta informacioón/texto les apareciera a los usuarios para aclarar que estan comprando un producto que no esta en stock y que tiene una fecha de disponibilidad o de lanzamiento pero que al mismo tiempo él pudiera poner la cantidad de productos que tiene en pre-venta.

Acá no importa si el concepto de pre-venta es blablablabla o si la pre-venta es no tener stock, o lo que sea. spirit necesitaba poder hacer pre-venta controlando el stock y propuse, a lo que a mi parecer, es una solución con el mínimo de cambios posible a implementar.

Ahora supongamos que yo vendo video juegos y mi proveedor me llama diciendo que dentro de 5 meses sale el "God Of War IV" y que tiene para ofrecerme solamente 10 unidades, entonces yo necesito hacer una preventa de solo 10 unidades ya que no me van a dar mas que eso... ahora una ves que salga al mercado el juego seguro voy a disponer de más stock pero por el momento es solo esa cantidad que me comprometo a conseguir, imagino que algo así será lo que busca spirit o por lo menos según su planteamiento, así es como me lo imagine yo

User avatar
Active Member

Posts

Joined
Thu Oct 01, 2009 7:37 am
Location - Córdoba, Argentina

Post by spirit » Sat Sep 10, 2011 4:41 am

cofran wrote:A ver... el post esta super claro y no tienen ninguna confución, spirit necesitaba poder tener productos en pre-venta y que esta informacioón/texto les apareciera a los usuarios para aclarar que estan comprando un producto que no esta en stock y que tiene una fecha de disponibilidad o de lanzamiento pero que al mismo tiempo él pudiera poner la cantidad de productos que tiene en pre-venta.

Acá no importa si el concepto de pre-venta es blablablabla o si la pre-venta es no tener stock, o lo que sea. spirit necesitaba poder hacer pre-venta controlando el stock y propuse, a lo que a mi parecer, es una solución con el mínimo de cambios posible a implementar.

Ahora supongamos que yo vendo video juegos y mi proveedor me llama diciendo que dentro de 5 meses sale el "God Of War IV" y que tiene para ofrecerme solamente 10 unidades, entonces yo necesito hacer una preventa de solo 10 unidades ya que no me van a dar mas que eso... ahora una ves que salga al mercado el juego seguro voy a disponer de más stock pero por el momento es solo esa cantidad que me comprometo a conseguir, imagino que algo así será lo que busca spirit o por lo menos según su planteamiento, así es como me lo imagine yo
Y sí, es precisamente lo que buscaba cofran, nada más ni nada menos.
Te envié un PM, voy a probar la solución ahora ;D

Active Member

Posts

Joined
Sat Oct 02, 2010 7:40 am

Post by celestial » Sat Sep 10, 2011 5:21 am

Perfecto Cofran, Spirit necesito saber cuando hagas la modificacion: 1. si al hacer compras aplica la disminucion del stock, 2. saber si cumple con lo que pedistes. Si cumple con esas dos condiciones Cofran ha creado un Mod espectacular y sino funciona entonces hay que atacarlo entre todos para echarlo a andar.

Saludes.

Celestial - Martín Abel Rosales
WhatsApp: 50671482211
Email: martinrosales2012@hotmail.com
Skype: martin.abel.rosales
San José , Costa Rica


User avatar
Expert Member

Posts

Joined
Sat Mar 20, 2010 4:19 am
Location - Costa Rica

Post by spirit » Sat Sep 10, 2011 3:54 pm

Ya tengo las primeras conclusiones:

El botón que se agregó (Pre-venta >> si-no), no me funcionó (no me deja colocar "si") por un error en una línea del código que ya informé a cofran (no lo publico porque no quiero dar a conocer la URL por un asunto de privacidad, ya que estoy trabajando en el sitio aún).

Dándole una segunda vuelta a todo este asunto de las pre-ventas, me dí cuenta de algo: lo que queremos lograr es tan simple como que aparezca la palabra "Pre-venta", en el campo de disponibilidad, cuando nosotros queramos, sólo eso. O en otras palabras, poder reemplazar la palabra "En stock" por "Pre-venta" cuando así se necesite, pero manteniendo todo lo demás tal cual como está ahora (el control de stock, indicador de producto agotado, etc). Por eso digo que en el fondo es "sólo un cambio de palabras", porque por detrás todo debe seguir intacto. Ahora bueno, este cambio de palabras que parece sencillo, al parecer tiene toda una lógica y por eso se está buscando una solución.

¿Es esto lo que se logrará con tu propuesta cofran? Lo pregunto por si las moscas.

Te planteo esto cofran porque revisando el código que señalaste, quizás entendiste algo más complejo de lo que se necesita realmente o quizás no. Señalaré lo que buscamos en forma de punteo por si no les quedó claro muchachos:

- Si el producto está con "0" unidades, que muestre en el front/disponibilidad "Agotado" o la frase que escojan en el admin (eso funciona bien actualmente).

- Si el producto está con "unidades" disponibles, que exista la opción de mostrar el producto en "Pre-venta" y no que siempre se muestre "En stock" (esto es lo que no se puede lograr actualmente).

OTRA IDEA:

También se me ocurre que como en el fondo, es una cuestión netamente de palabras en el front ¿no sería mejor quizás, simplemente tener la posibilidad de agregar dicha palabra al lado de la frase "En stock", cuando lo estimemos conveniente? Es decir, cuando tenga un producto en pre-venta, aprieto un botón y automáticamente al lado de "En stock" aparecerá otra frase que dirá por ejemplo (Pre-venta). Más ideal incluso sería poder fijar esa palabra por un período determinado; por ejemplo, el juego estará disponible el 3 de diciembre y ese mismo día, la palabra "pre-venta" desaparecerá del front (bueno esto no es tan necesario, se puede hacer manual jaja).

Aquí lo muestro con foto para ser más ilustrativo:

Image

**No necesariamente tendría que ir al lado de "En stock", también se podría colocar la palabra "Pre-venta" en otro lugar, en otro campo o zona del producto.**

Esta idea, presenta una ventaja frente a la primera que estamos trabajando a mi parecer: que incluso uno podría habilitar la opción de mostrar el inventario disponible en el front + el status de "Pre-venta", para que los clientes sepan cuantas unidades quedan para comprar en preventa. Aquí muestro una foto como ejemplo:

Image

Como ven, quizás está opción es más simple de implementar y se le puede sacar más provecho.
Desde ya, gracias celestial, cofran y a todos los que puedan aportar.

Ojalá me entiendan el punto, ya que publiqué todo esto para no hacerlos trabajar demás amigos.
Gracias nuevamente, un saludo! :)

Active Member

Posts

Joined
Sat Oct 02, 2010 7:40 am

Post by cofran » Sat Sep 10, 2011 6:45 pm

celestial, cumple con todo ello, es solo una modificación para pre-ventas que es igual a una venta normal nada más que se altera un poquito el código para que el estado de ese producto este en PRE-VENTA.... (bueno ahora también dice "en stock") pero ya los dejo trabajar a ustedes. Saludos!

User avatar
Active Member

Posts

Joined
Thu Oct 01, 2009 7:37 am
Location - Córdoba, Argentina

Post by jmariani » Sat Sep 10, 2011 10:32 pm

lo que siempre salen en out es por que en lalinea de codigo :

if ($product_info['preventa'] === TRUE && $product_info['quantity'] >= 1) {
$this->data['stock'] = 'Pre-Venta';
} else {
$this->data['stock'] = $product_info['stock_status'];

}

esa parte apunta a stock_status si el preventa es 0 osea que todos los productos que no tengamso en preventa se van a poner fuera de status... lo que habria que hacer para corregirlo es poner en ese else lo de config de arriba o varios elseif pero eso no me funsiona, caragoooo ??? tengo un enredo con la sintaxis.. bueno pero hay esta ..:) es por eso que siempre muestra el stado de agotado.. y lo del Si en admin me imagino que es por el envio de headers..

User avatar
Active Member

Posts

Joined
Mon Sep 05, 2011 11:36 pm

Post by jmariani » Sat Sep 10, 2011 11:43 pm

YA LO HICE ASI COMO DICES!!!! =D! jeje una pregunta antes de publicalo si la cantidad es 0 ? todavia sale el boton preventa? o no? solo para saber...

User avatar
Active Member

Posts

Joined
Mon Sep 05, 2011 11:36 pm

Post by spirit » Sun Sep 11, 2011 12:01 am

jmariani wrote:YA LO HICE ASI COMO DICES!!!! =D! jeje una pregunta antes de publicalo si la cantidad es 0 ? todavia sale el boton preventa? o no? solo para saber...
Hola; seguiste todos los pasos de cofran y no te dió ningún error? avísame porque a mí si me dió error en una zona,
saludos! :)

Active Member

Posts

Joined
Sat Oct 02, 2010 7:40 am

Post by jmariani » Sun Sep 11, 2011 12:05 am

---------ya lo puse todo mas abajo.
Last edited by jmariani on Sun Sep 11, 2011 1:07 am, edited 1 time in total.

User avatar
Active Member

Posts

Joined
Mon Sep 05, 2011 11:36 pm

Post by spirit » Sun Sep 11, 2011 12:16 am

Pero jmariani, los cambios que le hiciste al código de cofran, etc, ¿ya los probaste?
De verdad ya se formó un enredo tremendo aquí. Si ya lo probaste, ¿podrías mostrarme una foto de cómo se ve en el front?

Y lo otro: fíjate en la 2da idea que propuse unos posts más arriba. Con el sistema de cofran, ¿se podría lograr lo que muestra la 2da imagen? Es decir: número de unidades disponibles + indicación de [PRE-VENTA] en el front?

Saludos! :)

Active Member

Posts

Joined
Sat Oct 02, 2010 7:40 am

Post by jmariani » Sun Sep 11, 2011 1:06 am

ASI QUEDA:
Image
precisamente es como tu lo pusistes .. y corregi el de cofran para que no te de error...
voy a tener que publicar lso pasos de cofran con mis modificaciones para hacerlo mas entendible..:) creo que cofran, y mis modificaciones, y el aporte de ideas y datos de cada uno, hemos hecho una extencion.. jeje
confia que si funciona men..:) !

voy a poner otra ves los pasos.. jeje cofran nos dio la base, nosotros vamso poniendo los bloques, otros el cemento.. etc.. jeje lo bonito de un open es eso.! =)

Pasos: lo que este en rojo son mis modificaciones...

[quote="cofran"] Anda a la base de datos (phpmyadmin por lo general) y agrega un campo nuevo a la tabla "PRODUCT" llamado por ejemplo "preventa" que sea un buleano para luego hacerlo TRUE o FALSE (activo o inactivo) la sentencia del SQL puede ser esta:
[/quote="cofran"]

Code: Select all

ALTER TABLE  `product` ADD  `preventa` BOOLEAN NOT NULL DEFAULT  '0' AFTER  `stock_status_id`
Luego vas al archivo ubicado en: admin/controller/catalog/product.php y buscas la linea 877 aproximadamente que dice:

Code: Select all

		if (isset($this->request->post['stock_status_id'])) {
      		$this->data['stock_status_id'] = $this->request->post['stock_status_id'];
    	} else if (isset($product_info)) {
      		$this->data['stock_status_id'] = $product_info['stock_status_id'];
    	} else {
			$this->data['stock_status_id'] = $this->config->get('config_stock_status_id');
		}
y debajo de eso agregas:

Code: Select all

		if (isset($this->request->post['preventa'])) {
      		$this->data['preventa'] = $this->request->post['preventa'];
    	} elseif (isset($product_info)) {
      		$this->data['preventa'] = $product_info['preventa'];
    	} else {
			$this->data['preventa'] = 0;
		}
ahora vas al archivo admin/model/catalog/product.php y buscas donde dice:

Code: Select all

	public function addProduct($data) {
		$this->db->query("INSERT INTO " . DB_PREFIX . "product SET model = '" . $this->db->escape($data['model']) . "', db->escape($data['sku']) . "', 
el código a insertar sería:

Code: Select all

    preventa = '" . (int)$data['preventa'] . "',  
te tendría que quedar así:

Code: Select all

	public function editProduct($product_id, $data) {
		$this->db->query("UPDATE " . DB_PREFIX . "product SET model = '" . $this->db->escape($data['model']) . "', sku = '" . $this->db->escape($data['sku']) . "', preventa = '" . (int)$data['preventa'] . "', upc = '".........................
también busca (en este mismo archivo) donde dice:

Code: Select all

	public function editProduct($product_id, $data) {
		$this->db->query("UPDATE " . DB_PREFIX . "product SET model = '" . $this->db->escape($data['model']) . "', sku = '" . $this->db->escape($data['sku']) . "', balblablabla...
y hace lo mismo, agrega lo de la preventa exactamente igual como hiciste en el de arriba.
es decir, pega esto:

Code: Select all

 preventa = '" . (int)$data['preventa'] . "',
asi msimo con el espacio y todo donde termina la coma.

Ahora vamos al archivo admin/view/template/catalog/product_form.tpl y busca la linea 101 aproximadamente que dice:

Code: Select all

            <tr>
              <td><?php echo $entry_stock_status; ?></td>
              <td><select name="stock_status_id">
                  <?php foreach ($stock_statuses as $stock_status) { ?>
                  <?php if ($stock_status['stock_status_id'] == $stock_status_id) { ?>
                  <option value="<?php echo $stock_status['stock_status_id']; ?>" selected="selected"><?php echo $stock_status['name']; ?></option>
                  <?php } else { ?>
                  <option value="<?php echo $stock_status['stock_status_id']; ?>"><?php echo $stock_status['name']; ?></option>
                  <?php } ?>
                  <?php } ?>
                </select></td>
            </tr>
y debajo de esta agrega el siguiente código:

Code: Select all

            <tr>
              <td>Pre-Venta</td>
              <td><select name="preventa">
                  <?php if ($preventa) { ?>
                  <option value="1" selected="selected"><?php echo $text_yes; ?></option>
                  <option value="0"><?php echo $text_no; ?></option>
                  <?php } else { ?>
                  <option value="1"><?php echo $text_yes; ?></option>
                  <option value="0" selected="selected"><?php echo $text_no; ?></option>
                  <?php } ?>
                </select></td>
            </tr>
////////Bueno ahí ya terminamos con el admin, ahora hay que ir al FRONT del sitio a seguir modificando...///

1ro)Lo sencillo Definimos el mensaje que queremos que se vea... nos vamos a catalog/lenguage/ TU IDIOMA/product/product.php

Code: Select all

$_['text_preventa']     = '[En Pre-venta]';
pegamos esto debajo de cualquier linea..(ponla en algun lugar ordenadamente osea que tenga referencia.. )

2do) Anda al archivo catalog/controller/product/product.php y busca la linea 185 aproximadamente que dice:
paga, esto es mi modificacion para que salga en ves del estado como tal, un letrero, como tu dices spirit, lo cual es lo ideal.

Code: Select all

if ($product_info['quantity'] <= 0) {
				$this->data['stock'] = $product_info['stock_status'];
			} elseif ($this->config->get('config_stock_display')) {
				$this->data['stock'] = $product_info['quantity'];
			} else {
				$this->data['stock'] = $this->language->get('text_instock');
			}
y debajo de esto agrega lo siguiente:

Code: Select all

		if ($product_info['preventa'] == 1 && $product_info['quantity'] >= 1) {
            $this->data['preventa'] = $this->language->get('text_preventa');
         }else {
            $this->data['preventa'] = '';
         }
Nota: si no funciona, proba modificando $product_info['preventa'] === TRUE por $product_info['preventa'] == 1 sin eliminar el resto de código!!!!

3ro) Anda al archivo catalog/model/catalog/product.php y busca la linea 27 que dice:

Code: Select all

'stock_status'     => $query->row['stock_status'],
y debajo de esta agrega:

Code: Select all

'preventa'     => $query->row['preventa'],


Finalmente: Ve a view/theme/tu_tema/template/product/product.tpl
y hay mismo hay una etiqueta div con una class="description" esas son las capitas... agrega una nueva debajo de la ultima.. pega este codigo..

Code: Select all

<br /> 
		<span><b><font color="#FF0000"><?php echo $preventa; ?></font></b><span>


te tiene que quedar asi:

Code: Select all

<div class="description">
        <?php if ($manufacturer) { ?>
        <span><?php echo $text_manufacturer; ?></span> <a href="<?php echo $manufacturers; ?>"><?php echo $manufacturer; ?></a><br />
        <?php } ?>
        <span><?php echo $text_model; ?></span> <?php echo $model; ?><br />
        <span><?php echo $text_reward; ?></span> <?php echo $reward; ?><br />
        <span><?php echo $text_stock; ?></span> <?php echo $stock; ?>[b]<br /> 
		<span><b><font color="#FF0000"><?php echo $preventa; ?></font></b><span>[/b]</div>
      <?php if ($price) { ?>


NOTA: Puedes pegar eso en la parte que quieras que se vea el aviso incluso en el titulo! =) !

Listo!!! uff me costo..! jeje.. e añadido las lenguas para irlo convirtiendo en una extencion.. y bueno agregarle el campo fecha y eso pero eso lo hago el martes o algo, si nadie mas lo a echo para q empiese la preventa esa fecha.! =D!

1ro.Creacion de colunna en tabla product
2do:Modificaciones:

-Modificacion de archivos modificados parte admin:
--admin/view/template/product_form.tpl
--admin/controller/catalog/product.php
--admin/model/catalog/product.php

-Modificacion archivos parte usuario:
--catalog/controller/product/product.php
--catalog/model/catalog/product.php
--catalog/lenguaje/spanish/product/product.php
-- catalog/view/theme/default/template/product/product.tpl
Last edited by jmariani on Sun Sep 11, 2011 4:09 am, edited 2 times in total.

User avatar
Active Member

Posts

Joined
Mon Sep 05, 2011 11:36 pm
Who is online

Users browsing this forum: Baidu [Spider] and 2 guests