From 60f0461f79cbf29e53fd4efef35a76bcfa375ec1 Mon Sep 17 00:00:00 2001 From: Frank Schubert Date: Thu, 4 Jan 2024 20:35:42 +0100 Subject: [PATCH] Added address-no-fibunum import script --- application/Address/Address.php | 29 ++++- scripts/import-addresses-no-fibu-num.php | 157 +++++++++++++++++++++++ 2 files changed, 184 insertions(+), 2 deletions(-) create mode 100644 scripts/import-addresses-no-fibu-num.php diff --git a/application/Address/Address.php b/application/Address/Address.php index f5bfa2e65..e77129074 100644 --- a/application/Address/Address.php +++ b/application/Address/Address.php @@ -2,7 +2,7 @@ class Address extends mfBaseModel { protected $forcestr = ['street','company','zip','phone','fax','mobile','note']; - private $in_after_save = false; + private $in_after_save = 0; private $parent; private $childaddresses; @@ -19,10 +19,13 @@ class Address extends mfBaseModel { protected function afterSave() { // prevent potential infinite loop if($this->in_after_save) return true; - $this->in_after_save = true; + $this->in_after_save++; $this->generateFibuAccountNumber(); $this->syncToFibuMerge(); + + $this->in_after_save--; + } private function generateFibuAccountNumber() { @@ -40,11 +43,31 @@ class Address extends mfBaseModel { $this->save(); } + public function getNewCustomerNumber() { + $last_num = AddressModel::getLastCustomerNumber(); + $this->log->debug("last_num: $last_num"); + if($last_num) { + $new_num = $last_num + 1; + } else { + $new_num = TT_FIRST_CUSTNUM; + } + + if(!AddressModel::search(['customer_number' => $new_num])) { + $this->customer_number = $new_num; + return $this->customer_number; + } + + return false; + } + private function syncToFibuMerge() { if(!$this->customer_number) return true; //var_dump($this);exit; + $me = new User(); + $me->loadMe(); + if($this->fibu_account_number) { $fibumerge = XinonFibuMergeModel::getFirst(["old_custnum" => $this->customer_number]); if(!$fibumerge) { @@ -57,6 +80,8 @@ class Address extends mfBaseModel { "strasse" => $this->street, "plz" => $this->zip, "ort" => $this->city, + "create_by" => $me->id, + "edit_by" => $me->id ]); $fibumerge->save(); return true; diff --git a/scripts/import-addresses-no-fibu-num.php b/scripts/import-addresses-no-fibu-num.php new file mode 100644 index 000000000..44b5ff754 --- /dev/null +++ b/scripts/import-addresses-no-fibu-num.php @@ -0,0 +1,157 @@ +#!/usr/bin/php +id); +define("INTERNAL_USER_USERNAME", $me->username); + +$folder = __DIR__."/import/"; +$csvname = "kunden_ohne_fibunr.csv"; +$filename = $folder.$csvname; + +$name_to_id = [ + "Autohaus Lang GmbH" => 1493, + "Camyno GmbH" => 6925, + "Dr. Smetan Martin" => 715, + "EDGBL Ltd." => 6645, + "List Sascha" => 5467, + "Technopark Raaba Holding GmbH" => 4755 +]; + +$db = FronkDB::singleton(); +$log = mfLoghandler::singleton(); + +$input = fopen($filename, "r"); + +$header_line = ""; + +$l = 0; +$c = 0; +while($csv = fgetcsv($input, 0, ";")) { + $l++; + if($l == 1) { + $header_line = $csv; + continue; + } + + if(!trim($csv[3])) { + continue; + } + + //var_dump($csv);exit; + + $customer_number = trim($csv[0]); + $supplier_number = trim($csv[2]); + $company = trim($csv[3]); + $street = trim($csv[4]); + $zip = trim($csv[5]); + $city = trim($csv[6]); + $country = trim($csv[7]); + + if(!$company) continue; + $address = false; + + if(!$customer_number) $customer_number = null; + + if(array_key_exists($company, $name_to_id)) { + $address = new Address($name_to_id[$company]); + } + + if(!$address) { + if($customer_number) { + $address = AddressModel::getFirst(["customer_number" => $customer_number]); + if(!$address) { + echo "customer number not found $company - $customer_number: to create\n"; + + $address = AddressModel::create([ + 'customer_number' => $customer_number, + 'company' => $company, + 'street' => $street, + 'zip' => $zip, + 'city' => $city, + 'country' => $country, + 'firstname' => '', + 'lastname' => '', + 'phone' => '', + 'fax' => '', + 'mobile' => '', + 'email' => '', + 'note' => '', + 'create_by' => $me->id, + 'edit_by' => $me->id + ]); + + if(!$address->save()) { + die("Cannot save $company $fibu_supplier_number\n"); + } + } + } else { + $address = AddressModel::getFirst([ + "company" => $company, + "street" => $street, + "zip" => $zip + ]); + if(!$address) { + echo "Adresse nicht gefunden $company, $street, $zip\n"; + } + } + } + + if($address && !$address->customer_number) { + $address->customer_number = $customer_number; + } + + if(!$address || ($address->customer_number && $customer_number && $address->customer_number != $customer_number)) { + echo "creating new ($company, $customer_number)\n"; + $address = AddressModel::create([ + 'customer_number' => $customer_number, + 'company' => $company, + 'street' => $street, + 'zip' => $zip, + 'city' => $city, + 'country' => $country, + 'firstname' => '', + 'lastname' => '', + 'phone' => '', + 'fax' => '', + 'mobile' => '', + 'email' => '', + 'note' => '', + 'create_by' => $me->id, + 'edit_by' => $me->id + ]); + if(!$address->save()) { + die("Cannot save $company $fibu_supplier_number\n"); + } + } + + $address->save(); + + if(!$address->customer_number) { + $address->getNewCustomerNumber(); + //echo "==================\nbefore customerNum save:\n"; + //var_dump($address); + $address->save(); + //echo "==================\nafter customerNum save:\n"; + //var_dump($address);exit; + } + + $csv_out[] = $address->fibu_account_number.";".implode(";", $csv); + +} + +$out = "fibu_account_number;".implode(";",$header_line)."\n"; +$out .= implode("\n",$csv_out); + +echo $out."\n"; +