define("CUSTOMER_REFERENCE_COL_NAME", COMPANY_PN_COL_NAME);
+function import_inventory($filename)
+{
+ global $debug;
+
+ $data = array();
+
+ $handle = fopen($filename, "r");
+
+ if ($handle == false) {
+ echo "Cannot open file: " . $filename . "\n";
+ exit(1);
+ }
+
+ while (($row = fgetcsv($handle, 1024, ',')) !== false) {
+ $num = count($row);
+
+ if ($num < 2) {
+ /* Ligne vide. */
+ continue;
+ }
+
+ $data[] = $row;
+ }
+
+ fclose($handle);
+
+ return $data;
+}
+
+/*
+ * If a part is found in inventory file, exclude it from BOM.
+ *
+ * If the customer P/N is empty, try to match by manufacturer P/N instead.
+ */
+function find_part_in_inventory($inventory, $bom_customer_pn, $bom_manufacturer_pn)
+{
+ foreach ($inventory as $key => $row) {
+ $inv_customer_pn = $row[0];
+
+ if ($bom_customer_pn !== "") {
+ $match = $bom_customer_pn;
+ } else if ($bom_manufacturer_pn !== "") {
+ $match = $bom_manufacturer_pn;
+ } else {
+ echo "Error: Need at least one of customer or manufacturer P/N\n";
+ exit(1);
+ }
+
+ if ($inv_customer_pn == $match) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
/* Exportation BOM digikey. */
-function export_bom_digikey(&$data, $num, $col_num_to_id, $col_id_to_num, $filename)
+function export_bom_digikey(&$data, $num, $col_num_to_id, $col_id_to_num, $filename, $inventory)
{
global $debug, $kits;
}
}
- if ($pn != "MISSING") {
+ $exclude_part = find_part_in_inventory($inventory, $customer_ref, $pn);
+
+ if (($pn != "MISSING") && ($exclude_part == false)) {
$line = $qty . CSV_DK_DELIM . $manuf . CSV_DK_DELIM . $pn . CSV_DK_DELIM . $customer_ref . "\r\n";
fwrite($handle, $line);
}
$digikey_bom = false;
$kits = 1;
+$use_inventory = false;
define("DATA_ROW_START", 3);
"width" => 0),
);
-$short_opts = "hckn:";
+$short_opts = "hci:kn:";
function usage()
{
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";
case 'c':
$add_cost = true;
break;
+ case 'i':
+ $use_inventory = true;
+ $inventory_filename = $o[1];
+ break;
case 'k':
$digikey_bom = true;
break;
if ($digikey_bom) {
/* Exportation BOM digikey. */
$dest .= ".txt";
+ $inventory = array();
+
+ if ($use_inventory) {
+ $inventory = import_inventory($inventory_filename);
+ }
- export_bom_digikey($data, $num, $col_num_to_id, $col_id_to_num, $dest);
+ export_bom_digikey($data, $num, $col_num_to_id, $col_id_to_num, $dest, $inventory);
} else {
/* Exportation BOM Excel */