db = $db; $this->erp = $erp; } /** * @param DatanormVTypeData $supplierData * * @return int */ public function insertSupplierIfNotExists(DatanormVTypeData $supplierData): int { $supplierName = trim( $supplierData->getAdress1() . ' ' . $supplierData->getAdress2() . ' ' . $supplierData->getAdress3() ); if (empty($supplierName)) { $supplierName = $supplierData->getDescription(); } $supplierId = $this->findAdressByName($supplierName); if (empty($supplierId)) { $sql = 'INSERT INTO `adresse` (`typ`,`name`,`ort`,`strasse`,`plz`,`land`,`sonstiges`,`lieferantennummer`) VALUES (:type, :name , :city, :street, :zip, :country, :miscellaneous, :supplier_number) '; $this->db->perform( $sql, [ 'type' => 'firma', 'name' => $supplierName, 'city' => $supplierData->getCity(), 'street' => $supplierData->getStreet(), 'zip' => $supplierData->getZip(), 'country' => $this->mapCountryId($supplierData->getCountryId()), 'miscellaneous' => $supplierData->getProducerToken(), 'supplier_number' => $this->erp->GetNextLieferantennummer(), 'sonstiges' => $supplierData->getDescription(), ] ); $supplierId = $this->db->lastInsertId(); } return $supplierId; } /** * @param string $name * * @return int */ private function findAdressByName(string $name) { $select = $this->db->select() ->cols(['id']) ->from('adresse') ->where('name=?', $name) ->limit(1); $result = $this->db->fetchCol( $select->getStatement(), $select->getBindValues() ); if (!empty($result)) { return $result[0]; } return 0; } /** * TODO Need more examples * * @param string $countryId * * @return string */ private function mapCountryId(string $countryId) { $mapping = [ 'D' => 'DE', ]; if (array_key_exists($countryId, $mapping)) { return $mapping[$countryId]; } return $countryId; } }