Fix #7123 - getting abra ready to test
[Pman.Xtuple] / Import / InvAdjustment.php
1 <?php
2
3 require_once 'Pman/Roo.php';
4
5 class Pman_Xtuple_Import_InvAdjustment extends Pman_Roo
6 {
7     function getAuth()
8     {
9         if (HTML_FlexyFramework::get()->cli) {
10             return true;
11         }
12         return parent::getAuth();
13     }
14     
15     function post()
16     {
17         $this->transObj = DB_DataObject::Factory('invadjgrp');
18         
19         $this->transObj->query('BEGIN');
20         
21         PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array($this, 'onPearError'));
22         
23         $img = DB_DataObject::Factory('images');
24         $img->setFrom(array(
25             'onid' => 0,
26             'ontable' => 'ipshead'
27         ));
28         $img->onUpload(false);
29         
30         require_once 'File/Convert.php';
31         $fc = new File_Convert($img->getStoreName(), $img->mimetype );
32         $csv = $fc->convert('text/csv');
33         $ret = $this->importCsv($csv);
34         
35         $this->jdata($ret);
36     }
37     
38     function importCsv($csv)
39     {
40         ini_set("auto_detect_line_endings", true);
41         
42         $fh = fopen($csv, 'r');
43         if (!$fh) {
44             $this->jerr("invalid file");
45         }
46         
47         $invadjgrp_id = $_REQUEST['invadjgrp_id'];
48         
49         if(!$invadjgrp_id || $invadjgrp_id < 1){
50             $this->jerr('invalid invadjgrp id');
51         }
52         
53         $grp = DB_DataObject::factory('invadjgrp');
54         if(!$grp->get($invadjgrp_id)){
55             $this->jerr('error occur on getting invadjgrp');
56         }
57         
58         if($grp->invadjgrp_posted){
59             $this->jerr('Can not update posted');
60         }
61         
62         $req = array('CODE', 'QTY');
63         
64         $cols = false;
65         $rows = array();
66         
67         while(false !== ($n = fgetcsv($fh,10000, ',', '"'))) {
68             if (!$cols) {
69                 
70                 $cols = array();
71                 foreach($n as $k) {
72                     $cols[] = strtoupper(trim($k));
73                 }
74                 if (empty($cols)) {
75                     continue;
76                 }
77                 foreach($req as $r) {
78                     if (!in_array($r,$cols)) {
79                         $cols = false;
80                         break;
81                     }
82                 }
83                 continue;
84             }
85             foreach($cols as $i=>$k) {
86                 $row[$k] = $n[$i];
87             }
88             $rows[] = $row;
89         }
90         
91         if (empty($cols)) {
92             $this->jerr("could not find a row with " . implode(' / ', $req));
93         }
94         
95         fclose($fh);
96         
97         $errmsg = array();
98         $ret = array();
99         
100         $done = array();
101         
102         foreach ($rows as $row){
103             if (empty($row['CODE'])) {
104                 continue;
105             }
106             
107             $item = DB_DataObject::factory('item');
108             $item = $item->lookupSKU($row['CODE']);
109             if (!$item) {
110                 $errmsg[] = $row['CODE'];
111                 continue;
112             }
113             if (isset($done[$item->item_number])) {
114                 continue; // dupes.
115             }
116             $done[$item->item_number] = 1; 
117             //DB_DataObject::debugLevel(1);
118             $itemsite = $item->itemsite();
119             
120             
121             $invdetail = DB_DataObject::factory('invdetail');
122             $invdetail->query("
123                     SELECT
124                         ROUND(
125                             COALESCE(
126                                 invdetail_atdate(
127                                     '{$grp->invadjgrp_transdate}'::date + INTERVAL '1 DAY',
128                                     {$grp->invadjgrp_location_id},
129                                     {$itemsite->pid()}
130                                 )
131                             , 0)
132                         ,0)
133                     AS stock_balance
134             ");
135             $invdetail->fetch();
136             
137             $balance = $invdetail->stock_balance;
138             
139             $ret[] = array(
140                 'item_number' => $item->item_number,
141                 'itemsite_id' => $itemsite->pid(),
142                 'balance' => $balance,
143                 'qty' => $row['QTY']
144             );
145
146             
147 //            $invadj = DB_DataObject::factory('invadj');
148 //            $invadj->setFrom(array(
149 //                'invadj_transdate' => $grp->invadjgrp_transdate,
150 //                'invadj_location_id' => $grp->invadjgrp_location_id,
151 //                'invadj_itemsite_id' => $itemsite->pid(),
152 //                'invadj_qty_by' => $adj,
153 //                'invadj_posted' => FALSE,
154 //                'invadj_comments' => $grp->invadjgrp_comments,
155 //                'invadj_voids_id' => 0,
156 //                'invadj_voided_by_id' => 0,
157 //                'invadj_invadjgrp_id' => $grp->pid()
158 //            ));
159 //            if(!$invadj->insert()){
160 //                $this->jerr("Error occur on insert adjustment for {$row['CODE']}");
161 //            }
162             
163         }
164         
165         if(count($errmsg)){
166             $this->jerr("MISSING ITEM : \n" . implode("\n", $errmsg));
167         }
168         
169         return $ret;
170     }
171 }