Skip to content

Commit

Permalink
#173 [Address] fix: handle migration and last details
Browse files Browse the repository at this point in the history
  • Loading branch information
evarisk-micka committed Aug 21, 2024
1 parent 7162f0c commit dd0c731
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 93 deletions.
9 changes: 5 additions & 4 deletions class/actions_easycrm.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -347,10 +347,11 @@ public function printCommonFooter(array $parameters): int

$contact = new Contact($db);
$contact->fetch($object->array_options['options_projectaddress']);
$address = $contact->getNomUrl(1);
$outAddress = '<td>' . $address . ' ';
if ($user->hasRight('projet','write')) {
$outAddress .= dolButtonToOpenUrlInDialogPopup('addAddress' . $object->id, $langs->transnoentities('AddAnAddress'), '<span class="fa fa-plus-circle valignmiddle paddingleft" title="' . $langs->trans('AddAnAddress') . '"></span>', '/custom/easycrm/view/address_card.php?from_id='. $object->id .'&from_type=project');
$address = img_picto('contact', 'contact') . ' ' . $contact->lastname;

$outAddress = '<td>';
if ($contact->id > 0) {
$outAddress .= dolButtonToOpenUrlInDialogPopup('address' . $object->id, $langs->transnoentities('FavoriteAddress'), $address, '/contact/card.php?id='. $contact->id);
}
$outAddress .= '</td></tr>';
?>
Expand Down
69 changes: 1 addition & 68 deletions class/address.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -426,72 +426,5 @@ public function LibStatut(int $status, int $mode = 0): string

return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status], '', $statusType, $mode);
}

/**
* Fetch addresses in database with parent ID
*
* @param int $element_id ID of object linked
* @param string $element_type Type of object
* @param string $morefilter Filter
* @return array|integer
* @throws Exception
*/
public function fetchAddresses(int $element_id, string $element_type, string $morefilter = '1 = 1')
{
$filter = ['customsql' => 'element_id=' . $element_id . ' AND ' . $morefilter . ' AND element_type="' . $element_type . '"' . ' AND status >= 0'];
return parent::fetchAll('', '', 0, 0, $filter);
}

/**
* Convert longitude and latitude format WGS 84 (EPSG:4326) to Web Mercator (EPSG:3857)
*
* @return object
*/
public function convertCoordinates()
{
$convertFactor = 6378137.0;
$longitude = $this->longitude / 180 * pi();
$latitude = $this->latitude / 180 * pi();
$this->longitude = $convertFactor * $longitude;
$this->latitude = $convertFactor * log(tan(pi() / 4 + $latitude / 2));

return $this;
}

/**
* Inject map features
*
* @param array $features array of features: id, description, color, longitude, latitude
* @param int $chunkSize size of chunk
* @param int $deep
* @return int
*/
public function injectMapFeatures(array $features, int $chunkSize, int $deep = 0): int
{
$error = 0;

if (!empty($features)) {
$bulkFeatures = array_chunk($features, $chunkSize);
foreach ($bulkFeatures as $bulk) {
$encodedBulk = json_encode($bulk);
if (!empty($encodedBulk)) {
print "geojsonMarkers.features = $.merge(geojsonMarkers.features, $encodedBulk);\n";
} else {
if ($chunkSize > 1) {
$result = $this->injectMapFeatures($bulk, floor($chunkSize / 2), $deep + 1);
$result < 0 ? $error++ : '';
} else {
ob_start();
print_r($bulk);
$content = ob_get_contents();
ob_clean();
print "console.error('Map: Error encode json map feature, data:', '" . dol_escape_js($content, 1) . "');\n";
$error++;
}
}
}
}

return $error > 0 ? -1 : 0;
}
}

31 changes: 31 additions & 0 deletions core/modules/modEasyCRM.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -581,6 +581,37 @@ public function init($options = ''): int

dolibarr_set_const($this->db, 'EASYCRM_ACTIONCOMM_COMMERCIAL_RELAUNCH_TAG', $categoryID, 'integer', 0, '', $conf->entity);
}
if (empty(getDolGlobalInt('EASYCRM_ADDRESS_MIGRATION'))) {
require_once DOL_DOCUMENT_ROOT . '/contact/class/contact.class.php';
require_once __DIR__ . '/../../class/geolocation.class.php';
require_once __DIR__ . '/../../class/address.class.php';

$contact = new Contact($this->db);
$address = new Address($this->db);
$geolocation = new Geolocation($this->db);

$addresses = $address->fetchAll('', '', 0, 0, ['customsql' => ' status > 0 AND latitude > 0 AND longitude > 0']);

if (is_array($addresses) && !empty($addresses)) {
foreach ($addresses as $address) {
$contact->lastname = $address->name;
$contact->address = $address->address;
$contact->fk_project = $address->element_id;
$contact->fk_pays = $address->fk_country;
$contact->zip = $address->zip;
$contact->town = $address->town;
$addressID = $contact->create($user);

$geolocation->element_type = 'contact';
$geolocation->latitude = $address->latitude;
$geolocation->longitude = $address->longitude;
$geolocation->fk_element = $addressID;
$geolocation->create($user);
}
}

dolibarr_set_const($this->db, 'EASYCRM_ADDRESS_MIGRATION', 1, 'integer', 0, '', $conf->entity);
}

// Permissions
$this->remove($options);
Expand Down
31 changes: 14 additions & 17 deletions core/triggers/interface_99_modEasycrm_EasycrmTriggers.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -112,28 +112,25 @@ public function runTrigger($action, $object, User $user, Translate $langs, Conf
set_notation_object_contact($object);
break;
case 'PROJECT_ADD_CONTACT':
$contacts = $object->liste_contact();
require_once __DIR__ . '/../../class/geolocation.class.php';

if (is_array($contacts) && !empty($contacts)) {
$lastContact = end($contacts);
if ($lastContact['code'] == 'PROJECTADDRESS') {
$contact = new Contact($this->db);
$contact->fetch($lastContact['id']);
$contactID = GETPOST('contactid');
$contact = new Contact($this->db);
$contact->fetch($contactID);

$geolocation = new Geolocation($this->db);
$data = $geolocation->getDataFromOSM($contact);
if (dol_strlen($contact->address) > 0) {
$geolocation = new Geolocation($this->db);
$data = $geolocation->getDataFromOSM($contact);

if (is_array($data) && !empty($data)) {
$address = $data[0];
if (is_array($data) && !empty($data)) {
$address = $data[0];

$geolocation->element_type = 'contact';
$geolocation->latitude = $address->lat;
$geolocation->longitude = $address->lon;
$geolocation->fk_element = $lastContact['id'];
$geolocation->create($user);
}
$geolocation->element_type = 'contact';
$geolocation->latitude = $address->lat;
$geolocation->longitude = $address->lon;
$geolocation->fk_element = $contactID;
$geolocation->create($user);
}

}
break;
case 'FACTURE_ADD_CONTACT' :
Expand Down
7 changes: 3 additions & 4 deletions view/address_card.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@
require_once __DIR__ . '/../../saturne/lib/object.lib.php';

// Load EasyCRM librairies
require_once __DIR__ . '/../class/address.class.php';
require_once __DIR__ . '/../class/geolocation.class.php';

// Global variables definitions
Expand All @@ -50,7 +49,7 @@

// Get create parameters
$addressName = GETPOST('name');
$addressAddress = GETPOST('addressDetail');
$addressAddress = GETPOST('address_detail');

// Get parameters
$fromId = GETPOST('from_id', 'int');
Expand Down Expand Up @@ -221,7 +220,7 @@

// Address -- Adresse
print '<tr><td class="fieldrequired">' . $langs->trans('Address') . '</td><td>';
$doleditor = new DolEditor('addressDetail', GETPOST('description'), '', 90, 'dolibarr_details', '', false, true, 0, ROWS_3, '50%');
$doleditor = new DolEditor('address_detail', GETPOST('description'), '', 90, 'dolibarr_details', '', false, true, 0, ROWS_3, '50%');
$doleditor->Create();
print '</td></tr>';

Expand Down Expand Up @@ -257,7 +256,7 @@

// Address -- Adresse
print '<tr><td class="fieldrequired">' . $langs->trans('Address') . '</td><td>';
$doleditor = new DolEditor('addressDetail', $contact->address, '', 90, 'dolibarr_details', '', false, true, 0, ROWS_3, '50%');
$doleditor = new DolEditor('address_detail', $contact->address, '', 90, 'dolibarr_details', '', false, true, 0, ROWS_3, '50%');
$doleditor->Create();
print '</td></tr>';

Expand Down

0 comments on commit dd0c731

Please sign in to comment.