Jump to content

[SOLUCIONADO]Como almacenar un procedimiento almacenado para que se ejecute por medio de un modulo en Prestashop 1.6?


ctapia

Recommended Posts

Buenas

Estoy usando Prestashop 1.6.1.23, con cPanel y quisiera hacer lo siguiente:

Mi idea: Hacer un módulo (mymodule.php), que lea los archivos .csv para modificar el estado de los pedidos.

Aún no lo tengo muy claro como hacerlo, pero sí que se usa principalmente en PHP, MYSQL, html, queria saber que pasos seguir, ya se puede modificar el estado de un pedido la base de datos directamente en Codigo MYSQL, pero quisiera que este código ej. se ejecuta automáticamente.

(La solución junto con el módulo para que lo descargues esta al final del post)

Actualizar v1.PNG

Edited by ctapia (see edit history)
Link to comment
Share on other sites

5 hours ago, ctapia said:

Aun no lo tengo muy claro como hacerlo, pero se que se usa principalmente PHP, MYSQL, html,

Suerte amigo. Lo que necesitas no es algo q se pueda explicar en unas pocas linias, una cosa es hacer una update simple en la base d datos y otra es programar un modulo sin saber código.

PD: para q utilziar id y reference?

UPDATE ps_orders SET current_state = 2 WHERE id_order = xxxxxx

 

Edited by burrots (see edit history)
  • Like 1
Link to comment
Share on other sites

Si quieres que se ejecute una orden cada X tiempo (ordenes cron o tareas programadas), necesitas desarrollo en PHP y añadir el codigo en un fichero PHP , por ejemplo la orden que te ha dado burrots, obviamente faltan muchas lineas de codigo.

Luego debes añadir la url de ese php a una orden cron y programarla para que lo haga cada X tiempo.

Ademas si siempre sera el mismo pedido ok, pero si el pedido es diferente deberas añadir mas codigo al desarrollo para poder cambiar de alguna manera el id_order.

El Prestashop tiene opciones y codigo interno que puedes llamar para no cambiar directamente en la base de datos la información, de esa manera si existe algun modulo o hook relacionado a ese cambio en el pedido o en su estado se ejecutara, por ej: enviar un email al cambiar el estado a enviado.

 

 

Link to comment
Share on other sites

@ctapia, como ha dicho @gusman126, debes usar las funciones nativas de PrestaShop para cambiar informaciones en la BD. Tendrás problemas si cambias directamente por MySQL. Por ejemplo, con el comando que has hecho, los emails no serán enviados, los pedidos no serán validados (fallarán las estadísticas), no tendrás el historial de estados de pedidos, y otras cosas más.

Si quieres, llámame por PM y te hago um presupuesto para un módulo.

Edited by Rodrigo B Laurindo (see edit history)
  • Like 1
Link to comment
Share on other sites

@burrotsEl id lo usaria para encontrar el pedido que quiero modificar su estado, y con la referencia mas seria mas seguro de que no falle el UPDATE.

@gusman126No entiendo muy bien como hacer esas tareas programadas, pero parece ser una solucion, no sera el mismo pedido cada vez, sino sera el mismo archivo pero con diferentes datos que seran usados como parametros para que se actualicen en la base de datos con ese script, tendras algun link sobre esto?.

@Rodrigo B LaurindoEn seguida te hablo, pero quisiera hacer el codigo para aprender tambien, cuales serian esas funciones nativas?

Gracias por su ayuda.

 

Link to comment
Share on other sites

hace 34 minutos, burrots dijo:

osti muy completa. creo q es la primera vez en un mismo lugar todos los metodos disponibles. estan los d PS 1.7?

genial

A mi me va de PM , la suelo consultar cada dia, ademas del fichero que tengo llamado "codigo muy usado", supongo que todos tenemos uno de estos.

Pues los nuevos de PS 1.7 no, 

Deberia añadirlos en una pagina independiente, a ver si me decido un dia y los busco y añado.

 

Gracias

Edited by gusman126 (see edit history)
Link to comment
Share on other sites

@gusman126Gracias por el aporte man, por si acaso no sabes que otros archivos debo tocar para hacer el modulo?, porque hasta donde tengo el modulo, se ve la parte de html,pero cuando hago click sobre el boton me dirige a una pagina en php que le asigne pero no se ejecuta el script que escribi, no se si sea la conexion con la base de datos o es que debo darle algun persmiso para que se ejecute el codigo en php.

Link to comment
Share on other sites

1 hour ago, gusman126 said:

A mi me va de PM , la suelo consultar cada dia, ademas del fichero que tengo llamado "codigo muy usado", supongo que todos tenemos uno de estos.

Pues yo no. Cada vez q necesito algo miro directamente los archivos. soy asi d básico y rudimentario. 🤣

Edited by burrots (see edit history)
  • Like 1
  • Thanks 1
Link to comment
Share on other sites

@burrotsEste es todo el codigo que tengo hasta el momento, le agradezco su ayuda.

Lo que hice hasta el momento, agregue una pagina mas en el /Controllers/front es el archivo "MyUpdateController.php", enlazandolo con el archivo "my_update.tpl" que fue creado en /themes/default-bootstrap/.

Los otros 2 archivos los uso para ejecutarlos en el cPanel de Mysql.

De nuevo gracias por la ayuda. 

Aviseme si estoy omitiendo algo, o cometiendo algun error.

Hastael momento no hace efecto la ejecucion del codigo .php para hacer UPDATE a la BD

Formato del update en mysql para actualizar el estado(Funciona directamente en la base de datos)

my_update.tpl

MyUpdateController.php

select para ver los pedidos con su estado

Edited by ctapia (see edit history)
Link to comment
Share on other sites

olvida ultimo post. tu planteamiento incial no era correcto.

te preparado modulo:

pporderstateassign.rar

lo instalas

creas un csv, dos columnas

1 - id_order

2 - id_order_state (decias la 2, pr bueno por si kieres ponerle otros estados)

cargas csv en el modulo desdel backoffice

y magia.....

ya me peudes llenar d corazoncitos todas las respuestas mias q veas en este y otros posts 🤣🤣🤣🤣

PD: no lo he probado, no tengo PS 1.6 ahora instalado y me da pereza ponerlo, cualquier cosa me avisas

  • Like 2
Link to comment
Share on other sites

4 minutes ago, Rodrigo B Laurindo said:

:lol::lol::lol: Por 150 corazoncitos te hago uno con cronjob y update por clases! :lol::lol::lol::lol:

haber si es verdad y me lo da, le he hecho modulillo altrusitamente. Seguro q le dado una alegria, es justo lo q pedia en el primer post.  😋

Edited by burrots (see edit history)
  • Like 1
Link to comment
Share on other sites

3 minutes ago, Rodrigo B Laurindo said:

 

:lol: si si, pues te he puesto 3 corazoncitos y un thanks, que has hecho una buena acción :lol:

te los he devuelto. hombre llevo ya unas cuantas, q hay mucho "feliz ignorante"... 😋

PD: nos banearan por trafico de corazones?? 🤣🤣🤣

Edited by burrots (see edit history)
  • Like 1
  • Haha 1
Link to comment
Share on other sites

@burrotsHe seguido tal como dices que lo haga pero me sale el siguiente msj que adjunto "separator csv required.png"

Luego, intente hacerlo de la siguiente manera:

1. Asigne un caracter separador (la coma)en la 1er casilla "Select Caracter Separator": ","(sin comillas).

2. Al parecer lo guardo, aunque no mostro ningun mensaje seguí seleccionando el archivo .csv (es el que adjunto "prueba.csv") y me salio el mismo error.

Asi que fui a verificar las extensiones del archivo, y al parecer todo va bien, se los adjunto en "archivo excel descripcion.png"

Luego intente abrir en .txt y el excel .csv para ver si habia diferencia, entonces salio eso, tambien lo adjunto en "vistas excel csv y txt(mismo archivo).png"

Cambie las ";" por "," guardando y volviendo a intentar el proceso para subirlo, y aun nada, el mismo error.

Te agradezco mucho la ayuda y los consejos, quisiera saber si hay algo que estoy haciendo mal.

De nuevo gracias por la ayuda @burrots

prueba.csv

separator csv required.PNG

archivo excel descripcion.png

vistas excel csv y txt(mismo archivo).PNG

Link to comment
Share on other sites

    private function _postProcess()
    {
        if (Tools::isSubmit('submitConfiguration'))
        {
            Configuration::updateValue('PP_AA_SEPARATOR', Tools::getValue('PP_AA_SEPARATOR'));
        }
        elseif (Tools::isSubmit('submitOrders'))
        {               
            if ($file_attachment = Tools::fileAttachment()) {
                $handle = fopen($file_attachment['tmp_name'], "r");
                while (($data = fgetcsv($handle, 1000, Configuration::get('PP_AA_SEPARATOR'))) !== false) {
                	$data = array_map("utf8_encode", $data);
                	$order = new Order((int)$data[0]);
                    if (Validate::isLoadedObject($order)) {
                        if (! $order->setCurrentState((int)$data[1])) {
                            $this->_errors[] = $this->l('Not exist product id: ' . $data[0]);
                        }
                    }
                }
            }
        }

        if ($this->_errors)
            foreach ($this->_errors as $error)
                $this->_html .= $this->displayError($this->l($error));
        else {
            Tools::redirectAdmin('index.php?tab=AdminModules&configure='.$this->name.'&conf=6&token='.Tools::getAdminTokenLite('AdminModules'));
        }
    }

 

  • Like 1
Link to comment
Share on other sites

1 hour ago, Rodrigo B Laurindo said:

No, porque no es un producto, es un pedido. Está buscando por productos.

jajaja. vaya tela. las prisas. en todo momento hablamos de orders y le meto esto y me kedo tan ancho

$product = new Product((int)$data[0]);

😵😵😵😵😵😵😵😵

Edited by burrots (see edit history)
  • Like 1
  • Haha 1
Link to comment
Share on other sites

private function _postProcess()
    {
        if (Tools::isSubmit('submitConfiguration'))
        {
            Configuration::updateValue('PP_AA_SEPARATOR', Tools::getValue('PP_AA_SEPARATOR'));
        }
        elseif (Tools::isSubmit('submitOrders'))
        {               
            if ($file_attachment = Tools::fileAttachment()) {
                $handle = fopen($file_attachment['tmp_name'], "r");
                while (($data = fgetcsv($handle, 1000, Configuration::get('PP_AA_SEPARATOR'))) !== false) {
                	$data = array_map("utf8_encode", $data);
                	$order = new Order((int)$data[0]);
                    if (Validate::isLoadedObject($order)) {
                        if (!$order->setCurrentState((int)$data[1])) {
                            $this->_errors[] = $this->l('Unable to update Orders State in id_order: ' . $data[0]);
                        }
                    } else {
						 $this->_errors[] = $this->l('Not exists id_order: ' . $data[0]);
                }
            }
        }

        if ($this->_errors)
            foreach ($this->_errors as $error)
                $this->_html .= $this->displayError($this->l($error));
        else {
            Tools::redirectAdmin('index.php?tab=AdminModules&configure='.$this->name.'&conf=6&token='.Tools::getAdminTokenLite('AdminModules'));
        }
    }

Asi ahora especifica mas si hay error

Edited by burrots (see edit history)
  • Like 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...