5 *Import accounts xls - based on accnt.export.sql from the metasql directory.
9 require_once 'Pman/Roo.php';
11 class Pman_Xtuple_Import_Accounts extends Pman_Roo
13 static $cli_opts = array();
15 * get .. same as roo...
21 if (HTML_FlexyFramework::get()->cli) {
24 return parent::getAuth();
28 function get($tab, $opts = [])
30 PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array($this, 'onPearError'));
31 //$this->jerr("INVALID");
32 //DB_DataObject::DebugLevel(1);
33 require_once 'File/Convert.php';
34 $cp = $this->tempName('xls');
35 copy(dirname(__FILE__).'/../Setup/accounts_sample.xls', $cp);
36 $fc = new File_Convert($cp, 'application/vnd.ms-excel');
37 //var_Dump($img->getStoreName());
38 $csv = $fc->convert('text/csv');
41 $this->importCsv($csv);
48 $this->sessionState(0); // turn off the session..
49 PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array($this, 'onPearError'));
51 if (empty($_FILES['imageUpload'])) {
52 $this->jerr("no file?!");
55 $img = DB_DataObject::Factory('images');
60 $img->onUpload(false);
62 require_once 'File/Convert.php';
63 $fc = new File_Convert($img->getStoreName(), $img->mimetype );
64 //var_Dump($img->getStoreName());
65 $csv = $fc->convert('text/csv');
67 //var_dump($csv);exit;
68 $this->importCsv($csv);
71 function importCsv($csv)
74 ini_set("auto_detect_line_endings", true);
96 "bankaccnt_accntnumber"
99 $fh = fopen($csv,'r');
100 // we need to break this into cols..
103 while(false !== ($n = fgetcsv($fh,10000, ',', '"'))) {
110 $cols[] = 'accnt_' .strtolower(trim(str_replace(' ', '_', $k)));
116 foreach($req as $r) {
118 if (!in_array('accnt_' .$r,$cols)) {
131 foreach($cols as $i=>$k) {
139 $this->jerr("could not find a column named $missing");
149 foreach($rows as $r) {
150 // do we have an account..
151 $acc = DB_DAtaObject::Factory('accnt');
153 $r['accnt_curr_id'] = DB_DAtaObject::Factory('curr_symbol')->lookup('curr_name', $r['accnt_currency'])->curr_id;
155 if (!$acc->get('accnt_number', $r['accnt_number'])) {
157 $acc->setFrom($acc->defaults());
160 $sa = DB_DAtaObject::factory('subaccnt');
161 if (!$sa->get('subaccnt_number', $r['accnt_sub'])) {
163 'subaccnt_number', $r['accnt_sub'],
164 'subaccnt_descrip', "Sub Account " . $r['accnt_sub']
171 $sa = DB_DAtaObject::factory('prftcntr');
172 if (!$sa->get('prftcntr_number', $r['accnt_profit'])) {
174 'prftcntr_number', $r['accnt_profit'],
175 'prftcntr_descrip', "Profit Center " . $r['accnt_profit']
185 $r['accnt_name'] = implode('-', array(
196 if (!empty($r['accnt_bankaccnt_type'])) {
198 $ba = DB_DataObject::factory('bankaccnt');
199 if (!$ba->get('bankaccnt_accnt_id', $acc->pid())) {
200 $ba->setFrom($ba->defaults());
202 'bankaccnt_name' => $acc->accnt_descrip,
203 'bankaccnt_descrip' => $acc->accnt_descrip,
204 'bankaccnt_bankname' => 'BANK NAME',
205 'bankaccnt_accntnumber' => $r['accnt_bankaccnt_accntnumber'],
206 'bankaccnt_ar' => true,
207 'bankaccnt_ap' => true,
208 'bankaccnt_nextchknum' => 5000,
209 'bankaccnt_type' => $r['accnt_bankaccnt_type'],
210 'bankaccnt_accnt_id' => $acc->pid(),
211 'bankaccnt_curr_id' => $r['accnt_curr_id'],
212 'bankaccnt_notes' => '',
213 'bankaccnt_routing' => '',
214 'bankaccnt_ach_enabled' => false,
215 'bankaccnt_ach_origintype' => 'I'
229 if (strlen($r['accnt_'. $col.'_account'])) {
230 $accnts[$col][$r['accnt_'. $col.'_account']] = $acc->pid();
233 if (strlen($r['accnt_tax_account'])) {
234 $t = DB_DataObject::Factory('tax');
235 if (!$t->get('tax_code',$r['accnt_tax_account'] )) {
236 $t->setFrom($t->default());
237 $t->tax_code = $r['accnt_tax_account'];
238 $t->tax_descrip = $r['accnt_tax_account_name'];
239 $t->tax_sales_accnt_id = $acc->pid();
243 if (!empty($r['yearend_account']) && strlen($r['yearend_account'])) {
244 $t = DB_DataObject::Factory('metric');
245 $t->query("select setmetric('YearEndEquityAccount', {$acc->pid()}::text)");
248 if (!empty($r['warehouse_account']) && strlen($r['warehouse_account'])) {
249 $t = DB_DataObject::Factory('whsinfo');
250 $t->query("UPDATE whsinfo set warehous_default_accnt_id= {$acc->pid()}");
258 foreach($accnts as $type => $vals) {
259 $tbl = $type . ($type=='cost' ? 'cat' : 'accnt');
260 $d = DB_DataObject::factory($tbl);
264 $d->get('costcat_code','CATEGORY1');
268 $d->araccnt_custtype_id = -1;
269 $d->araccnt_custtype = '.*';
275 $d->apaccnt_vendtype_id = -1;
276 $d->apaccnt_vendtype = '.*';
283 'salesaccnt_custtype_id'=> -1,
284 'salesaccnt_prodcat_id'=>-1,
285 'salesaccnt_warehous_id'=>-1,
286 'salesaccnt_custtype'=>'.*',
287 'salesaccnt_prodcat'=>'.*',
293 foreach($vals as $v=>$id) {
295 //echo $tbl.'_'.$v .'_accnt_id = ' . $id ."\n";
296 $d->{$tbl.'_'.$v .'_accnt_id'} = $id;
298 if (!empty($d->{$tbl . '_id'})) {