Fix #7123 - getting abra ready to test
[Pman.Xtuple] / Import / ShopVendors.php
1 <?php
2
3 require_once 'Pman/Roo.php';
4
5 class Pman_Xtuple_Import_ShopVendors 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             'TYPE','CODE', 'DISTRICT1_CHI', 'DISTRICT1_ENG', 
47             'DISTRICT2_CHI', 'DISTRICT2_ENG', 'CHI ADDRESS', 'ENG ADDRESS', 
48         );
49         
50         $cols = false;
51         $rows = array();
52         
53         while(false !== ($n = fgetcsv($fh,10000, ',', '"'))) {
54             if (!$cols) {
55                 
56                 $cols = array();
57                 foreach($n as $k) {
58                     $cols[] = strtoupper(trim($k));
59                 }
60                 if (empty($cols)) {
61                     continue;
62                 }
63                 foreach($req as $r) {
64                     if (!in_array($r,$cols)) {
65                         $cols = false;
66                         break;
67                     }
68                 }
69                 continue;
70             }
71             foreach($cols as $i=>$k) {
72                 $row[$k] = trim($n[$i]);
73             }
74             $rows[] = $row;
75         }
76         
77         if (empty($cols)) {
78             $this->jerr("could not find a row with " . implode(' / ', $req));
79         }
80         
81         fclose($fh);
82         
83         $errors = array();
84         $count = 0;
85         
86         foreach($rows as $row){
87             
88             $vendinfo = DB_DataObject::factory('vendinfo');
89             
90             if(!$vendinfo->get('vend_name', $row['TYPE'])){
91                 
92                 $vendinfo = DB_DataObject::factory('vendinfo');
93                 $vendinfo->setFrom(array(
94                     'vend_name' => $row['TYPE'],
95                     'vend_number' => preg_replace('/[^a-z0-9]/i', '', $row['TYPE']),
96                     'vend_vendtype_id' => $vendinfo->sqlValue("getvendtypeid('PICKUPS'::text)")
97                 ));
98                 foreach ($vendinfo->defaults() as $k => $v){
99                     if(!isset($vendinfo->$k)){
100                         $vendinfo->$k = $v;
101                     }
102                 }
103                 
104                 $vendinfo->insert();
105                 
106             }
107             
108             $vendaddrinfo = DB_DataObject::factory('vendaddrinfo');
109             if($vendaddrinfo->get('vendaddr_code', $row['CODE'])){
110                 continue;
111             }
112             
113             $addr = DB_DataObject::factory('addr');
114             $addr->setFrom(array(
115                 'addr_active' => true,
116                 'addr_city' => $row['DISTRICT2_ENG'],
117                 'addr_line1' => $row['ENG ADDRESS'],
118                 'addr_line2' => $row['CHI ADDRESS'],
119             ));
120             $addr->genNumber();
121             $addr->insert();
122             
123             if(!$addr->addr_id){
124                 $errors[] = $row['CODE'];
125                 continue;
126             }
127             
128             $vendaddrinfo = DB_DataObject::factory('vendaddrinfo');
129             $vendaddrinfo->setFrom(array(
130                 'vendaddr_vend_id' => $vendinfo->pid(),
131                 'vendaddr_code' => $row['CODE'],
132                 'vendaddr_name' => $row['CODE'],
133                 'vendaddr_addr_id' => $addr->pid(),
134                 'vendaddr_taxzone_id' => $vendinfo->vend_taxzone_id
135             ));
136             
137             $vendaddrinfo->insert();
138             
139             if(!$vendaddrinfo->vendaddr_id){
140                 $errors[] = $row['CODE'];
141             }
142             
143             $count++;
144             
145         }
146         
147         if(!empty($errors)){
148             $this->jerr("Below code got error : \n" . implode("\n", $errors));
149         }
150         
151         $this->jok('data imported successfully! total : ' . $count);
152     }
153 }