Refactor code for clarity
[eda-utils.git] / bomgen / Bomgen / functions.inc.php
index 924374e..b72c239 100644 (file)
@@ -296,4 +296,145 @@ function get_manufacturer($item)
   return $manufacturer;
 }
 
+function xls_configure($workbook, $worksheet)
+{
+  global $col_id_to_xls_num, $csv_infos;
+
+  /* Configration des couleurs de cellules. */
+  xls_set_colors($workbook);
+
+  foreach ($csv_infos as $key => $value) {
+    $width = $value['width'];
+
+    /* Ajustement de la largeur de chaque colonne. */
+    if ($width) {
+      /* S'assure que la colonne a été exportée dans le fichier CSV. */
+      if (isset($col_id_to_xls_num[$key])) {
+        $worksheet->setColumn($col_id_to_xls_num[$key], $col_id_to_xls_num[$key],
+                              $width);
+      } else {
+        echo "Colonne '$key' manquante.\n";
+      }
+    }
+  }
+
+  $worksheet->setLandscape();
+  $worksheet->setPaper(PAPER_US_LETTER);
+}
+
+/*
+ * value: clé
+ * c:     Numéro de colonne dans le fichier CSV.
+ * xls_c: Numéro de colonne dans Excel.
+ */
+function determine_col_index($value, $c, $xls_c)
+{
+  global $col_id_to_num, $col_num_to_id, $col_id_to_xls_num;
+
+  $col_id_to_num[$value] = $c;
+  $col_num_to_id[$c] = $value;
+  $col_id_to_xls_num[$value] = $xls_c;
+}
+
+/* Conversion colonne numérique à lettre:
+ *   0 -> A
+ *   1 -> B
+ *   ...
+ */
+function col_to_letter($c)
+{
+  $c = intval($c + 1); /* c part à 0. */
+
+  if ($c <= 0)
+    return '';
+
+  $letter = '';
+
+  while($c != 0) {
+    $p = ($c - 1) % 26;
+    $c = intval(($c - $p) / 26);
+    $letter = chr(65 + $p) . $letter;
+  }
+
+  return $letter;
+}
+
+function bom_import_source($filename)
+{
+  global $col_id_to_num, $num, $row_num, $add_cost, $csv_infos, $entete, $data;
+
+  $handle = fopen($filename, "r");
+
+  if ($handle == FALSE) {
+    echo "Error opening file: " . $filename . "\n";
+    exit(1);
+  }
+
+  /* Read and import BOM source file. */
+  while (($row = fgetcsv($handle, 1024, ',')) !== false) {
+    $num = count($row);
+
+    if ($num < 2) {
+      /* Ligne vide. */
+      continue;
+    }
+
+    if ($row_num == 1) {
+      /* Entête. */
+
+      if ($add_cost == true) {
+        /* Ajout colonne temporaire pour le total cost. */
+        $row[$num] = "TotalCost";
+        $num++;
+      }
+
+      /* Ajout colonne temporaire selon le type de composant. Cela est
+       * nécessaire pour faire le tri correctement. */
+      $row[$num] = "Type";
+      $num++;
+
+      /* Index de la prochaine colonne disponible pour affichage. */
+      $k = 0;
+
+      for ($c = 0; $c < $num; $c++) {
+        $id = $row[$c];
+
+        determine_col_index($id, $c, $k);
+
+        if (isset($csv_infos[$id])) {
+          if ($csv_infos[$id]['width'] != 0) {
+            $nom = $csv_infos[$id]['nom'];
+
+            $entete[$k] = $nom;
+
+            $k++;
+          }
+        } else {
+          echo "Colonne '$id' non supportée.\n";
+        }
+      }
+    } else {
+      $ref_prefix2 = substr($row[$col_id_to_num[DESIGNATOR_COL_NAME]], 0, 2);
+      $company_pn = substr($row[$col_id_to_num[COMPANY_PN_COL_NAME]], 0, 1); /* Pour les vieux BOMs qui n'ont pas
+                                                                              * l'attribut NOPOP. */
+      if (($ref_prefix2 == "MH") ||
+          ($ref_prefix2 == "TP") ||
+          ($ref_prefix2 == "FI") ||
+          (array_key_exists(ASSEMBLY_COL_NAME, $col_id_to_num) && ($row[$col_id_to_num[ASSEMBLY_COL_NAME]] == DO_NOT_POPULATE_KEYWORD)) ||
+          ($company_pn == "*")) {
+        /* Enlève les composants non désirés. */
+        continue;
+      }
+
+      $ref_prefix = substr($ref_prefix2, 0, 1);
+      $row[$col_id_to_num['Type']] = $ref_prefix;
+      $data[] = $row;
+    }
+
+    $row_num++;
+  }
+
+  fclose($handle);
+}
+
 ?>