Project

General

Profile

Project progress work #50 » StockCardRecord.php

Yutthapong Sricha, 20 Oct 2023 08:13

 
1

    
2
<?
3
require_once ('DBTable.php');
4
require_once ('Util.php');
5
require_once ('DBFactory.php');
6
//require_once ('Stock.php');
7
require_once ('PackageType.php');
8

    
9

    
10
final class StockCardRecord extends DBTable
11
{
12

    
13
	public $__TABLE = 'StockCardRecord';
14
	public static $__COLUMNS = array(
15
            'id'                    => 0,
16
            'item_id' 		        => '',
17
            'item_dvsn_id' 		    => 0,
18
            'customer_id' 		    => '',
19
            'customer_dvsn_id' 		=> 0,
20
            'sum_date' 		        => '',
21
            'package_id'            => '',
22
            'current_stock_pcs'	    => 0,
23
            'stockcard_pack'        => 0,
24
            'stockcard_pcs'         => 0,
25
            'inbound_pack'			=> 0,
26
            'inbound_pcs'			=> 0,
27
            'outbound_pack'		    => 0,
28
            'outbound_pcs'		    => 0,
29
            'balance_pack' 	        => 0,
30
            'balance_pcs' 	        => 0,
31
            'month_mm'			    => '',
32
            'year_20yy'             => '',
33
            'create_dt' 		    => 0,
34
            'create_user_id'        => 0,
35
            'update_dt' 		    => 0,
36
            'update_user_id'        => 0,
37
					);
38

    
39

    
40
	/**
41
	 * Update stock card ib
42
	 *
43
	 * @return true if update successfully, otherwise return false
44
	 */
45
	public function addStockCard_ib($data)
46
	{   
47
        $cal_date = substr($data['create_dt'],0,10);
48
        $todate = date('Y-m-d');
49

    
50
            $result = $this->cal_stock_card_ib($cal_date,$data);
51
           
52
            //if( $cal_date!=$todate ){
53

    
54
                $current_stock_pcs = 0;
55
                $stockcard_pack = 0;
56
                $stockcard_pcs = 0;
57
                
58
                $last_stockcard = (new DBFactory())->query("SELECT top 1 balance_pack AS stockcard_pack , balance_pcs AS stockcard_pcs FROM StockCardRecord WHERE item_id ='".$data['item_id']."' AND customer_id='".$data['customer_id']."' AND sum_date < '".$cal_date."' order by  sum_date DESC, create_dt DESC");    
59
                if( isset($last_stockcard[0]['stockcard_pcs']) ){
60
                    $current_stock_pcs = $last_stockcard[0]['stockcard_pcs'];
61
                    $stockcard_pack = $last_stockcard[0]['stockcard_pack'];
62
                    $stockcard_pcs = $last_stockcard[0]['stockcard_pcs'];
63
                }
64

    
65
                $list_transaction = (new DBFactory())->query("SELECT * FROM StockCardRecord WHERE item_id='". $data['item_id'] ."' AND customer_id='". $data['customer_id'] ."' AND SUM_date BETWEEN '".$cal_date."' AND '".$todate."' order by  sum_date, create_dt ASC");
66
                foreach( $list_transaction as $row ){
67
                    $sql =   " UPDATE " . $this->__TABLE .
68
                        " SET current_stock_pcs = ".$current_stock_pcs." , " .
69
                        "     stockcard_pack = ".$stockcard_pack." , " .
70
                        "     stockcard_pcs = ".$stockcard_pcs." , " .
71
                        "     balance_pack = (".$stockcard_pack." + inbound_pack) - outbound_pack , " .
72
                        "     balance_pcs = (".$stockcard_pcs." + inbound_pcs) - outbound_pcs, " .
73
                        "     update_dt = '". date('Y-m-d H:i:s') ."' ".
74
                        " WHERE item_id='" . $row['item_id'] . "'" .
75
                        "   AND item_dvsn_id=" . $row['item_dvsn_id'] . 
76
                        "   AND customer_id='" . $row['customer_id'] . "'" .
77
                        "   AND customer_dvsn_id=" . $row['customer_dvsn_id'] .
78
                        "   AND sum_date='". $row['sum_date'] ."'";
79

    
80
                    $this::$logger->debug("SQL: " . $sql);
81
                    $stmt = sqlsrv_query( $this::$db->getInstance(), $sql );
82
                    $rows_affected = sqlsrv_rows_affected( $stmt);
83
                    
84
                    if( $rows_affected === false) {
85
                        $this::$logger->error("Caught exception: " . print_r(sqlsrv_errors(), true));
86
                    } elseif( $rows_affected == -1 ) {
87
                        $rows_affected = 0;
88
                    } else {
89
                        $this::$logger->debug($rows_affected." rows were updated.");
90
                    }
91
                    $stockcard_pack = ($stockcard_pack + $row['inbound_pack']) - abs($row['outbound_pack']);
92
                    $stockcard_pcs = ($stockcard_pcs + $row['inbound_pcs']) - abs($row['outbound_pcs']);
93
                    $current_stock_pcs = $stockcard_pcs;
94
                }
95
            //}
96

    
97
            return $result;
98
    } 
99

    
100
   	/**
101
	 * Update stock card ib
102
	 *
103
	 * @return true if update successfully, otherwise return false
104
	 */
105
	public function cal_stock_card_ib($cal_date,$data)
106
	{  
107
           $sql =   " UPDATE " . $this->__TABLE .
108
                    " SET inbound_pack = inbound_pack + ".$data['package_qty'].", " .
109
                    "     inbound_pcs = inbound_pcs + ".$data['qty'].", " .
110
                    "     balance_pack = balance_pack + ".$data['package_qty'].", " .
111
                    "     balance_pcs = balance_pcs + ".$data['qty'].", " .
112
                    "     update_dt = '". date('Y-m-d H:i:s') . "'," .
113
                    "     update_user_id = 'system'" .
114
                    " WHERE item_id='" . $data['item_id'] . "'" .
115
                    "   AND item_dvsn_id=" . $data['item_dvsn_id'] . 
116
                    "   AND customer_id='" . $data['customer_id'] . "'" .
117
                    "   AND customer_dvsn_id=" . $data['customer_dvsn_id'] .
118
                    "   AND sum_date='". $cal_date ."'";
119

    
120
            $this::$logger->debug("SQL: " . $sql);
121
            $stmt = sqlsrv_query( $this::$db->getInstance(), $sql );
122
            $rows_affected = sqlsrv_rows_affected( $stmt);
123

    
124
            if( $rows_affected === false) {
125
                $this::$logger->error("Caught exception: " . print_r(sqlsrv_errors(), true));
126
            } elseif( $rows_affected == -1 ) {
127
                $rows_affected = 0;
128
            } else {
129
                $this::$logger->debug($rows_affected." rows were updated.");
130
            }
131

    
132
            if (!$rows_affected) {
133
                $StockCardRecord_cols = $this::$__COLUMNS;
134

    
135
                // remove unwant data
136
                $unsets = [ 'id', 'update_dt', 'update_user_id'];
137
                foreach ($unsets as $u) unset($StockCardRecord_cols[$u]);               
138

    
139
                $StockCardRecord_cols = Util::parseArrayData($StockCardRecord_cols, $data);
140

    
141
                list( $y, $m, $d) = explode("-",$cal_date);
142
                
143
                $clean_m = strlen($m)==1?"0".$m:$m;
144
                
145
                $packageTypes = (new PackageType())->get(PackageType::$__COLUMNS, "item_id='".$data['item_id']."' AND item_dvsn_id='".$data['item_dvsn_id']."'");
146

    
147
                // $stockcard_pack = 0;
148
                // $stockcard_pcs = 0;packageTypes
149
                // if ( $type_cal=='realtime' ) {
150
                //     $last_stock = (new Stock())->get(Stock::$__COLUMNS, "item_id='".$data['item_id']."' AND item_dvsn_id='".$data['item_dvsn_id']."' AND customer_id='".$data['customer_id']."' AND customer_dvsn_id='".$data['customer_dvsn_id']."'");
151
                //     if( isset($last_stock[0]['qty']) ){
152
                //         $stockcard_pack = $last_stock[0]['qty']/$packageTypes[0]['qty'];
153
                //         $stockcard_pcs = $last_stock[0]['qty'];
154
                //     }
155
                // }
156
                
157
                // if ($type_cal=='recalulate' ) {
158
                //     $last_stockcard = (new DBFactory())->query("SELECT top 1 balance_pack AS stockcard_pack , balance_pcs AS stockcard_pcs FROM StockCardRecord WHERE item_id ='".$data['item_id']."' AND customer_id='".$data['customer_id']."' AND sum_date < '".$cal_date."' order by  sum_date, create_dt DESC");    
159
                //     if( isset($last_stockcard[0]['stockcard_pcs']) ){
160
                //         $stockcard_pack = $$last_stockcard[0]['stockcard_pack'];
161
                //         $stockcard_pcs = $last_stockcard[0]['stockcard_pcs'];
162
                //     }
163
                // }
164

    
165
                
166
                //$StockCardRecord_cols['item_id']            = $data['item_id'];
167
                //$StockCardRecord_cols['item_dvsn_id']       = $data['item_dvsn_id'];
168
               // $StockCardRecord_cols['customer_id']        = $data['customer_id'];
169
                //$StockCardRecord_cols['customer_dvsn_id']   = $data['customer_dvsn_id'];
170
                $StockCardRecord_cols['sum_date']           = $cal_date;
171
                $StockCardRecord_cols['package_id']         = isset($packageTypes[0]['package_id'])?$packageTypes[0]['package_id']:"box";
172
                //$StockCardRecord_cols['current_stock_pcs']  = $stockcard_pcs;   
173
                //$StockCardRecord_cols['stockcard_pack']     = $stockcard_pack;
174
               // $StockCardRecord_cols['stockcard_pcs']      = $stockcard_pcs; 
175
                $StockCardRecord_cols['inbound_pack']       = $data['package_qty'];
176
                $StockCardRecord_cols['inbound_pcs']        = $data['qty'];
177
                //$StockCardRecord_cols['balance_pack']       = $stockcard_pack + $data['package_qty'];
178
                //$StockCardRecord_cols['balance_pcs']        = $stockcard_pcs + $data['qty'];
179
                $StockCardRecord_cols['month_mm']           = $clean_m;
180
                $StockCardRecord_cols['year_20yy']          = $y;
181
                $StockCardRecord_cols['create_dt']          = date('Y-m-d H:i:s');
182
                //$StockCardRecord_cols['create_user_id']     = $data['create_user_id'];           
183

    
184
                $this::$logger->debug("array : " . json_encode($StockCardRecord_cols));
185
                $rows_affected = $this->add($StockCardRecord_cols) ? 1 : 0;
186
            }    
187
            return $rows_affected;
188
    }    
189

    
190

    
191
    	/**
192
	 * Update stock card ib
193
	 *
194
	 * @return true if update successfully, otherwise return false
195
	 */
196
	public function addStockCard_ob($data)
197
	{   
198
        $cal_date = substr($data['create_dt'],0,10);
199
        $todate = date('Y-m-d');
200

    
201
            $result = $this->cal_stock_card_ob($cal_date,$data);
202

    
203
                $current_stock_pcs = 0;
204
                $stockcard_pack = 0;
205
                $stockcard_pcs = 0;
206
                
207
                $last_stockcard = (new DBFactory())->query("SELECT top 1 balance_pack AS stockcard_pack , balance_pcs AS stockcard_pcs FROM StockCardRecord WHERE item_id ='".$data['item_id']."' AND customer_id='".$data['customer_id']."' AND sum_date < '".$cal_date."'  order by  sum_date DESC, create_dt DESC");    
208
                if( isset($last_stockcard[0]['stockcard_pcs']) ){
209
                    $current_stock_pcs = $last_stockcard[0]['stockcard_pcs'];
210
                    $stockcard_pack = $last_stockcard[0]['stockcard_pack'];
211
                    $stockcard_pcs = $last_stockcard[0]['stockcard_pcs'];
212
                }
213

    
214
                $list_transaction = (new DBFactory())->query("SELECT * FROM StockCardRecord WHERE item_id='". $data['item_id'] ."' AND customer_id='". $data['customer_id'] ."' AND SUM_date BETWEEN '".$cal_date."' AND '".$todate."' order by  sum_date, create_dt ASC");             
215
                foreach( $list_transaction as $row ){
216
                    $sql =   " UPDATE " . $this->__TABLE .
217
                        " SET current_stock_pcs = ".$current_stock_pcs." , " .
218
                        "     stockcard_pack = ".$stockcard_pack." , " .
219
                        "     stockcard_pcs = ".$stockcard_pcs." , " .
220
                        "     balance_pack = (".$stockcard_pack." + inbound_pack) - outbound_pack, " .
221
                        "     balance_pcs = (".$stockcard_pcs." + inbound_pcs) - outbound_pcs, " .
222
                        "     update_dt = '". date('Y-m-d H:i:s') . "' " .
223
                        " WHERE item_id='" . $row['item_id'] . "'" .
224
                        "   AND item_dvsn_id=" . $row['item_dvsn_id'] . 
225
                        "   AND customer_id='" . $row['customer_id'] . "'" .
226
                        "   AND customer_dvsn_id=" . $row['customer_dvsn_id'] .
227
                        "   AND sum_date='". $row['sum_date'] ."'";
228

    
229
                    $this::$logger->debug("SQL: " . $sql);
230
                    $stmt = sqlsrv_query( $this::$db->getInstance(), $sql );
231
                    $rows_affected = sqlsrv_rows_affected( $stmt);
232
                    
233
                    if( $rows_affected === false) {
234
                        $this::$logger->error("Caught exception: " . print_r(sqlsrv_errors(), true));
235
                    } elseif( $rows_affected == -1 ) {
236
                        $rows_affected = 0;
237
                    } else {
238
                        $this::$logger->debug($rows_affected." rows were updated.");
239
                    }
240
                    $stockcard_pack = ($stockcard_pack + $row['inbound_pack']) - abs($row['outbound_pack']);
241
                    $stockcard_pcs = ($stockcard_pcs + $row['inbound_pcs']) - abs($row['outbound_pcs']);
242
                    $current_stock_pcs = $stockcard_pcs;
243
                }
244

    
245
  
246
        return $result;
247
      
248
    } 
249

    
250
       	/**
251
	 * Update stock card ib
252
	 *
253
	 * @return true if update successfully, otherwise return false
254
	 */
255
	public function cal_stock_card_ob($cal_date,$data)
256
	{  
257
           $sql =   " UPDATE " . $this->__TABLE .
258
                    " SET outbound_pack = outbound_pack + ".$data['package_qty'].", " .
259
                    "     outbound_pcs = outbound_pcs + ".$data['qty'].", " .
260
                    "     balance_pack = balance_pack - ".$data['package_qty'].", " .
261
                    "     balance_pcs = balance_pcs - ".$data['qty'].", " .
262
                    "     update_dt = '". date('Y-m-d H:i:s') . "'," .
263
                    "     update_user_id = 'system'" .
264
                    " WHERE item_id='" . $data['item_id'] . "'" .
265
                    "   AND item_dvsn_id=" . $data['item_dvsn_id'] . 
266
                    "   AND customer_id='" . $data['customer_id'] . "'" .
267
                    "   AND customer_dvsn_id=" . $data['customer_dvsn_id'] .
268
                    "   AND sum_date='". $cal_date ."'";
269

    
270
            $this::$logger->debug("SQL: " . $sql);
271
            $stmt = sqlsrv_query( $this::$db->getInstance(), $sql );
272
            $rows_affected = sqlsrv_rows_affected( $stmt);
273

    
274
            if( $rows_affected === false) {
275
                $this::$logger->error("Caught exception: " . print_r(sqlsrv_errors(), true));
276
            } elseif( $rows_affected == -1 ) {
277
                $rows_affected = 0;
278
            } else {
279
                $this::$logger->debug($rows_affected." rows were updated.");
280
            }
281

    
282
            if (!$rows_affected) {
283
                $StockCardRecord_cols = $this::$__COLUMNS;
284

    
285
                // remove unwant data
286
                $unsets = [ 'id', 'update_dt', 'update_user_id'];
287
                foreach ($unsets as $u) unset($StockCardRecord_cols[$u]);               
288

    
289
                $StockCardRecord_cols = Util::parseArrayData($StockCardRecord_cols, $data);
290

    
291
                list( $y, $m, $d) = explode("-",$cal_date);
292
                
293
                $clean_m = strlen($m)==1?"0".$m:$m;
294
                
295
                $packageTypes = (new PackageType())->get(PackageType::$__COLUMNS, "item_id='".$data['item_id']."' AND item_dvsn_id='".$data['item_dvsn_id']."'");
296

    
297
                // $stockcard_pack = 0;
298
                // $stockcard_pcs = 0;
299
                // if ( $type_cal=='realtime' ) {
300
                //     $last_stock = (new Stock())->get(Stock::$__COLUMNS, "item_id='".$data['item_id']."' AND item_dvsn_id='".$data['item_dvsn_id']."' AND customer_id='".$data['customer_id']."' AND customer_dvsn_id='".$data['customer_dvsn_id']."'");
301
                //     if( isset($last_stock[0]['qty']) ){
302
                //         $stockcard_pack = $last_stock[0]['qty']/$packageTypes[0]['qty'];
303
                //         $stockcard_pcs = $last_stock[0]['qty'];
304
                //     }
305
                // }
306
                
307
                // if ($type_cal=='recalulate' ) {
308
                //     $last_stockcard = (new DBFactory())->query("SELECT top 1 balance_pack AS stockcard_pack , balance_pcs AS stockcard_pcs FROM StockCardRecord WHERE item_id ='".$data['item_id']."' AND customer_id='".$data['customer_id']."' AND sum_date < '".$cal_date."' order by  sum_date, create_dt DESC");    
309
                //     if( isset($last_stockcard[0]['stockcard_pcs']) ){
310
                //         $stockcard_pack = $$last_stockcard[0]['stockcard_pack'];
311
                //         $stockcard_pcs = $last_stockcard[0]['stockcard_pcs'];
312
                //     }
313
                // }
314

    
315
                $StockCardRecord_cols['sum_date']           = $cal_date;
316
                $StockCardRecord_cols['package_id']         = isset($packageTypes[0]['package_id'])?$packageTypes[0]['package_id']:"box";
317
               // $StockCardRecord_cols['current_stock_pcs']  = $stockcard_pcs;   
318
               // $StockCardRecord_cols['stockcard_pack']     = $stockcard_pack;
319
              //  $StockCardRecord_cols['stockcard_pcs']      = $stockcard_pcs; 
320
                $StockCardRecord_cols['outbound_pack']      = $data['package_qty'];
321
                $StockCardRecord_cols['outbound_pcs']       = $data['qty'];
322
              //  $StockCardRecord_cols['balance_pack']       = $stockcard_pack - $data['package_qty'];
323
               // $StockCardRecord_cols['balance_pcs']        = $stockcard_pcs - $data['qty'];
324
                $StockCardRecord_cols['month_mm']           = $clean_m;
325
                $StockCardRecord_cols['year_20yy']          = $y;
326
                $StockCardRecord_cols['create_dt']          = date('Y-m-d H:i:s');
327
    
328
                $this::$logger->debug("array : " . json_encode($StockCardRecord_cols));
329
                $rows_affected = $this->add($StockCardRecord_cols) ? 1 : 0;
330
            }    
331

    
332
            return $rows_affected;
333
    } 
334
}    
(6-6/6)