Module Pointage Doli, quelqu'un peut en parler??

Bonjour,

Je vais à la vitesse d’un escargot mais j’ai trouvé un ZKteco pour pas cher alors j’avance un peu (connexion avec la pointeuse OK)

J’ai une question, en jouant avec la machine, je me suis rendu compte que pour la configuration des empreintes ça risque d’être pénible via dolibarr, de plus les sociétés auront sans doutes des pointeuses déjà en place donc la question du lien entre le ZKUser et DoliUser se pose. Je pensais faire un liens lors du téléchargement des ZKUser depuis les pointeuses en comparant le ‹ name › avec ref_int OU login OU email des utilisateurs dolibarr, qu’en pensez vous ?

Un autre point me gène, dans les ZKteco il n’y a pas de in/out (contrairement au TimeMoto de ScanSafe) , il y a juste des events; donc si je n’ajoute pas de notion de shift pour les utilisateurs (je n’ai pas courage de me lancer dans la création d’un tel monstre), je ne peux que prendre les events par pairs qui font une durée comprise entre le min et le max d’un pointage ci que ne manquera pas de créer des erreurs. Avez vous des idées pour minimiser ces erreurs ?

note: pour la table temporaire, je suis pas sur de comprendre mais je vais y réfléchir

bien à vous

Bonjour,

Travailler sur ce module pendant le confinement semble un peu décalé, mais j’aimerais le finir pour savoir si ça vaut le coup de continuer (est-ce qu’il y aura des utilisateurs ?)

Je suis en mesure de télécharger les utilisateurs d’une pointeuse ZKTECO (F18), je les lie avec un utilisateur dolibarr. (le chargement des utilisateurs depuis dolibarr vers les pointeuses sera fait dans un second temps si le module est utilisé)

Je vais maintenant mettre en place de chargement des pointages, mon soucis était que ZKTeco ne dit pas si c’est une entrée ou une sortie, ce qui dans le cas d’un pointage manqué peut mettre le bazar pour la génération des temps de présence (en mettant les pauses comme temps travaillé, etc.) voici comment je compte éviter la plupart des erreurs:

Le traitement se fera par journée, une journée sera défini par trois critères :

  • Durée maximale entre le premier pointage et le dernier (défaut à 13h)

  • Durée maximale entre 00:00 (jour du premier pointage) et le dernier pointage (ça sera plus des 24 si l’entreprise fait les trois 8, défaut à 22h30)

  • Temps de repos minimal entre deux journées pour un travailleur (défaut à 11h )

Dans une Journée, il devrait y avoir un nombre pair de pointages, si ce n’est pas le cas le système vérifia s’il n’y a pas un pointage en double, c.-à-d. deux pointages trop proches (défaut <15min) s’il n y a pas de doublons et un nombre impair de pointages alors tous les pointages de cette journée seront mis en « erreur » sinon des temps de présence seront générés sur base de pair de pointage entrée-sortie.

@wdammak, @HubZ, @adeoexpo, @alientouch, @Gerard30 Pensez-vous que ça sera assez robuste ?

Bien à vous,

Hello !

Cela semble assez robuste ! Surtout si c’est paramétrable.

J’ai acheté une « merde » de chez TimeMoto et le double pointage ou l’oubli de pointage met un carnage dans leur logiciel tout pourri, pas assez paramétrable… on l’a utilisée 2 mois, là, elle gît froidement…

Si tu veux des exemples de paramétrages de chez TimeMoto, ou un test en live :wink:

Excusez moi pour ce retard de réponse!

1/ La liaison entre users doit à mon avis se fait avec un lien(extrafields?) de cette façon : id_machine+id_user_zkteco<->id_user_dolibarr cela est plus flexible avec plus de possibilité/mobilité(le cas d’un employé qui travaille dans différents locaux…)

2/ Pour check IN/OUT c’est justement, il faut Shift Timetable (Check-In Start Time/ End Time, Check-Out Start Time/ End Time). Personnellement, j’ai opté exactement comme votre approche ci-dessus! Pour check-in je prend min(checking) avant midi… (min/max pour éviter les doublons et trouver premier entrée et dernière sortie) … Bon, autrement vous ajoutez 4 extrafields au niveau utilisateur dolibarr (checkin1, checkout1, checkin2, checkout2) et chercher la correspondance avec une telle tolérance (± 1 heure)…
Sinon, cela peut être gérer via une Shift Timetable dans dolibarr crée via votre module.
Pour mon cas, j’ai évolué aux accès digitaux et badges (pareil avec des terminaux ZKTeco et c’est le même principe/soft) un de l’extérieur pour ouvrir et un de l’intérieur pour sortir c’est plus facile à gérer (id_machin_in, id_machine_out…) mais pour le moment laissez ce cas à coté :slight_smile:

3/ Pour la table temporaire viendra le moment(une fois vous passez à l’étape de synchronisation) que vous procédez exactement comme je l’ai fait :slight_smile:

Bravo et bon courage! Continuez svp, cela est vraiment intéressant! et il y aura beaucoup d’autres voies/opportunités (par exemple lier la paie/comptabilité avec la présence et le nombre d’heure!..)

@wdammak,

  1. pour la liaison j’ai fais une table utilisateurs ZKTECO qui contient aussi les empreintes, #rfid etc… ça permet de géré plusieurs type de machine et ça donne plus de flexibilité pour l’ajout de personnes via les pointeuses + une table de mappage utilisateurs ZKTECO et pointeuses afin qu’il soit possible de pousser le même utilisateur sur des pointeuses différentes mais pas forcement pour toutes les pointeuses car ces machines peuvent aussi servir de contrôle d’accès. (je vais peut être ajouter un paramètre à la table des pointeuses pour dire si ce sont des pointeuse ou des simple contrôle d’accès).

  2. je ne veux surtout pas mettre de notion de shift pour l’instant parce que c’est un gros dev si on veut le faire bien car ça amène la notion de groupe / calendrier / type de journées / type d’absence … , si je le fais un jours ce sera en m’inspirant de TeamCal Neo. Pour les pointeuses in/out je vais réfléchir comment je peux les gérer car j’aime beaucoup l’idée (simple et efficace).

  3. j’y suis déjà car il fallait que je puisse gérer les utilisateurs ZKteco sans liens avec un utilisateurs dolibarr mais je ne la viderai pas afin d’avoir une possibilité d’audit.

Merci encore pour vos commentaires.

Bien à vous

1 « J'aime »

Bonsoir,

Je pense avoir un truc à peut près fonctionnel

voici les étapes:

  • crée la pointeuse (dans HR/attendanceSystem) avec une tâche (projet, client … ne sont pas pris en compte)
  • depuis la carte de la pointeuse, charger les utilisateurs
  • depuis la liste des utilisateur, vérifier le lien avec un utilisateur dolibarr
  • depuis la carte de la pointeuse, charger les evenements
  • depuis la liste des events, générer les tasktime

bien à vous

1 « J'aime »

BRAVO! ça l’air très bien!

1 « J'aime »

Bonjour,

Est ce que quelqu’un a eu l’opportunité de tester avec des vrais données (copie de prod …) ?
Si oui, quelle seraient les modifs les plus importante/urgente ?

bien à vous

Oui moi! je viens d’installer le module et la connexion ne fonctionne pas! (pourtant sur la même machine avec un autre programme la connexion avec la machine se passe bien!)
Je n’ai pas compris le champ Zone?
Ni le mode (=1 par défaut)
Je me connecte que avec l’ip et le port sur mon programme (je n’ai pas de password)

@wdammak est-ce que le module PHP « sockets » est installé sur cette machine ?

Il faut que j’ajoute un msg d’erreur s’il n’est pas activé

bien à toi

Je vais vérifier début semaine quand je serais de passage à l’usine…
En effet, il y a quelques traductions manquantes lors de configuration
Aussi il n’y a pas un lien dans le tableau des machine pour aller à l’édit directement…
Zone c’est département de Zkteco?
Merci c’est déjà un grand pas!

le module PHP « sockets » est installé et activé
La connexion ne passe pas!

Bonjour, comment est configuré l’IP de la pointeuse ? Quelle est le modèle et version de la pointeuse ?

Bonjour,
UA100 version 6 du sdk
L’ip 155.100.100.201/255.255.0.0
Le Port: 4370

            return false; // return error is
            dol_syslog(__METHOD__." Was not able to connect to  ".$this->ip, LOG_ERR);

A corriger le return après le log dans cette fonction

public function testConnection(){
if(preg_match(« /^(\d{1,3}.){3}\d{1,3}/ », $this->ip)){
$zkteco = new ZKLibrary($this->ip, $this->port);
if (is_numeric($zkteco->ping()) && $zkteco->connect() ){
dol_syslog(METHOD." Connected to « .$this->ip, LOG_DEBUG);
$zkteco->disconnect();
return true;
} else
{
return false; // return error is
dol_syslog(METHOD. » Was not able to connect to « .$this->ip, LOG_ERR);
}
}else
{
dol_syslog(METHOD. » the IP « .$this->ip. » is not correct", LOG_ERR);
return false; // return error if the IP is not set

    }
}

Peut on tester avec zkemkeeper.dll

com_load_typelib(« zkemkeeper.CZKEMClass »);
$obj = new COM(« zkemkeeper.CZKEMClass ») or die(« Unable to create com object »);
$con=$obj->Connect_Net($this->ip, $this->port);
if ($con) {
$obj->RegEvent($obj->MachineNumber, 65535);
echo « 

 »; com_print_typeinfo($obj); echo « 
 »;
return true;
}
else{
return false;
}

Bien sur sans oublier regsvr32 %windir%\system32\zkemkeeper.dll
ou l’ajouter dans les extensions php et au fichier php.ini
aussi faut activer extension = php_com_dotnet.dll dans php.ini

Bonjour

Je viens de voir vos messages, il semble que le forum ne m’a pas envoyer les updates … je vais regarder ça dans les jours qui viennent.

Au final, est ce que ça fonctionne ? si non est ce que l’ip de la box est accessible du serveur ? Avez vous des traces wireshark d’une connexion qui fonctionne ?

bien à vous

Bonjour à tous,

je suis tombé par hasard sur ce sujet car utilisateur de Dolibarr, je souhaitais y intégrer une appli de pointage que je développe en ce moment et que je termine sous peu.
L’appli est composé:

  • d’une interface web pour afficher, rechercher, sélectionner et imprimer/exporter les pointages selon des critères (nombreux)
  • d’un webservice de type REST pour créer les enregistrements sur la base de données de l’appli web à partir des mobiles
    -d’une appli mobile de pointage sous android et Iphone et tablettes

Le système (pour mes besoins, mais adaptable) fonctionne ainsi (en simplifiant):
1 - L’appli mobile se connecte à l’aide du webservice et au login individuel à mon interface web dès que l’agent démarre l’appli sur son mobile.
2 - L’appli mobile scanne le QRCode de prise de service et le stocke en local. Les QRCode sont codés et installés sur chaque site.
3 - A la fin du service le scan du QR code « fin de service » permet l’envoie de l’enregistrement complet après des vérifications de cohérence, du lieu d’envoi (position GPS de l’agent) etc.
4 - une ligne est ajoutée dans la base mySQL distante.
En fin de compte j’ai les infos suivantes:

  • Nom de l’agent, position GPS, date de pointage, heure de début et fin de service (et pause s’il y a lieu, sur certains sites).
    Maintenant je souhaite intégrer tout cela sur Dolibarr et là, je coince un peu car je ne connais pas cet environnement.

Si vous êtes intéressés par cet outil, on peut essayer de voir comment l’adapter au plus grand nombre…

1 « J'aime »

Bonjour Djebel,

Moi je recherche un système afin de géolocaliser des produits en location chez les clients.

Du type, on dépose, on prend une photo ou autre pour les coordonnées GPS et on envoie l’info sur Dolibarr qui l’ajoute au contrat en cours. Cela permettrait ensuite sur une carte d’afficher les produits afin de faciliter les tournées de récupération du matériel.

Non cela n’a jamais fonctionné chez moi, du coup j’ai abandonné car avec le covid j’ai pris des longues vacances! :slight_smile: