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);
+}
+
?>
* (at your option) any later version.
*/
-require_once 'Bomgen/conf.inc.php';
-require_once 'Spreadsheet/Excel/Writer.php';
-require_once 'Bomgen/functions.inc.php';
-require_once 'Bomgen/refdes.inc.php';
-
-$debug = 0;
-
-$digikey_bom = false;
-$kits = 1;
-$use_inventory = false;
+require_once 'Console/Getopt.php';
define("XLS_DATA_ROW_START", 3);
define("PAPER_US_LETTER", 1);
-$short_opts = "hci:kn:t:";
+$debug = 0;
-function usage()
-{
- echo "Usage: bomgen.php [OPTIONS] [INPUT FILE]\n";
- echo "Generate an Excel BOM from a PCAD or Altium CSV-exported BOM.\n";
- echo "Output file has same name as input file, but with a .xls or .txt extension.\n";
- echo "\n";
- echo "Options:\n";
- echo " -c Add cost information to the BOM\n";
- echo " -i Specifiy inventory CSV file\n";
- echo " -k Create digikey BOM submission file (tab-separated fields)\n";
- echo " -h Display this help and exit\n";
- echo " -n Number of cards/kits for digikey BOM submission\n";
- echo " -t BOM input type:\n";
- echo " pcad or altium\n";
-}
+/* Default values. */
+$add_cost = false;
+$digikey_bom = false;
+$kits = 1;
+$use_inventory = false;
+$comp_total = 0;
+$titre = "BOM";
/*
* Clé = Nom de la colonne.
$entete = array();
-/*
- * 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;
-}
+$short_opts = "hci:kn:t:";
-function xls_configure($workbook, $worksheet)
+function usage()
{
- 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);
+ echo "Usage: bomgen.php [OPTIONS] [INPUT FILE]\n";
+ echo "Generate an Excel BOM from a PCAD or Altium CSV-exported BOM.\n";
+ echo "Output file has same name as input file, but with a .xls or .txt extension.\n";
+ echo "\n";
+ echo "Options:\n";
+ echo " -c Add cost information to the BOM\n";
+ echo " -i Specifiy inventory CSV file\n";
+ echo " -k Create digikey BOM submission file (tab-separated fields)\n";
+ echo " -h Display this help and exit\n";
+ echo " -n Number of cards/kits for digikey BOM submission\n";
+ echo " -t BOM input type:\n";
+ echo " pcad or altium\n";
}
if ($argc < 2) {
exit(1);
}
-$add_cost = false;
-
-$comp_total = 0;
-$titre = "BOM";
-
$cg = new Console_Getopt();
/* Read the command line. */
if (PEAR::isError($ret)) {
die ("Error in command line: " . $ret->getMessage() . "\n");
}
-
/* Now parse the options array. */
$opts = $ret[0];
break;
}
+/* These files must be included before others. */
require_once 'Bomgen/mapping.inc.php';
require_once 'Bomgen/digikey.inc.php';
+require_once 'Spreadsheet/Excel/Writer.php';
+
+require_once 'Bomgen/conf.inc.php';
+require_once 'Bomgen/functions.inc.php';
+require_once 'Bomgen/refdes.inc.php';
+
$dest = strip_ext($src);
/* Importation du BOM CSV. */
$csv_infos['UnitCost']['width'] = 0;
}
-$handle = fopen($src, "r");
-
-if ($handle == FALSE) {
- echo "Error opening file: " . $src . "\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);
+bom_import_source($src);
/* Combinaison de plusieurs lignes en une seule pour PCAD. */
refdes_combine($data, $num, $col_num_to_id, $col_id_to_num);