محمد المصري12 نشر 1 يوليو 2022 أرسل تقرير نشر 1 يوليو 2022 سلام عليكم اقوم بالعمل على موديول مخصص ل dolibarr erp system الكود التالي يقوم بادراج ملف excel الخاص ببيانات الحضور و الانصراف من جهاز البصمه ، و استخدم في ذلك مكتبة Spreadsheet $Spreadsheet = new SpreadsheetReader($destfull); $BaseMem = memory_get_usage(); $Sheets = $Spreadsheet->Sheets(); $nbSheet = count($Sheets); $nblign=0; $nbadded = 0; $nbmodified = 0; $arrayusers = array(); $arrayhorairs = array(); $arraynotfounded = array(); $arralreadyimp = array(); $colnumero = 0; $coldatetime = 1; $presence = new hrmdolibarr_presences($db); $id_presenc = 0; $lastemployee = 0; $lastdate = ''; $lastdebut = ''; for($i=0; $i < $nbSheet; $i++){ $Spreadsheet->ChangeSheet($i); foreach ($Spreadsheet as $key => $row) { $error = 0; if($key > 0 && isset($row[$colnumero]) && isset($row[$coldatetime]) && (int) $row[$colnumero] > 0) {} else continue; $fk_employe = 0; if(isset($arrayusers[$row[$colnumero]])) { $fk_employe = $arrayusers[$row[$colnumero]]; } else { $resql = $db->query('SELECT e.fk_object FROM '.MAIN_DB_PREFIX.'user_extrafields as e WHERE e.hrmdolibarr_nummachine='.(int) $row[$colnumero].' limit 1'); if($resql){ $obj = $db->fetch_object($result); if($obj) { $fk_employe = $obj->fk_object; $arrayusers[$row[$colnumero]] = $fk_employe; } } } $datetime = trim($row[$coldatetime]); $date = explode(' ', $datetime); if($fk_employe <= 0 || !isset($date[0]) || !isset($date[1])) { $arraynotfounded[(int) $row[$colnumero]] = (int) $row[$colnumero]; continue; } $time = explode(':', $date[1]); $tmp_d = explode('/', $date[0]); $day = $tmp_d[0]; // Day 0 $month = $tmp_d[1]; // Month 1 $year = $tmp_d[2]; // Year if(strlen($year) == 2) { $day = $tmp_d[1]; // Day 1 $month = $tmp_d[0]; // Month 0 $year = $tmp_d[2]; // Year $years = DateTime::createFromFormat('y', (int) $year); $year = $years->format('Y'); } $month = strlen($month) == 1 ? '0'.$month : $month; $cleandate = dol_mktime(0, 0, 0, (int) $month, (int) $day, (int) $year); if(!$cleandate) continue; $rowdate = date("Y-m-d", $cleandate); // To avoid duplicate line $tmpdebut = $time[0] * 3600 + $time[1] * 60; if(isset($arralreadyimp[$fk_employe.'-'.$rowdate.'-'.$tmpdebut])) continue; $arralreadyimp[$fk_employe.'-'.$rowdate.'-'.$tmpdebut] = 1; if(!$lastdate || (isset($lastdate) && $lastdate != $rowdate) || $lastemployee != $fk_employe) { $lastdate = $rowdate; // Time in $debut = $time[0] * 3600 + $time[1] * 60; $lastdebut = $debut; $data = [ 'fk_employe' => $fk_employe, 'fk_author' => $user->id, 'date' => $rowdate, 'debut' => $debut ]; $lastemployee = $fk_employe; // $presence = new hrmdolibarr_presences($db); $id_presenc = $presence->create($data); $nbadded++; }else{ if($id_presenc && $lastdate == $rowdate && $lastdebut && $lastemployee == $fk_employe) { $fin = $time[0] * 3600 + $time[1] * 60; $duree = $fin - $lastdebut; $day=date('l', strtotime($rowdate)); if(isset($arrayhorairs[$fk_employe])) { $horairuser = $arrayhorairs[$fk_employe]; } else { // $daynumber = $horaires->namedays[$day]; $horairuser = $horaires->horaireUser($fk_employe); $arrayhorairs[$fk_employe] = $horairuser; } $dt_time = $horaires->calculOverDelaytime($fk_employe, $day, $debut, $fin, $horairuser); $data = [ 'fin' => $fin, 'duree' => $duree, 'overtime' => $dt_time['overtime'], ]; // $presence = new hrmdolibarr_presences($db); $presence->update($id_presenc, $data); } $id_presenc = 0; $lastdate = ''; $lastdebut = ''; } هو بيقبل ملف الإكسل بالصيغة دي انا عاوز اخليه كمان يقبل الملف بالشكل ده يعني يقبل البيانات سواء بالشكل القديم او الجديد ، هل فيه طريقة لده؟ اقتباس
0 Wael Aljamal نشر 10 يوليو 2022 أرسل تقرير نشر 10 يوليو 2022 حسب ما قمت بتقديمة، نلاحظ أنه يمكن ملاحظة الاختلاف من خلال الخلية C1 التي تحوي القيمة Time وبذلك يمكن عمل شرط لفرز نوع الملف، إن كانت الخلية فارغة تكون نمط أول وإلا فهي نمط ثاني. ضمن الحلقة على عدد ال spreadsheets يمكن اختبار قيمة الخلية: $sheetType = $spreadsheet->getActiveSheet() ->getCell('c1') == 'Time' ? 1 : 2; if ($sheetType == 1) { do old } else { do second } اقتباس
السؤال
محمد المصري12
سلام عليكم
اقوم بالعمل على موديول مخصص ل dolibarr erp system
الكود التالي يقوم بادراج ملف excel الخاص ببيانات الحضور و الانصراف من جهاز البصمه ، و استخدم في ذلك مكتبة Spreadsheet
هو بيقبل ملف الإكسل بالصيغة دي
انا عاوز اخليه كمان يقبل الملف بالشكل ده
يعني يقبل البيانات سواء بالشكل القديم او الجديد ، هل فيه طريقة لده؟
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.