Subversion-Projekte lars-tiefland.content-management

Revision

Revision 1 | Details | Vergleich mit vorheriger | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
1 lars 1
<?php
2 lars 2
    /**
1 lars 3
     * Lagerwirtschaft mit warenwirtschaftlichen Zügen.
4
     * Diese Datei enthält den gesamten PHP-Quelltext des Backendmoduls „Lagerwirtschaft mit warenwirtschaftlichen Zügen“.
5
     * Nach Abarbeitung des Quelltexts wird das jeweilige Smarty-Template aufgerufen und diesen benötigte Variabeln übergeben.
6
     *
7
     * @author Patrick Lautsch <lautsch@weban.de>
8
     * @copyright 2009 Webagentur Niewerth
9
     * @package Content-management
10
     * @version
11
     * @license propietary
12
     * @filesource
13
     */
2 lars 14
 
15
    /**
16
     * Deutsche Umgebung.
17
     */
1 lars 18
    setlocale( LC_ALL, "de_DE" );
2 lars 19
 
1 lars 20
    /**
21
     * Setzte "CET" als Zeitzone.
22
     */
23
    date_default_timezone_set( 'CET' );
2 lars 24
 
1 lars 25
    /**
26
     * Gibt die Backendmodulgruppe an, in welchem sich das Backendmodul befindet.
27
     */
28
    define( "modul_name", "Warenwirtschaft" );
2 lars 29
 
1 lars 30
    /**
31
     * Gibt den Modulnamen an.
32
     */
33
    define( "tool_name", "lagerwirtschaft" );
2 lars 34
 
1 lars 35
    /**
36
     * Gibt den Namen dieser Datei aus.
37
     */
2 lars 38
    define( "F_NAME", basename( $_SERVER["PHP_SELF"] ) );
39
 
1 lars 40
    /**
2 lars 41
     * Connect-Datei einbinden.
42
     */
43
    require_once "../Online-Shop/connect2.php";
44
 
1 lars 45
    /**
46
     * Zusätzliche Funktionen.
47
     */
2 lars 48
    require_once '../includes/system/functions.lagerwirtschaft.php';
49
 
1 lars 50
    /**
2 lars 51
     * Start der Session.
52
     */
1 lars 53
    session_start();
2 lars 54
 
1 lars 55
    /**
2 lars 56
     * Smarty Initialisierung.
57
     */
58
    require_once "Weban_Smarty.class.php";
1 lars 59
    $GLOBALS["ui"] = new Weban_Smarty();
60
    $GLOBALS["ui"]->conifg_dir = SMARTY_DIR;
61
    $GLOBALS["ui"]->template_dir = "templates/";
62
    $GLOBALS["ui"]->compile_dir = "templates_c";
63
    $GLOBALS["ui"]->compile_check = true;
64
    $GLOBALS["ui"]->assign( "eingabefelder", $eingabefelder );
65
    $GLOBALS["ui"]->assign( "webs", $webs );
2 lars 66
 
1 lars 67
    /**
68
     * Übergebe den GET-Parameter 'artikelId' an Smarty, falls dieser gesetzt ist.
69
     */
2 lars 70
    if ( !empty( $_GET['artikelId'] ) )
71
    {
72
        $GLOBALS["ui"]->assign( "artikelId", $_GET['artikelId'] );
73
    }
74
 
1 lars 75
    /**
76
     * Wenn <var>$_GET['buchungEingetragen']</var> gleich eins ist, dann trage die Buchung in die Datenbank ein
77
     */
78
    if ( $_GET['action'] == "buchungEingetragen" )
79
    {
80
        /**
81
         * Speichere die vom Eingangsbuchungsformular abgeschickten POST-Daten in Variabeln.
82
         */
2 lars 83
 
1 lars 84
        /**
85
         * Lieferant
86
         */
87
        $eingangsbuchungLieferantenNummer = $_POST['lieferant'];
2 lars 88
 
1 lars 89
        /**
90
         * Datum: Tag
91
         */
2 lars 92
        $eingangsbuchungDatum = $_POST['datum'];
1 lars 93
 
94
        /**
95
         * Erstelle aus den POST-Arrays <var>$_POST['menge']</var>, <var>$_POST['artikelID']</var> und <var>$_POST['warenwert']</var>
96
         * ein einziges LOOP-Array.
97
         */
2 lars 98
        for ( $i = 0; $i < sizeof( $_POST['menge'] ); $i++ )
1 lars 99
        {
2 lars 100
            /**
101
             * Wenn im Buchungsformular "Ausgangsbuchung(-)" gewählt wurde, wird vor die Menge ein Minus gehängt.
102
             */
103
            if ( $_POST['buchungsart'][$i] == 'ausgangsbuchung' )
104
            {
105
                $eingangsbuchungArtikel[$i]['menge'] = -$_POST['menge'][$i];
106
            }
107
            else
108
            {
109
                $eingangsbuchungArtikel[$i]['menge'] = $_POST['menge'][$i];
110
            }
1 lars 111
 
2 lars 112
            $eingangsbuchungArtikel[$i]['artikelID'] = $_POST['artikelID'][$i];
113
            $eingangsbuchungArtikel[$i]['warenwert'] = $_POST['warenwert'][$i];
1 lars 114
        }
2 lars 115
 
1 lars 116
        /**
117
         * QUERY: Trage die Buchung in die Datenbank ein.
118
         */
119
        $sql = "
120
            INSERT INTO
121
                buchungen
122
            (
123
                eintragsdatum
124
            )
125
            VALUES
126
            (
127
                NOW()
128
            )
129
        ;";
2 lars 130
 
1 lars 131
        /**
132
         * QUERY ausführen.
133
         */
2 lars 134
        $result = mysql_query( $sql ) or die( mysql_errno() . ': ' . mysql_error
135
            () . '<hr />' . $sql );
136
 
1 lars 137
        /**
138
         * Die ID der eingetragenen Buchung in der Tabelle "buchungen".
139
         */
140
        $eingangsbuchungBuchungenID = mysql_insert_id();
2 lars 141
 
1 lars 142
        /**
143
         * Trage die Artikel der Buchung in die Tabelle "lagerbewegungen" ein.
144
         */
2 lars 145
        for ( $i = 0; $i < sizeof( $eingangsbuchungArtikel ); $i++ )
1 lars 146
        {
2 lars 147
            /**
148
             * QUERY
149
             */
150
            $sql = "
1 lars 151
                INSERT INTO
152
                    lagerbewegungen
153
                (
154
                    artikel,
155
                    buchungen,
156
                    menge
157
                )
158
                VALUES
159
                (
2 lars 160
                    " . $eingangsbuchungArtikel[$i]['artikelID'] . ",
161
                    " . $eingangsbuchungBuchungenID . ",
162
                    " . $eingangsbuchungArtikel[$i]['menge'] . "
1 lars 163
                )
164
           ;";
2 lars 165
 
166
            /**
167
             * QUERY ausführen
168
             */
169
            $result = mysql_query( $sql ) or die( mysql_errno() . ': ' .
170
                mysql_error() . '<hr />' . $sql );
1 lars 171
        }
2 lars 172
        unset( $_GET['action'] );
173
?>
1 lars 174
        <script type="text/javascript">
175
        	location.href="javascript:history.go(-2);";
176
        </script>
177
        <?php
178
    }
2 lars 179
 
1 lars 180
    /**
181
     * Wenn die Übersichtsseite angezeigt werden soll (<var>$_GET['action']</var> nicht gesetzt oder <var>$_GET['action']</var> = "uebersicht"),
182
     * dann führe diesen Codeblock aus.
183
     */
2 lars 184
    if ( $_GET['action'] == "uebersicht" || empty( $_GET['action'] ) )
185
    {
1 lars 186
        /**
187
         * Setzte die Standardparameter für die Artikelsuche.
188
         */
2 lars 189
 
1 lars 190
        /**
191
         * Bestimmt den Artikelnamen nach dem gesucht werden soll.
192
         */
193
        $sucheArtikelname = "";
2 lars 194
 
1 lars 195
        /**
196
         * Bestimmt den Bestand nach dem gesucht werden soll.
197
         */
2 lars 198
        $sucheBestand = null;
199
 
1 lars 200
        /**
201
         * Bestimmt in Verbindung mit dem Bestandsoperator nach welchen Beständen gesucht wird.
202
         */
203
        $sucheBestand = 0;
2 lars 204
 
1 lars 205
        /**
206
         * Bestimmt den Bestandsoperator, welcher angibt ob der gesuchte Bestand größer, kleiner oder gleich dem angegebenen ist.
207
         * "0" entspricht "="
208
         * "1" entspricht ">"
209
         * "2" entspricht "<"
210
         * "3" bedeutet: keine Bestandssuche
211
         */
212
        $sucheBestandsoperator = 3;
2 lars 213
 
1 lars 214
        /**
215
         * Bestimmt ob die Suche Absteigend oder Aufsteigend die Suchergebnisse anzeigt.
216
         * "0" entspricht "Absteigend"
217
         * "1" entspricht "Aufsteigend"
218
         */
219
        $sucheSortierung = "DESC";
2 lars 220
 
1 lars 221
        /**
222
         * Bestimmt wie viele Artikel pro Seite angezeigt werden sollen.
223
         */
224
        $sucheArtikelProSeite = 50;
2 lars 225
 
1 lars 226
        /**
227
         * Bestimmt welche Artikelseite angezeit werden soll.
228
         */
229
        $sucheArtikelseite = 1;
2 lars 230
 
1 lars 231
        /**
232
         * Bestimmt welche Artikelseite angezeit werden soll.
233
         */
234
        $sucheArtikelanzahl['start'] = 0;
2 lars 235
 
1 lars 236
        /**
237
         * Wenn "Suche ausführen" geklickt wurde, ersetzte die Standardsuchparameter durch die, die der Benutzer eingegeben hat.
238
         */
2 lars 239
        if ( $_POST['sucheSubmit'] || $_POST['sucheWeiter'] || $_POST['sucheZurueck'] ||
240
            $_POST['sucheNeueSeite'] )
1 lars 241
        {
2 lars 242
            $sucheArtikelname = $_POST['sucheArtikelname'];
243
            $sucheBestand = $_POST['sucheBestand'];
244
            $sucheBestandsoperator = $_POST['sucheBestandsoperator'];
245
            $sucheMeldebestandGroesserBestand = $_POST['sucheMeldebestandGroesserBestand'];
246
            $sucheSortierung = ( $_POST['sucheSortierung'] ) ? "ASC" : "DESC";
247
 
1 lars 248
            /**
249
             * Sollte <var>$sucheBestand</var> keinen Wert haben, dann setzte diesen auf "0".
250
             */
2 lars 251
            if ( empty( $sucheBestand ) )
1 lars 252
            {
253
                $sucheBestand = 0;
254
            }
2 lars 255
 
1 lars 256
            /**
257
             * Sollte sich der Suchbegriff geändert haben, dann setzte die Artikelseite auf eins,
258
             * ansonsten setzte <var>$sucheArtikelseite</var> gleich eins, wenn <var>$sucheArtikelseite</var> gleich false ist,
259
             * ausßerdem addiere <var>$sucheArtikelseite</var> um den Wert von <var>$_POST['sucheWeiter']</var> und subtrahiere
260
             * <var>$sucheArtikelseite</var> um den Wert von <var>$_POST['sucheZurueck']</var>.
261
             */
262
            if ( $_POST['sucheAlterArtikelname'] != $sucheArtikelname )
263
            {
264
                $sucheArtikelseite = 1;
265
            }
266
            else
267
            {
2 lars 268
                $sucheArtikelseite = ( $_POST['sucheArtikelseite'] ) ? $_POST['sucheArtikelseite'] :
269
                    1;
1 lars 270
                $sucheArtikelseite += $_POST['sucheWeiter'];
271
                $sucheArtikelseite -= $_POST['sucheZurueck'];
272
            }
273
 
274
            /**
275
             * Bestimmt den Startpunkt der Datenbanksuche und somit auch welche Seite angezeigt wird.
276
             * Dazu wird die Anzahl der Artikel pro Seite (<var>$sucheArtikelProSeite</var>) durch die aktuelle Seitennummer
277
             * (<var>$sucheArtikelseite</var>) dividiert und der Wert des Quotionenten mit Anzahl der Artikel pro Seite subtrahiert.
278
             */
2 lars 279
            $sucheArtikelanzahl['start'] = ( $sucheArtikelProSeite * $sucheArtikelseite ) -
280
                $sucheArtikelProSeite;
1 lars 281
        }
2 lars 282
 
1 lars 283
        /**
284
         * Bestandsoperator bestimmen.
285
         */
286
        if ( $sucheBestandsoperator == 0 )
287
        {
288
            $sucheBestandsoperatorZeichen = "=";
2 lars 289
        } elseif ( $sucheBestandsoperator == 1 )
1 lars 290
        {
291
            $sucheBestandsoperatorZeichen = ">";
2 lars 292
        } elseif ( $sucheBestandsoperator == 2 )
1 lars 293
        {
294
            $sucheBestandsoperatorZeichen = "<";
2 lars 295
        } elseif ( $sucheBestandsoperator == 3 )
1 lars 296
        {
2 lars 297
            $sucheBestandsoperatorZeichen = false;
1 lars 298
        }
299
        else
300
        {
2 lars 301
            die( "<strong>Fehler:</strong> Der Bestandsoperator konnte nicht ermittelt werden!" );
1 lars 302
        }
2 lars 303
 
1 lars 304
        /**
305
         * HAVING-Bedingung, welche nur in die nachfolgende Query übernommen wird, wenn ein Bestandsoperatorzeichen
306
         * ausgewählt wurde, also <var>$sucheBestandsoperatorZeichen</var> nicht den Wert FALSE hat.
307
         */
2 lars 308
        if ( $sucheBestandsoperatorZeichen != false )
1 lars 309
        {
310
            $havingBedingung = "HAVING bestand $sucheBestandsoperatorZeichen $sucheBestand";
311
        }
2 lars 312
 
1 lars 313
        /**
314
         * QUERY: Hole aus der Datenbank alle Artikel, die den angegebenen Parametern entsprechen.
315
         */
316
        $sql = "
317
            SELECT
318
                SQL_CALC_FOUND_ROWS
319
                a.ID as id,
320
                a.kurzbezeichnung,
321
                a.durchschnittliche_lieferzeit,
322
                a.jahreszinssatz,
323
                a.mindestbestand,
324
                SUM(b.menge) AS bestand
325
            FROM
326
                artikel AS a LEFT JOIN lagerbewegungen as b
327
                    ON a.ID = b.artikel
328
            WHERE
2 lars 329
            (
330
                (a.kurzbezeichnung LIKE '%$sucheArtikelname%')
331
                OR
332
                (a.ID = '$sucheArtikelname')
333
            )
334
            AND
335
                a.language='" . $_SESSION["language"] . "'
1 lars 336
            GROUP BY
337
                a.ID
338
            $havingBedingung
339
            ORDER BY
340
                a.kurzbezeichnung $sucheSortierung
341
            LIMIT
2 lars 342
                " . $sucheArtikelanzahl['start'] . ", " . $sucheArtikelProSeite .
343
            "
1 lars 344
        ;";
2 lars 345
 
1 lars 346
        /**
347
         * QUERY ausführen.
348
         */
2 lars 349
        $result = mysql_query( $sql ) or die( mysql_errno() . ': ' . mysql_error
350
            () . '<hr />' . $sql );
351
 
1 lars 352
        /**
353
         * Speichere alle zurückgegebenen Artikeldaten in einem Loop-Array mit den Sub-Arrays: id, kurzbezeichnung, durchschnittliche_lieferzeit,
354
         * jahreszinssatz und mindestbestand.
355
         */
2 lars 356
        for ( $i = 0; $row = mysql_fetch_assoc( $result ); $i++ )
1 lars 357
        {
2 lars 358
            $sucheArtikel[$i]['id'] = $row['id'];
359
            $sucheArtikel[$i]['kurzbezeichnung'] = $row['kurzbezeichnung'];
360
            $sucheArtikel[$i]['mindestbestand'] = $row['mindestbestand'];
1 lars 361
        }
2 lars 362
 
363
        /**
1 lars 364
         * Hole die Anzahl der Artikel, die den Suchparametern entsprechen.
365
         */
366
        $sql = "SELECT FOUND_ROWS() AS sucheAnzahlArtikel";
2 lars 367
 
1 lars 368
        /**
369
         * QUERY ausführen.
370
         */
2 lars 371
        $result = mysql_query( $sql ) or die( mysql_errno() . ': ' . mysql_error
372
            () . '<hr />' . $sql );
373
 
1 lars 374
        /**
375
         * QUERY in ein Assoziatives Array speichern.
376
         */
2 lars 377
        $row = mysql_fetch_assoc( $result );
378
 
1 lars 379
        /**
380
         * Die Anzahl der Artikel, die den Suchparametern entsprechen.
381
         */
382
        $sucheAnzahlArtikel = $row['sucheAnzahlArtikel'];
2 lars 383
 
1 lars 384
        /**
385
         * Prüfe, ob die Anzahl der Artikel ohne Rest durch die Anzahl der Artikel pro Seite teilbar ist.
386
         */
387
        $rest = $sucheAnzahlArtikel % $sucheArtikelProSeite;
2 lars 388
 
1 lars 389
        /**
390
         * Sollte <var>$rest</var> größer als 0 sein, rechne die Anzahl der Artikel durch die Artikel pro Seite + 1.
391
         */
392
        if ( $rest > 0 )
393
        {
2 lars 394
            $sucheAnzahlSeiten = ( int )( $sucheAnzahlArtikel / $sucheArtikelProSeite ) +
395
                1;
1 lars 396
        }
397
        else
398
        {
2 lars 399
            $sucheAnzahlSeiten = ( $sucheAnzahlArtikel / $sucheArtikelProSeite );
1 lars 400
        }
2 lars 401
 
1 lars 402
        /**
403
         * Sollte die aktuelle Seitennummer (<var>$sucheArtikelseite</var>) größer sein als die Gesamtseitenzahl (<var>$sucheAnzahlSeiten</var>),
404
         * dann dekrementiere die aktuelle Seitennummer um eins.
405
         */
406
        if ( $sucheArtikelseite > $sucheAnzahlSeiten )
407
        {
408
            $sucheArtikelseite--;
409
        }
2 lars 410
 
1 lars 411
        /**
412
         * Sollte die aktuelle Seitennummer (<var>$sucheArtikelseite</var>) kleiner sein als eins,
413
         * dann inkrementiere die aktuelle Seitennummer um eins.
414
         */
415
        if ( $sucheArtikelseite < 1 )
416
        {
417
            $sucheArtikelseite++;
418
        }
2 lars 419
 
1 lars 420
        /**
421
         * Berechnung aller Bestände der Artikel der aktuellen Seite.
422
         */
2 lars 423
        for ( $i = 0; $i < sizeof( $sucheArtikel ); $i++ )
1 lars 424
        {
425
            /**
426
             * QUERY: Berechnung des aktuellen Bestands für den <var>$sucheArtikel[$i]['id']</var>.
427
             */
428
            $sql = "
429
                SELECT
430
                    SUM(menge) as bestand
431
                FROM
432
                    lagerbewegungen
433
                WHERE
2 lars 434
                    artikel = " . $sucheArtikel[$i]['id'] . "
1 lars 435
            ;";
2 lars 436
 
1 lars 437
            /**
438
             * QUERY ausführen.
439
             */
2 lars 440
            $result = mysql_query( $sql ) or die( mysql_errno() . ': ' .
441
                mysql_error() . '<hr />' . $sql );
442
 
1 lars 443
            /**
444
             * Das Ergebnis der QUERY in einem assoziativen Array speichern.
445
             */
2 lars 446
            $row = mysql_fetch_assoc( $result );
447
 
1 lars 448
            /**
449
             * Speicherung des Bestands in <var>$sucheArtikel[$i]['bestand']</var>
450
             */
451
            $sucheArtikel[$i]['bestand'] = $row['bestand'];
452
        }
2 lars 453
 
1 lars 454
        /**
455
         * Übergabe der Artikel- und Formulardaten an Smarty.
456
         */
457
        /**
458
         * Übergabe Artikelname
459
         */
2 lars 460
        $GLOBALS["ui"]->assign( "sucheArtikelname", $sucheArtikelname );
461
 
1 lars 462
        /**
463
         * Übergabe Bestand
464
         */
2 lars 465
        $GLOBALS["ui"]->assign( "sucheBestand", $sucheBestand );
466
 
1 lars 467
        /**
468
         * Übergabe Bestandsoperatorennummer
469
         */
2 lars 470
        $GLOBALS["ui"]->assign( "sucheBestandsoperator", $sucheBestandsoperator );
471
 
1 lars 472
        /**
473
         * Übergabe Meldebestand-größer-als-Bestand-Option
474
         */
2 lars 475
        $GLOBALS["ui"]->assign( "sucheMeldebestandGroesserBestand", $sucheMeldebestandGroesserBestand );
476
 
1 lars 477
        /**
478
         * Übergabe Sortierung
479
         */
2 lars 480
        $GLOBALS["ui"]->assign( "sucheSortierung", $sucheSortierung );
481
 
1 lars 482
        /**
483
         * Übergabe Nummer der aktuellen Seite
484
         */
2 lars 485
        $GLOBALS["ui"]->assign( "sucheArtikelseite", $sucheArtikelseite );
486
 
1 lars 487
        /**
488
         * Übergabe der Anzahl der Seiten
489
         */
2 lars 490
        $GLOBALS["ui"]->assign( "sucheAnzahlSeiten", $sucheAnzahlSeiten );
491
 
1 lars 492
        /**
493
         * Übergabe des Artikel-Arrays
494
         */
2 lars 495
        $GLOBALS["ui"]->assign( "artikelLoop", $sucheArtikel );
1 lars 496
    }
2 lars 497
 
1 lars 498
    /**
499
     * Wenn <var>$_GET['action']</var> gleich "buchung" ist, dann führe diesen Codeblock aus.
500
     */
501
    if ( $_GET['action'] == "buchung" )
502
    {
503
        /**
504
         * QUERY: Hole alle Lieferanten des Kunden, die nicht gesperrt sind.
505
         */
506
        $sql = "
507
            SELECT
508
                ID as id,
509
                Name as name
510
            FROM
511
                Firma
512
            WHERE
513
                gesperrt = 'nein'
514
        ";
515
        /**
516
         * QUERY ausführen.
517
         */
2 lars 518
        $result = mysql_query( $sql ) or die( mysql_errno() . ': ' . mysql_error
519
            () . '<hr />' . $sql );
520
 
1 lars 521
        /**
522
         * QUERY in ein Assoziatives Array speichern.
523
         */
2 lars 524
        for ( $i = 0; $row = mysql_fetch_assoc( $result ); $i++ )
1 lars 525
        {
2 lars 526
            $eingangsbuchungLieferanten[$i]['id'] = $row['id'];
527
            $eingangsbuchungLieferanten[$i]['name'] = $row['name'];
1 lars 528
        }
2 lars 529
 
1 lars 530
        /**
531
         * Übergabe der Lieferanten an Smarty.
532
         */
2 lars 533
        $GLOBALS["ui"]->assign( "lieferantenLoop", $eingangsbuchungLieferanten );
1 lars 534
    }
2 lars 535
 
1 lars 536
    /**
537
     * Wenn <var>$_GET['action']</var> gleich "artikel" ist, dann führe diesen Codeblock aus.
538
     */
539
    if ( $_GET['action'] == "artikel" )
540
    {
541
        /**
542
         * Prüfe ob eine <var>$_GET['id']</var> korrekt übergeben wurde.
543
         */
2 lars 544
        if ( empty( $_GET['id'] ) )
1 lars 545
        {
546
            /**
547
             * Abbruch des Skripts.
548
             */
2 lars 549
            die( "<strong>Fehler:</strong> Sie haben diese Seite ohne id-Parameter aufgerufen!" );
1 lars 550
        }
2 lars 551
 
1 lars 552
        /**
553
         * Wenn "Artikeldaten aktualisieren" geklickt wurde updatete in der Datenbank folgende Attribute des Artikels:
554
         * mindestbestand, durchschnittliche_lieferzeit und jahreszinssatz.
555
         */
556
        if ( $_POST['artikeldaten_eintragen'] )
557
        {
2 lars 558
            /**
559
             * QUERY: UPDATE der Artikeltabelle.
560
             */
561
            $sql = "
1 lars 562
                UPDATE
563
                    artikel
564
                SET
2 lars 565
                    mindestbestand                  = '" . $_POST['mindestbestand'] .
566
                "',
567
                    durchschnittliche_lieferzeit    = '" . $_POST['durchschnittlicheLieferzeit'] .
568
                "',
569
                    jahreszinssatz                  = '" . $_POST['jahreszinssatz'] .
570
                "'
1 lars 571
                WHERE
2 lars 572
                    ID = " . $_GET['id'] . "
1 lars 573
           ;";
2 lars 574
 
575
            /**
576
             * QUERY ausführen.
577
             */
578
            mysql_query( $sql ) or die( mysql_errno() . ': ' . mysql_error() .
579
                '<hr />' . $sql );
580
        }
581
 
1 lars 582
        /**
583
         * QUERY: Hole folgende Daten des Artikel: ID (Artikelnummer), kurzbezeichnung (Artikelbezeichnung),
584
         * durschnittliche_lieferzeit (durchschnittliche Lieferzeit), jahreszinssatz (Jahreszinssatz), mindestbestand (Mindestbestand).
585
         */
586
        $sql = "
587
            SELECT
588
                a.ID AS id,
589
                a.kurzbezeichnung AS artikelbezeichnung,
590
                a.durchschnittliche_lieferzeit AS durchschnittlicheLieferzeit,
591
                a.jahreszinssatz,
592
                a.mindestbestand,
593
                SUM(b.menge) AS bestand
594
            FROM
595
                artikel AS a LEFT JOIN lagerbewegungen AS b
596
                    ON a.ID = b.artikel
597
            WHERE
2 lars 598
                a.ID = " . $_GET['id'] . "
599
            AND
600
                a.language='" . $_SESSION["language"] . "'
1 lars 601
            GROUP BY
602
                id
603
        ;";
2 lars 604
 
1 lars 605
        /**
606
         * QUERY ausführen.
607
         */
2 lars 608
        $result = mysql_query( $sql ) or die( mysql_errno() . ': ' . mysql_error
609
            () . '<hr />' . $sql );
610
 
1 lars 611
        /**
612
         * Prüfe ob keine Artikeldaten zurückgegeben wurden indem ein assoziatives Array mit den Rückgabewerten gefüllt wird.
613
         */
2 lars 614
        if ( !$artikelArtikeldaten = mysql_fetch_assoc( $result ) )
1 lars 615
        {
616
            /**
617
             * Abbruch des Skripts.
618
             */
2 lars 619
            die( "<strong>Fehler:</strong> Der Artikel (ID=" . $_GET['id'] .
620
                ") konnte nicht gefunden werden!" );
1 lars 621
        }
2 lars 622
 
623
        /**
1 lars 624
         * Berechnung des durchschnittlichen Lagerbestand.
625
         */
626
        /**
627
         * QUERY: Hole alle Lagerbewegungen des Artikels der letzten 360 Tage aus der Datenbank.
628
         */
629
        $sql = "
630
            SELECT
631
                b.eintragsdatum AS datum,
632
                a.menge
633
            FROM
634
                lagerbewegungen AS a INNER JOIN buchungen AS b
635
                    ON a.buchungen = b.ID
636
            WHERE
2 lars 637
                a.artikel = " . $_GET['id'] . "
1 lars 638
            ORDER BY
639
                datum DESC
640
        ;";
2 lars 641
 
1 lars 642
        /**
643
         * QUERY ausführen.
644
         */
2 lars 645
        $result = mysql_query( $sql ) or die( mysql_errno() . ': ' . mysql_error
646
            () . '<hr />' . $sql );
647
 
1 lars 648
        /**
649
         * Speicherung aller Lagerbewegungen als LOOP-Array mit Datum und Menge.
650
         */
2 lars 651
        for ( $i = 0; $row = mysql_fetch_assoc( $result ); $i++ )
1 lars 652
        {
2 lars 653
            $lagerbewegungen[$i]['datum'] = date( "d.m.Y H:i:s", strtotime( $row['datum'] ) );
1 lars 654
            $lagerbewegungen[$i]['menge'] = $row['menge'];
655
        }
2 lars 656
 
1 lars 657
        /**
658
         * Die Lagerbewegungen werden zusätzlich in eine zweite Variable gespeichert,
659
         * damit diese unverändert an Smarty übergeben werden können, da die Lagerbewegungen durch die Berechnung
660
         * des durchschnittlichen Lagerbestands verfälscht werden würden.
661
         */
662
        $lagerbewegungenArtikel = $lagerbewegungen;
663
 
664
        /**
665
         * Addition aller Bestände eines <b>jeden</b> Tages von Beginn bis Ende der Buchungen.
666
         * Gespeichert wird dies in der Variable <var>$zwischenspeicher</var>.
667
         */
2 lars 668
        for ( $i = 0; $i < sizeof( $lagerbewegungen ); $i++ )
1 lars 669
        {
670
            /**
671
             * Letzter Lagerbewegungseintrag noch nicht erreicht?
672
             */
2 lars 673
            if ( $i + 1 != sizeof( $lagerbewegungen ) )
1 lars 674
            {
675
                /**
676
                 * Zwischenspeichern des i. Datums im Format "YYYY-MM-TT", vorher "YYYY-MM-TT HH:ii:ss".
677
                 */
2 lars 678
                $temp = explode( " ", $lagerbewegungen[$i]['datum'] );
679
 
1 lars 680
                /**
681
                 * <var>$tempDatum[0]</var> enthält den Timestamp der i. Lagerbewegung.
682
                 */
2 lars 683
                $tempDatum[0] = strtotime( $temp[0] );
684
 
1 lars 685
                /**
686
                 * Zwischenspeichern des i+1. Datums im Format "YYYY-MM-TT", vorher "YYYY-MM-TT HH:ii:ss".
687
                 */
2 lars 688
                $temp = explode( " ", $lagerbewegungen[$i + 1]['datum'] );
689
 
1 lars 690
                /**
691
                 * <var>$tempDatum[0]</var> enthält den Timestamp der i+1. Lagerbewegung.
692
                 */
2 lars 693
                $tempDatum[1] = strtotime( $temp[0] );
694
 
1 lars 695
                /**
696
                 * Ist das i. Datum gleich dem i+1. Datum?
697
                 */
698
                if ( $tempDatum[0] == $tempDatum[1] )
699
                {
700
                    /**
701
                     * Addition der Menge der i. Lagerbewegungen mit der i+1 und Überschreibung der i+1. Menge.
702
                     */
2 lars 703
                    $lagerbewegungen[$i + 1]['menge'] += $lagerbewegungen[$i]['menge'];
704
 
1 lars 705
                    /**
706
                     * Setzte die Menge der i. Lagerbewegung auf 0.
707
                     */
708
                    $lagerbewegungen[$i]['menge'] = 0;
2 lars 709
 
1 lars 710
                    /**
711
                     * Setzte ein Flag für die i+1. Lagerbewegung.
712
                     */
2 lars 713
                    $lagerbewegungen[$i + 1]['flag'] = 1;
1 lars 714
                }
715
                else
716
                {
717
                    /**
718
                     * Addiere auf die Variable <var>aktuellerBestand</var> den Wert von <var>$lagerbewegungen[$i]['menge']</var>.
719
                     */
720
                    $aktuellerBestand += $lagerbewegungen[$i]['menge'];
2 lars 721
 
1 lars 722
                    /**
723
                     * Ist das Flag <var>$lagerbewegungen[$i]['flag']</var> gesetzt?
724
                     */
725
                    if ( $lagerbewegungen[$i]['flag'] )
726
                    {
727
                        /**
728
                         * Ziehe vom Datum der i+1. Lagerbewegung das der i. ab und speichere dies in <var>$temp</var>.
729
                         */
730
                        $temp = $tempDatum[1] - $tempDatum[0];
2 lars 731
 
1 lars 732
                        /**
733
                         * Wandle <var>$temp</var> von Timestamp auf Tage um.
2 lars 734
                         */
735
                        $temp = ( ( ( $temp / 60 ) / 60 ) / 24 );
736
 
1 lars 737
                        /**
738
                         * Speichere in der Variable <var>$zwischenspeicher</var> das Ergebnis der Multiplikation
739
                         * von <var>$temp</var> (Anzahl der Tage) und <var>$aktuellerBestand</var>.
740
                         */
741
                        $zwischenspeicher += $aktuellerBestand * $temp;
742
                    }
743
                    else
744
                    {
745
                        /**
746
                         * Ist <var>$i</var> gleich 0?
747
                         */
748
                        if ( $i == 0 )
749
                        {
750
                            /**
751
                             * Ziehe vom Datum der i+1. Lagerbewegung das der i. ab und speichere dies in <var>$temp</var>.
752
                             */
753
                            $temp = $tempDatum[1] - $tempDatum[0];
2 lars 754
 
1 lars 755
                            /**
756
                             * Wandle <var>$temp</var> von Timestamp auf Tage um.
2 lars 757
                             */
758
                            $temp = ( ( ( $temp / 60 ) / 60 ) / 24 );
759
 
1 lars 760
                            /**
761
                             * Setzte die Variable <var>$zwischenspeicher</var> auf die Menge der i. Lagerbewegung x die Anzahl an Tagen
762
                             * bis zur i+1 Lagerbewegung.
763
                             */
2 lars 764
                            $zwischenspeicher = $lagerbewegungen[$i]['menge'] *
765
                                $temp;
1 lars 766
                        }
767
                        else
2 lars 768
                        {
1 lars 769
                            /**
770
                             * Überschreibe den Wert von <var>$zwischenspeicher</var> mit dem Ergebnis der Addtion
771
                             * von <var>$zwischenspeicher</var> und <var>$aktuellerBestand</var>.
772
                             */
773
                            $zwischenspeicher += $aktuellerBestand;
774
                        }
775
                    }
2 lars 776
                }
1 lars 777
            }
778
            else
779
            {
2 lars 780
                /**
781
                 * Addiere zum Wert von <var>$aktuellerBestand</var> den Wert von <var>$lagerbewegungen[$i]['menge']</var>.
782
                 */
783
                $aktuellerBestand += $lagerbewegungen[$i]['menge'];
784
 
785
                /**
786
                 * Addiere zum Wert von <var>$zwischenspeicher</var> den Wert von <var>$aktuellerBestand</var>.
787
                 */
788
                $zwischenspeicher += $aktuellerBestand;
789
            }
1 lars 790
        }
2 lars 791
 
1 lars 792
        /**
793
         * Zwischenspeichern des 1. Datums im Format "YYYY-MM-TT", vorher "YYYY-MM-TT HH:ii:ss".
794
         */
2 lars 795
        $temp = explode( " ", $lagerbewegungen[0]['datum'] );
796
 
1 lars 797
        /**
798
         * <var>$tempDatum[0]</var> enthält den Timestamp der 1. Lagerbewegung.
799
         */
2 lars 800
        $tempDatum[0] = strtotime( $temp[0] );
801
 
1 lars 802
        /**
803
         * Zwischenspeichern des 1. Datums im Format "YYYY-MM-TT", vorher "YYYY-MM-TT HH:ii:ss".
804
         */
2 lars 805
        $temp = explode( " ", $lagerbewegungen[sizeof( $lagerbewegungen ) - 1]['datum'] );
806
 
1 lars 807
        /**
808
         * <var>$tempDatum[1]</var> enthält den Timestamp der letzten Lagerbewegung.
809
         */
2 lars 810
        $tempDatum[1] = strtotime( $temp[0] );
811
 
1 lars 812
        /**
813
         * Berechne den Zeitraum in Sek. zwischen der ersten und der letzten Lagerbewegung.
814
         */
815
        $temp = $tempDatum[1] - $tempDatum[0];
2 lars 816
 
1 lars 817
        /**
818
         * Wandle den Zeitraum zwischen der ersten und der letzten Lagerbewegung in Tage um.
819
         */
2 lars 820
        $temp = ( ( ( $temp / 60 ) / 60 ) / 24 );
821
 
1 lars 822
        /**
823
         * Berechne den durchschnittlichen Lagerbestand.
824
         */
2 lars 825
        @$durschnittlicherBestand = $zwischenspeicher / ( $temp + 1 );
826
 
1 lars 827
        /**
828
         * Berechnung des Wareneinsatz.
829
         * Für die Berechnung des Wareneinsatzes werden alle Warenausgänge der letzten 360 Tage miteinander addiert.
830
         */
831
        /**
832
         * QUERY: Hole alle Ausgänge des Artikels mit der ID <var>$_GET['id']</var>.
833
         */
834
        $sql = "
835
            SELECT
836
                SUM(a.menge) as wareneinsatz
837
            FROM
838
                lagerbewegungen as a INNER JOIN buchungen as b
839
                    ON a.buchungen = b.ID
840
            WHERE
2 lars 841
                a.artikel = " . $_GET['id'] . "
842
            AND
843
                a.menge < 0
844
            AND
845
                b.eintragsdatum > NOW() - INTERVAL 360 DAY
1 lars 846
        ;";
2 lars 847
 
1 lars 848
        /**
849
         * QUERY ausführen.
850
         */
2 lars 851
        $result = mysql_query( $sql ) or die( mysql_errno() . ': ' . mysql_error
852
            () . '<hr />' . $sql );
853
 
1 lars 854
        /**
855
         * Speichere das Ergebnis der QUERY in einem assoziativen Array.
856
         */
2 lars 857
        $row = mysql_fetch_assoc( $result );
858
 
1 lars 859
        /**
860
         * Der Wareneinsatz der letzten 360 Tage des Artikels mit der ID <var>$_GET['id']</var>.
861
         */
2 lars 862
        $wareneinsatz = abs( $row['wareneinsatz'] );
863
 
1 lars 864
        /**
865
         * Berechnung der Umschlagshäufigkeit.
866
         */
867
        /**
868
         * QUERY: Hole das höchste und das niedrigste Datum des letzten Jahres der Lagerbewegungen des Artikels mit der ID <var>$_GET['id']</var>.
869
         */
870
        $sql = "
871
            SELECT
872
                MIN(b.eintragsdatum) AS minEintragsdatum,
873
                MAX(b.eintragsdatum) AS maxEintragsdatum
874
            FROM
875
                lagerbewegungen AS a INNER JOIN buchungen AS b
876
                    ON a.buchungen = b.ID
877
            WHERE
2 lars 878
                artikel = " . $_GET['id'] . "
879
            AND
880
                b.eintragsdatum > NOW() - INTERVAL 360 DAY
1 lars 881
        ;";
2 lars 882
 
1 lars 883
        /**
884
         * QUERY ausführen
885
         */
2 lars 886
        $result = mysql_query( $sql ) or die( mysql_errno() . ': ' . mysql_error
887
            () . '<hr />' . $sql );
888
 
1 lars 889
        /**
890
         * Speichere das Ergebnis der QUERY in einem assoziativen Array.
891
         */
2 lars 892
        $row = mysql_fetch_assoc( $result );
893
 
1 lars 894
        /**
895
         * Berechne den Zeitraum zwischen <var>$row['minEintragsdatum']</var> und <var>$row['maxEintragsdatum']</var> in Tagen.
896
         */
2 lars 897
        $temp = explode( " ", $row['minEintragsdatum'] );
898
        $minEintragsdatum = strtotime( $temp[0] );
899
 
900
        $temp = explode( " ", $row['maxEintragsdatum'] );
901
        $maxEintragsdatum = strtotime( $temp[0] );
902
 
903
        $zeitraumEintragsdatum = ( ( ( ( $maxEintragsdatum - $minEintragsdatum ) /
904
            60 ) / 60 ) / 24 ) + 1;
905
 
1 lars 906
        /**
907
         * Rechne den Wareneinsatz auf das Jahr hoch.
908
         */
2 lars 909
        $wareneinsatz *= ( 360 / $zeitraumEintragsdatum );
910
 
1 lars 911
        /**
912
         * Berechne die Umschlagshäufigkeit.
913
         */
914
        @$umschlagshaeufigkeit = $wareneinsatz / $durschnittlicherBestand;
2 lars 915
 
1 lars 916
        /**
917
         * Berechne die durchschnittliche Lagerdauer.
918
         */
919
        @$durchschnittlicheLagerdauer = 360 / $umschlagshaeufigkeit;
2 lars 920
 
1 lars 921
        /**
922
         * Berechne den Lagerzinssatz.
923
         */
2 lars 924
        $lagerzinssatz = $artikelArtikeldaten['jahreszinssatz'] * $umschlagshaeufigkeit /
925
            360;
926
 
1 lars 927
        /**
928
         * Berechne die Lagerzinskosten.
929
         */
930
        $lagerzinskosten = $lagerzinssatz * $durschnittlicherBestand / 100;
2 lars 931
 
1 lars 932
        /**
933
         * Berechne den Meldebestand.
934
         */
2 lars 935
        $meldebestand = $artikelArtikeldaten['mindestbestand'] * ( $wareneinsatz /
936
            360 );
937
 
1 lars 938
        /**
939
         * Berechnung des verfügbaren Bestands.
940
         */
2 lars 941
        $bestandsInfo = getArtikelbestandsInfo( $artikelArtikeldaten['id'] );
1 lars 942
        $verfuegbarerBestand = $bestandsInfo['verfuegbareMenge'];
2 lars 943
 
1 lars 944
        /**
945
         * Übergabe Artikeldaten an Smarty.
946
         */
2 lars 947
        $GLOBALS["ui"]->assign( "artikelArtikeldaten", $artikelArtikeldaten );
948
 
1 lars 949
        /**
950
         * Übergabe Lagerbewegungsdaten an Smarty.
951
         */
2 lars 952
        $GLOBALS["ui"]->assign( "lagerbewegungenArtikel", $lagerbewegungenArtikel );
953
 
1 lars 954
        /**
955
         * Übergabe des durchschnittlichen Bestands an Smarty.
956
         */
2 lars 957
        $GLOBALS["ui"]->assign( "durschnittlicherBestand", number_format( $durschnittlicherBestand,
958
            2, ",", "." ) );
959
 
1 lars 960
        /**
961
         * Übergabe des Wareneinsatz an Smarty.
962
         */
2 lars 963
        $GLOBALS["ui"]->assign( "wareneinsatz", $wareneinsatz );
964
 
1 lars 965
        /**
966
         * Übergabe der durchschnittlichen Lagerdauer an Smarty.
967
         */
2 lars 968
        $GLOBALS["ui"]->assign( "durchschnittlicheLagerdauer", number_format( $durchschnittlicheLagerdauer,
969
            2, ",", "." ) );
970
 
1 lars 971
        /**
972
         * Übergabe der Umschlagshäufigkeit an Smarty.
973
         */
2 lars 974
        $GLOBALS["ui"]->assign( "umschlagshaeufigkeit", number_format( $umschlagshaeufigkeit,
975
            2, ",", "." ) );
976
 
1 lars 977
        /**
978
         * Übergabe des Lagerzinssatz an Smarty.
979
         */
2 lars 980
        $GLOBALS["ui"]->assign( "lagerzinssatz", number_format( $lagerzinssatz,
981
            2, ",", "." ) );
982
 
1 lars 983
        /**
984
         * Übergabe der Lagerzinskosten an Smarty.
985
         */
2 lars 986
        $GLOBALS["ui"]->assign( "lagerzinskosten", number_format( $lagerzinskosten,
987
            2, ",", "." ) );
988
 
1 lars 989
        /**
990
         * Übergabe des Meldebestand an Smarty.
991
         */
2 lars 992
        $GLOBALS["ui"]->assign( "meldebestand", $meldebestand );
993
 
1 lars 994
        /**
995
         * Übergabe des verfügbaren Bestands.
996
         */
2 lars 997
        $GLOBALS["ui"]->assign( 'verfuegbarerBestand', $verfuegbarerBestand );
998
 
1 lars 999
    }
1000
    /**
2 lars 1001
     * Auswahl des Smarty-Templates.
1002
     */
1 lars 1003
    switch ( $_REQUEST['action'] )
1004
    {
1005
        case 'uebersicht':
1006
            $GLOBALS["ui"]->display( "lagerwirtschaft/uebersicht.tpl" );
2 lars 1007
            break;
1008
 
1 lars 1009
        case 'buchung':
1010
            $GLOBALS["ui"]->display( "lagerwirtschaft/buchung.tpl" );
2 lars 1011
            break;
1012
 
1 lars 1013
        case 'artikel':
1014
            $GLOBALS["ui"]->display( "lagerwirtschaft/artikel.tpl" );
2 lars 1015
            break;
1016
 
1 lars 1017
        default:
1018
            unset( $_SESSION[F_NAME] );
1019
            $GLOBALS["ui"]->display( "lagerwirtschaft/uebersicht.tpl" );
1020
    }
1021
?>