PHP - Actualizar stock de bodega.

 
Vista:
sin imagen de perfil

Actualizar stock de bodega.

Publicado por Catalina (1 intervención) el 06/03/2020 18:03:02
Hola. Tengo un proyecto de bodega en el cual se deben registrar la salida y entrada de productos(estos con fecha, nombre, etc). En cada orden se puede sacar distintos productos con su cantidad. Las tablas que utilizadas para la salida y el ingreso de productos son:
productos: Donde se guardan los datos del producto
inventorio_orden:Donde se guardan los datos de la orden
inventorio_orden_producto:Donde se guardan los datos de los productos sacados en la orden.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
if(isset($_POST['btn_action']))
{
  if($_POST['btn_action'] == 'Agregar')
  {
    $query = "
    INSERT INTO inventorio_orden (usuario_id, inventorio_orden_fecha, inventorio_orden_destino, inventorio_orden_nombre,
      inventorio_orden_status, inventorio_orden_fecha_creada)
    VALUES (:usuario_id, :inventorio_orden_fecha, :inventorio_orden_destino, :inventorio_orden_nombre,
     :inventorio_orden_status, :inventorio_orden_fecha_creada
      )
    ";
    $statement = $connect->prepare($query);
    $statement->execute(
      array(
        ':usuario_id'                     =>  $_SESSION["usuario_id"],
        ':inventorio_orden_fecha'         =>  $_POST['inventorio_orden_fecha'],
        ':inventorio_orden_destino'       =>  $_POST['inventorio_orden_destino'],
        ':inventorio_orden_nombre'        =>  $_POST['inventorio_orden_nombre'],
        ':inventorio_orden_status'        =>  'active',
        ':inventorio_orden_fecha_creada'  =>  date("Y-m-d"),
      )
 
    );
 
    $statement = $connect->query("SELECT LAST_INSERT_ID()");
    $inventorio_orden_id = $statement->fetchColumn();
 
    if(isset($inventorio_orden_id))
    {
 
       for($count = 0; $count<count($_POST["producto_id"]); $count++)
       {
        $product_details = fetch_product_details($_POST["producto_id"][$count], $connect);
        $sub_query = "
        INSERT INTO inventorio_orden_producto (inventorio_orden_id, producto_id,cantidad) VALUES (:inventorio_orden_id, :producto_id, :cantidad)
        ";
        $statement = $connect->prepare($sub_query);
        $statement->execute(
          array(
            ':inventorio_orden_id'=>  $inventorio_orden_id,
            ':producto_id'        =>  $_POST["producto_id"][$count],
            ':cantidad'           =>  $_POST["cantidad"][$count]
              )
          );
 
          $query1 = "
          SELECT  inventorio_orden_producto.cantidad FROM inventorio_orden_producto
          INNER JOIN inventorio_orden ON inventorio_orden.inventorio_orden_id = inventorio_orden_producto.inventorio_orden_id
          WHERE inventorio_orden_producto.producto_id = '".$producto_id."'";
          $statement = $connect->prepare($query);
          $statement->execute();
          $result = $statement->fetchAll();
          $total = 0;
 
          foreach($result as $row)
              {
                $total = $total + $row['cantidad'];
              }
              $available_quantity = intval($producto_data['cantidad']) - intval($total);
              if(isset($available_quantity))
              {
                $update_query = "
                UPDATE productos SET
                producto_cantidad = '".$available_quantity."' WHERE 'producto_id' = '".$producto_id."'
                ";
                $statement = $connect->prepare($update_query);
                $statement->execute(
                  array(
                    ':producto_id'       => $producto_id,
                    ':producto_cantidad' => $available_quantity
                  )
                  );
  }
        if(isset($result))
      {
 
             echo 'Orden Creada';
      }
 
      }
    }
  }

En el código funciona el insert para las tablas de inventario pero no afecta el stock del producto.

El SQL es

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
CREATE TABLE `inventorio_orden` (
  `inventorio_orden_id` int(11) NOT NULL,
  `usuario_id` int(11) NOT NULL,
  `inventorio_orden_fecha` date NOT NULL,
  `inventorio_orden_destino` varchar(255) COLLATE ucs2_spanish_ci NOT NULL,
  `inventorio_orden_nombre` varchar(255) COLLATE ucs2_spanish_ci NOT NULL,
  `inventorio_orden_status` enum('active','inactive') COLLATE ucs2_spanish_ci NOT NULL,
  `inventorio_orden_fecha_creada` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=ucs2 COLLATE=ucs2_spanish_ci;
 
--
-- Volcado de datos para la tabla `inventorio_orden`
--
 
INSERT INTO `inventorio_orden` (`inventorio_orden_id`, `usuario_id`, `inventorio_orden_fecha`, `inventorio_orden_destino`, `inventorio_orden_nombre`, `inventorio_orden_status`, `inventorio_orden_fecha_creada`) VALUES
(3, 3, '2020-02-25', 'D', 'D', 'active', '2020-02-25'),
(4, 3, '2020-02-27', 'e', 'w', 'active', '2020-03-06'),
(5, 3, '2020-03-05', 'a', 'g', 'active', '2020-03-06'),
(6, 3, '2020-03-05', '1', 'd', 'active', '2020-03-06');
 
-- --------------------------------------------------------
 
--
-- Estructura de tabla para la tabla `inventorio_orden_producto`
--
 
CREATE TABLE `inventorio_orden_producto` (
  `inventorio_orden_producto_id` int(11) NOT NULL,
  `inventorio_orden_id` int(11) NOT NULL,
  `producto_id` int(11) NOT NULL,
  `cantidad` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=ucs2 COLLATE=ucs2_spanish_ci;
 
--
-- Volcado de datos para la tabla `inventorio_orden_producto`
--
 
INSERT INTO `inventorio_orden_producto` (`inventorio_orden_producto_id`, `inventorio_orden_id`, `producto_id`, `cantidad`) VALUES
(4, 3, 3, 3),
(5, 4, 3, 1),
(6, 5, 3, 9),
(7, 6, 3, 1);
 
 
CREATE TABLE `productos` (
  `producto_id` int(11) NOT NULL,
  `categoria_id` int(11) NOT NULL,
  `marca_id` int(11) NOT NULL,
  `producto_nombre` text COLLATE ucs2_spanish_ci NOT NULL,
  `producto_descripcion` text COLLATE ucs2_spanish_ci NOT NULL,
  `producto_cantidad` int(11) NOT NULL,
  `producto_unidad` varchar(125) COLLATE ucs2_spanish_ci NOT NULL,
  `producto_ingresado_por` int(11) NOT NULL,
  `producto_status` enum('active','inactive') COLLATE ucs2_spanish_ci NOT NULL,
  `producto_fecha` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=ucs2 COLLATE=ucs2_spanish_ci;
 
--
-- Volcado de datos para la tabla `productos`
--
 
INSERT INTO `productos` (`producto_id`, `categoria_id`, `marca_id`, `producto_nombre`, `producto_descripcion`, `producto_cantidad`, `producto_unidad`, `producto_ingresado_por`, `producto_status`, `producto_fecha`) VALUES
(1, 4, 4, 'Papel Fotocopia Carta', '.', 7, 'Resmas', 3, 'active', '2020-01-17'),
(2, 7, 8, 'Cookie', 'Galletas para capacitación', 6, 'Paquetes', 3, 'active', '2020-01-24'),
(3, 4, 9, 'Carpeta A4', 'CARPETA ACOCLIP CARTULINA CAFE PBSI', 155, 'Unidades', 8, 'active', '2020-01-24');
 
-- ------------------
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Actualizar stock de bodega.

Publicado por Julio (830 intervenciones) el 06/03/2020 18:16:33
Hola. ¿Cuál es el problema exactamente? No sé si es eso, pero en la línea 64 del primer código, producto_cantidad espera un INT y le estás pasando una cadena. No sé si SQL llega a interpretarlo bien igualmente, pero no me ha quedado claro si el problema lo tienes ahí.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar