3 require_once 'Pman/Roo.php';
5 class Pman_Xtuple_Import_PurchaseOrder 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';
31 $fc = new File_Convert($img->getStoreName(), $img->mimetype );
32 $csv = $fc->convert('text/csv');
33 $this->importCsv($csv);
36 function importCsv($csv)
38 ini_set("auto_detect_line_endings", true);
40 $fh = fopen($csv, 'r');
42 $this->jerr("invalid file");
45 $pohead_id = $_REQUEST['pohead_id'];
47 $req = array('ITEM CODE', 'ITEM DESCRIPTION', 'DUE DATE', 'LINE NUMBER', 'ORDERED', 'UNIT PRICE');
52 while(false !== ($n = fgetcsv($fh,10000, ',', '"'))) {
57 $cols[] = strtoupper(trim($k));
63 if (!in_array($r,$cols)) {
70 foreach($cols as $i=>$k) {
77 $this->jerr("could not find a row with " . implode(' / ', $req));
83 $pohead = DB_DataObject::factory('pohead');
84 if(!$pohead->get($pohead_id)){
85 $this->jerr('error occur on finding pohead');
88 // check poitem linenumber
90 $poitem = DB_DataObject::factory('poitem');
93 MAX(poitem_linenumber) as max_num
95 $poitem->poitem_pohead_id = $pohead->pid();
97 if(!empty($poitem->max_num)){
98 $max_num = $poitem->max_num;
101 foreach($rows as $i => $row){
103 * check item and itemsite and itemsrc,
104 * throw exception while the item or itemsite or itemsrc is not exist for the time being
106 * we might need to new the item in the further
108 $item = DB_DataObject::factory('item');
109 if(!$item->get('item_number', $row['ITEM CODE'])){
110 $this->jerr('item ' . $row['ITEM CODE'] . ' does not exist');
112 $itemsite = DB_DataObject::factory('itemsite');
113 if(!$itemsite->get('itemsite_item_id', $item->pid())){
114 $this->jerr($row['ITEM CODE'] . ' does not exist in item site');
116 $itemsrc = DB_DataObject::factory('itemsrc');
117 if(!$itemsrc->get('itemsrc_item_id', $item->pid())){
118 $this->jerr($row['ITEM CODE'] . ' does not exist in item src');
122 $poitem = DB_DataObject::factory('poitem');
123 $poitem->setFrom(array(
124 'poitem_status' => $pohead->pohead_status,
125 'poitem_pohead_id' => $pohead->pid(),
126 'poitem_linenumber' => $max_num + ($i + 1),
127 'poitem_duedate' => date('Y-m-d',strtotime($row['DUE DATE'])),
128 'poitem_itemsite_id' => $itemsite->pid(),
129 'poitem_qty_ordered' => $row['ORDERED'],
130 'poitem_unitprice' => $row['UNIT PRICE'],
131 'poitem_itemsrc_id' => $itemsrc->pid()
134 foreach($poitem->defaults() as $k => $v){
135 if (!isset($poitem->$k)) {
143 $this->jerr('error occur on insert poitem ' . $row['ITEM CODE']);