3 require_once 'Pman/Roo.php';
5 class Pman_Xtuple_Import_AUPurchaseOrder extends Pman_Roo
9 if (HTML_FlexyFramework::get()->cli) {
12 return parent::getAuth();
17 $this->transObj = DB_DataObject::Factory('poitem');
19 $this->transObj->query('BEGIN');
21 PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array($this, 'onPearError'));
23 $img = DB_DataObject::Factory('images');
26 'ontable' => 'ipshead'
28 $img->onUpload(false);
30 require_once 'File/Convert.php';
32 $fc = new File_Convert($img->getStoreName(), $img->mimetype );
33 $csv = $fc->convert('text/csv');
34 $this->importCsv($csv);
37 function importCsv($csv)
39 ini_set("auto_detect_line_endings", true);
41 $fh = fopen($csv, 'r');
43 $this->jerr("invalid file");
46 $pohead_id = $_REQUEST['pohead_id'];
48 $req = array('ITEM', 'ITEM DESCRIPTION', 'ON HAND', 'AVG COST');
53 while(false !== ($n = fgetcsv($fh,10000, ',', '"'))) {
54 if(!array_filter($n)){ // empty row
61 $cols[] = strtoupper(trim($k));
67 if (!in_array($r,$cols)) {
75 foreach($cols as $i=>$k) {
82 $this->jerr("could not find a row with " . implode(' / ', $req));
87 //print_R($rows);exit;
90 $pohead = DB_DataObject::factory('pohead');
91 if(!$pohead->get($pohead_id)){
92 $this->jerr('error occur on finding pohead');
96 $poitem = DB_DataObject::factory('poitem');
99 MAX(poitem_linenumber) as max_num
101 $poitem->poitem_pohead_id = $pohead->pid();
103 if(!empty($poitem->max_num)){
104 $max_num = $poitem->max_num;
108 foreach ($rows as $i => $row){
109 if (empty($row['ON HAND']) || $row['ON HAND'] < 1) {
112 if(empty($row['ITEM'])){
117 $item = DB_DataObject::factory('item')->lookupSKU($row['ITEM']);
121 $missing[] = $row['ITEM'] . ' does not exist';
125 $itemsite = DB_DataObject::factory('itemsite');
126 if(!$itemsite->get('itemsite_item_id', $item->pid())){
127 $missing[] = $row['ITEM'] . ' does not exist in item site';
130 $rows[$i]['ITEMSITE ID'] = $itemsite->pid();
135 $this->jerr(implode("\n", $missing));
138 foreach($rows as $i => $row){
140 if (empty($row['ON HAND']) || $row['ON HAND'] < 1) {
144 $poitem = DB_DataObject::factory('poitem');
145 $poitem->setFrom(array(
146 'poitem_status' => $pohead->pohead_status,
147 'poitem_pohead_id' => $pohead->pid(),
148 'poitem_linenumber' => $max_num + ($i + 1),
149 'poitem_duedate' => date('Y-m-d'),
150 'poitem_itemsite_id' => $row['ITEMSITE ID'],
151 'poitem_qty_ordered' => $row['ON HAND'],
152 'poitem_unitprice' => $row['AVG COST'],
153 'poitem_itemsrc_id' => $poitem->sqlValue('NULL')
156 foreach($poitem->defaults() as $k => $v){
157 if (!isset($poitem->$k)) {
165 $this->jerr('error occur on insert poitem ' . $row['ITEM CODE']);
169 $this->jok('IMPORTED');