Fix #7123 - getting abra ready to test
[Pman.Xtuple] / Import / Vendors.php
1 <?php
2
3 require_once 'Pman/Roo.php';
4
5 class Pman_Xtuple_Import_Vendors 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('vendinfo');
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         $this->importCsv($csv);
34     }
35     
36     function importCsv($csv)
37     {
38         ini_set("auto_detect_line_endings", true);
39         
40         $fh = fopen($csv, 'r');
41         if (!$fh) {
42             $this->jerr("invalid file");
43         }
44         
45         $req = array(
46             'ACTIVE STATUS', 'SUPPLIER', 'BALANCE', 'BALANCE TOTAL', 'COMPANY', 'MR, MRS',
47             'FIRST NAME', 'M.I.', 'LAST NAME', 'ADDRESS 1', 'ADDRESS 2', 'ADDRESS 3', 'ADDRESS 4',
48             'ADDRESS 5', 'CONTACT', 'PHONE', 'FAX', 'ALT. PHONE', 'ALT. CONTACT', 'EMAIL', 'PRINT ON CHEQUE AS',
49             'ACCOUNT NO.', 'SUPPLIER TYPE', 'TERMS', 'CREDIT LIMIT', 'TAX ID', 'NOTE'
50         );
51         
52         $cols = false;
53         $rows = array();
54         
55         while(false !== ($n = fgetcsv($fh,10000, ',', '"'))) {
56             if (!$cols) {
57                 
58                 $cols = array();
59                 foreach($n as $k) {
60                     $cols[] = strtoupper(trim($k));
61                 }
62                // print_r($cols);exit;
63                 if (empty($cols)) {
64                     continue;
65                 }
66                 foreach($req as $r) {
67                     if (!in_array($r,$cols)) {
68                         $cols = false;
69                         break;
70                     }
71                 }
72                 continue;
73             }
74             foreach($cols as $i=>$k) {
75                 $row[$k] = $n[$i];
76             }
77             $rows[] = $row;
78         }
79         
80         if (empty($cols)) {
81             $this->jerr("could not find a row with " . implode(' / ', $req));
82         }
83         
84         fclose($fh);
85         $tz = DB_DataObject::Factory('taxzone');
86         $tz->whereAdd("taxzone_code != 'NO TAX'");
87         if (!$tz->find(true)) {
88             $this->jerr("could not find tax zone for taxable");
89         }
90         
91         foreach ($rows as $row){
92             if(empty($row['SUPPLIER'])){
93                 continue;
94             }
95             $vend = DB_DataObject::factory('vendinfo');
96             if($vend->get('vend_name',$row['SUPPLIER'])){
97                 continue;
98             }
99             $vend->setFrom(array(
100                 'vend_name'         => $row['SUPPLIER'],
101                 'vend_active'       => $row['ACTIVE STATUS'] == 'Active' ? TRUE : FALSE,
102                 'vend_comments'     => $row['NOTE'],
103                 'vend_number'       => preg_replace('/[^a-z0-9]/i', '', strtoupper($row['SUPPLIER'])),
104                 'vend_terms_id'     => $this->terms($row['TERMS']),
105                 'vend_taxzone_id'   => $tz->pid(),
106                 'vend_vendtype_id'  => $vend->sqlValue("getvendtypeid('NORMAL'::text)"), // default set to NORMAL
107                 'vend_accnt_id'     => -1
108 //                'vend_addr_id'      => ''
109             ));
110             $vend->insert();
111             
112             if(!$vend->pid()){
113                 $this->jerr("error occur on insert vendor " . $row['SUPPLIER']);
114             }
115         }
116         
117         $this->jok("DONE");
118         
119         
120         exit;
121     }
122     
123     function terms($terms_code)
124     {
125         $terms = DB_DataObject::factory('terms');
126         if(!$terms->get('terms_code', $terms_code)){
127             $terms->get('terms_code', 'C.O.D.');
128         }
129         return $terms->pid();
130     }
131 }