Hulp nodig Magazijn systeempje
Ik ben bezig met een klein magazijn systeempje maar loop tegen het volgende probleem aan. Ik heb voor elkaar gekregen dat er eerst naar alle artikelnr's wordt gezocht in de order en dan vervolgens met die artikelnr's de plaats, en aantal op de te zoeken in het magazijn. Ook heb ik voor elkaar gekregen om het benodigde aantal op het scherm te krijgen.
Code (php)
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
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
<?php
$query = "select * from `orderregel` WHERE `ordernr`='".$ordernr."'";
$row = mysql_fetch_array( $query );
echo "<table border=1 width=680 bgcolor=#FFFFFF>
<tr>
<th width= 100>artikelnummer</th>
<th width= 100>productnaam</th>
<th width= 40>Plaats</th>
<th width= 40>aantal in magazijn</th>
<th width= 40>aantal nodig</th>
</tr>
</table>";
foreach ( self::find_by_sql($query) as $user)
{
$query2 = "select * from magazijn WHERE artikelnr = ".$user->artikelnr."";
$row = mysql_fetch_array( $query );
foreach ( self::find_by_sql($query2) as $magazijn)
{
echo "<table class= order_overzicht border= 0 width= 680>";
echo "<tr>
<td width= 100>".$magazijn->artikelnr."</td>
<td width= 100>".$magazijn->productnaam."</td>
<td width= 40>".$magazijn->magazijn_plaats."</td>
<td width= 40>".$magazijn->aantal."</td>
<td width= 40>".$user->aantal."</td>
</tr>
</table>";
}
}
?>
$query = "select * from `orderregel` WHERE `ordernr`='".$ordernr."'";
$row = mysql_fetch_array( $query );
echo "<table border=1 width=680 bgcolor=#FFFFFF>
<tr>
<th width= 100>artikelnummer</th>
<th width= 100>productnaam</th>
<th width= 40>Plaats</th>
<th width= 40>aantal in magazijn</th>
<th width= 40>aantal nodig</th>
</tr>
</table>";
foreach ( self::find_by_sql($query) as $user)
{
$query2 = "select * from magazijn WHERE artikelnr = ".$user->artikelnr."";
$row = mysql_fetch_array( $query );
foreach ( self::find_by_sql($query2) as $magazijn)
{
echo "<table class= order_overzicht border= 0 width= 680>";
echo "<tr>
<td width= 100>".$magazijn->artikelnr."</td>
<td width= 100>".$magazijn->productnaam."</td>
<td width= 40>".$magazijn->magazijn_plaats."</td>
<td width= 40>".$magazijn->aantal."</td>
<td width= 40>".$user->aantal."</td>
</tr>
</table>";
}
}
?>
dit is het resultaat wat ik krijg.
Maar nu naar het probleem. Het is uiteindelijk de bedoeling dat als het benodigde aantal van bijv Haribo kers cola (zie afbeelding imageshack) meer is dan in het magazijn op die plaats staat, dat hij automatisch overgaat op de volgende plaats met dat artikelnr.
Maar ik heb geen flauw idee hoe ik dit zou moeten doen. Als iemand een idee heeft help me alsjeblieft.
Dit is het voorbeeld hoe ik het uiteindelijke wil laten werken
alvast bedankt
Gewijzigd op 24/03/2012 15:35:24 door Henk de Vries
Sneak preview:
Code (php)
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
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
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `itemsFromStorage`(IN orderid INT)
MODIFIES SQL DATA
BEGIN
DECLARE articleid, storageamount, orderamount, fromstorage, locationid INT;
DECLARE articlename CHAR(100);
DECLARE EOF BOOLEAN DEFAULT FALSE;
DECLARE pointer1 CURSOR FOR SELECT oi.article_id, oi.amount, a.article_name FROM order_items AS oi JOIN articles AS a USING (article_id) WHERE oi.order_id = orderid;
DECLARE pointer2 CURSOR FOR SELECT location_id, location_amount FROM storage WHERE article_id = articleid;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET EOF = TRUE;
DROP TABLE IF EXISTS ord_art_from_storage;
CREATE TEMPORARY TABLE ord_art_from_storage (
article_id INT,
article_name CHAR(100),
location_id INT,
Location_amount INT,
order_amount INT) ENGINE=INNODB;
OPEN pointer1;
article_loop: LOOP
FETCH pointer1 INTO articleid, orderamount, articlename;
IF EOF THEN
CLOSE pointer1;
LEAVE article_loop;
END IF;
OPEN pointer2;
storage_loop: LOOP
FETCH pointer2 INTO locationid, storageamount;
IF EOF THEN
CLOSE pointer2;
SET EOF := FALSE;
LEAVE storage_loop;
END IF;
IF (orderamount <= storageamount) THEN
INSERT INTO ord_art_from_storage (article_id, article_name, location_id, location_amount, order_amount)
VALUES (articleid, articlename, locationid, storageamount,orderamount);
CLOSE pointer2;
LEAVE storage_loop;
ELSE
INSERT INTO ord_art_from_storage (article_id, article_name, location_id, location_amount, order_amount)
VALUES (articleid, articlename, locationid, storageamount,storageamount);
SET orderamount := orderamount - storageamount;
END IF;
END LOOP;
END LOOP;
END$$
DELIMITER ;
CREATE DEFINER=`root`@`localhost` PROCEDURE `itemsFromStorage`(IN orderid INT)
MODIFIES SQL DATA
BEGIN
DECLARE articleid, storageamount, orderamount, fromstorage, locationid INT;
DECLARE articlename CHAR(100);
DECLARE EOF BOOLEAN DEFAULT FALSE;
DECLARE pointer1 CURSOR FOR SELECT oi.article_id, oi.amount, a.article_name FROM order_items AS oi JOIN articles AS a USING (article_id) WHERE oi.order_id = orderid;
DECLARE pointer2 CURSOR FOR SELECT location_id, location_amount FROM storage WHERE article_id = articleid;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET EOF = TRUE;
DROP TABLE IF EXISTS ord_art_from_storage;
CREATE TEMPORARY TABLE ord_art_from_storage (
article_id INT,
article_name CHAR(100),
location_id INT,
Location_amount INT,
order_amount INT) ENGINE=INNODB;
OPEN pointer1;
article_loop: LOOP
FETCH pointer1 INTO articleid, orderamount, articlename;
IF EOF THEN
CLOSE pointer1;
LEAVE article_loop;
END IF;
OPEN pointer2;
storage_loop: LOOP
FETCH pointer2 INTO locationid, storageamount;
IF EOF THEN
CLOSE pointer2;
SET EOF := FALSE;
LEAVE storage_loop;
END IF;
IF (orderamount <= storageamount) THEN
INSERT INTO ord_art_from_storage (article_id, article_name, location_id, location_amount, order_amount)
VALUES (articleid, articlename, locationid, storageamount,orderamount);
CLOSE pointer2;
LEAVE storage_loop;
ELSE
INSERT INTO ord_art_from_storage (article_id, article_name, location_id, location_amount, order_amount)
VALUES (articleid, articlename, locationid, storageamount,storageamount);
SET orderamount := orderamount - storageamount;
END IF;
END LOOP;
END LOOP;
END$$
DELIMITER ;
CALL itemsFromStorage(1234);
SELECT * FROM ord_art_from_storage;