Actualizar 2 tablas al mismo tiempo

105 views
Skip to first unread message

ajmv

unread,
Oct 23, 2014, 3:18:13 PM10/23/14
to kum...@googlegroups.com
Cordial saludo.

Amigos soy algo nuevo en KumbiaPHP y tengo el siguiente problemita.
tengo una pequeña BD con tres tablas 
1. Articulos
2. Ingreso de articulos
3. egresos de articulos
Necesito que cuando se realice el ingreso de un articulo se actualice el campo cantidad de la tabla articulos, lo mismo se debe hacer cuando realice un egreso.
se que en el controller de bo establecer la acción pero no sé como hacerlo.

Agradezco su colaboración

Oscar Cid

unread,
Oct 23, 2014, 3:20:57 PM10/23/14
to kum...@googlegroups.com
puedes hacerlo a nivel de modelo o con un trigger de base de datos.

--
Viva KumbiaPHP Framework!
http://www.kumbiaphp.com/
Ha recibido este mensaje porque está suscrito a Grupo "KumbiaPHP Framework" de Grupos de Google.
Para obtener más opciones, visita este grupo en http://groups.google.com/group/kumbia?hl=es.
---
Has recibido este mensaje porque estás suscrito al grupo "KumbiaPHP Framework" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a kumbia+un...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Carlos Solorzano

unread,
Oct 23, 2014, 3:22:20 PM10/23/14
to kum...@googlegroups.com

Para lo que deseas hacer una buena solución es Utilizar trigger. Busca en google. Como utilizarlos y ejemplos hay montón. Suerte

Carlos Luis Solórzano Solórzano

--

Carlos Solorzano

unread,
Oct 23, 2014, 3:24:29 PM10/23/14
to kum...@googlegroups.com

Al utilizar trigger y si están bien programados te olvidas de validar cuando ingresa. Actualizas o eliminas.

Carlos Luis Solórzano Solórzano

Nelson Rojas Nuñez

unread,
Oct 24, 2014, 8:13:53 AM10/24/14
to kum...@googlegroups.com
Estimado:

Si no quieres usar un trigger, otra opción es hacerlo usando una transacción dentro del modelo para las tablas egreso e ingreso.

Inicias transacción
Lees el campo cantidad
Lo actualizas dependiendo de ingreso (sumar) o egreso(sustraer)
Haces commit

Me parece que eso debería ser un poco más seguro tomando en cuenta el concepto ACID de las transacciones.

Yo tengo que hacer algo similar, aunque sólo a modo pedagógico. Lo otro, yo sólo estoy usando una tabla de movimiento de inventario, en la cual hay un campo factor que se llena con 1 ó -1 dependiendo de si es una alta o una baja.

Hoy pretendo terminar esa labor, así que puedo compartirte código de aquí al lunes.

Saludos cordiales desde Chile :-)


En ella puedes

Alvaro Meriño

unread,
Oct 24, 2014, 10:39:00 AM10/24/14
to kum...@googlegroups.com
Gracias.

Me gustaría ver el código lo esperaré. 

--
Viva KumbiaPHP Framework!
http://www.kumbiaphp.com/
Ha recibido este mensaje porque está suscrito a Grupo "KumbiaPHP Framework" de Grupos de Google.
Para obtener más opciones, visita este grupo en http://groups.google.com/group/kumbia?hl=es.
---
Has recibido este mensaje porque estás suscrito al grupo "KumbiaPHP Framework" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a kumbia+un...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
Alvaro Javier Meriño V.
Ingenieria de Sistemas (X Semestre)
Corporacion Universitaria Remington

Nelson Rojas Nuñez

unread,
Oct 27, 2014, 10:48:42 PM10/27/14
to kum...@googlegroups.com
Disculpe la demora estimado:

He aquí el código del modelo:

<?php
Load::model('movimiento_inventario');
class Articulo extends ActiveRecord {
function actualizar_inventario($id=null, $cantidad=0, $factor=0) {
$this->begin();
$done = false;
try {
$elem = $this->find_by_id((int)$id);
if ($elem != null) {
$elem->inventario_actual += $cantidad * $factor;
if ($elem->save()) {
$data = array(
'articulo_id'=>$id,
'usuario_id'=>Session::get('usuario_id'),
'factor'=>$factor,
'cantidad'=>$cantidad);
$movimiento = new MovimientoInventario($data);
if ($movimiento->create()) {
$this->commit();
$done = true;
}
}
}
if (!$done) {
$this->rollback();
}
} catch(Exception $ex) {
$this->rollback();
}
return $done;
}
}

?>

<?php
class MovimientoInventario extends ActiveRecord {
}
?>


Mis tablas tiene la siguiente estructura:

CREATE TABLE `movimiento_inventario` (
`id` int(11) NOT NULL,
  `articulo_id` int(11) NOT NULL,
  `usuario_id` int(11) NOT NULL,
  `factor` int(11) NOT NULL,
  `cantidad` decimal(10,2) NOT NULL,
  `fecha` timestamp NULL DEFAULT CURRENT_TIMESTAMP
); 

CREATE TABLE `articulo` (
`id` int(11) NOT NULL,
  `nombre` varchar(45) NOT NULL,
  `descripcion` varchar(200) DEFAULT NULL,
  `precio` decimal(10,2) NOT NULL,
  `inventario_actual` decimal(10,2) NOT NULL DEFAULT '0.00',
  `activo` int(11) DEFAULT '1'
);

Hice un par de pruebas en local y aparentemente se ve bien... de todos modos hay que probar :-)

Saludos!

El jueves, 23 de octubre de 2014 16:18:13 UTC-3, ajmv escribió:

Alvaro Meriño

unread,
Nov 4, 2014, 12:09:57 PM11/4/14
to kum...@googlegroups.com
amigo,

El campo factor a que se refiere?

--
Viva KumbiaPHP Framework!
http://www.kumbiaphp.com/
Ha recibido este mensaje porque está suscrito a Grupo "KumbiaPHP Framework" de Grupos de Google.
Para obtener más opciones, visita este grupo en http://groups.google.com/group/kumbia?hl=es.
---
Has recibido este mensaje porque estás suscrito al grupo "KumbiaPHP Framework" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a kumbia+un...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Nelson Rojas Nuñez

unread,
Nov 5, 2014, 7:47:16 AM11/5/14
to kum...@googlegroups.com
Hola estimado:
En el área de matemáticas, la multiplicación utiliza el concepto de factor para referirse a los elementos que conforman la operación.

El campo se llama factor porque se puede usar para multiplicar la cantidad. Por cuestiones de estrategia se utiliza el valor 1 (uno) para las cantidades que deben sumarse, y -1 (menos uno /uno negativo)

Recuerda el concepto DRY: Don't Repeat Yourself. La implementación de la estructura de la tabla es para ahorrarme el hecho de usar una tabla para las altas, y una tabla para las bajas (aumentos o disminuciones respectivamente).

Si hubieran dos tablas tendrías que sumar los datos de una y restarle la suma de los datos de la otra.

Yo sólo tendría que sumar (cantidad x factor) para obtener la misma operatoria descrita para dos tablas.

Espero que esta explicación te sea de utilidad :-)

Saludos desde Chile!
Reply all
Reply to author
Forward
0 new messages