remodel distributors, properties, components
This commit is contained in:
parent
07104226be
commit
6a626282cd
|
@ -38,7 +38,7 @@
|
|||
<tbody id="distributors"></tbody>
|
||||
</table>
|
||||
<table>
|
||||
<thead><tr><th>property</th><th>value(s)</th></tr></thead>
|
||||
<thead><tr><th>property</th><th>value</th></tr></thead>
|
||||
<tbody id="properties"></tbody>
|
||||
</table>
|
||||
<div class="hscroll" id="attachments"></div>
|
||||
|
|
109
public/partdb.js
109
public/partdb.js
|
@ -109,64 +109,55 @@ function select_part()
|
|||
span.appendChild(a);
|
||||
}
|
||||
}
|
||||
// set distributors
|
||||
const distributors = document.getElementById('distributors');
|
||||
distributors.innerHTML = null;
|
||||
for (const distributor of part["distributors"]) {
|
||||
const tr = document.createElement('tr');
|
||||
const td_name = document.createElement('td');
|
||||
td_name.innerText = distributor.name;
|
||||
tr.appendChild(td_name);
|
||||
const td_sku = document.createElement('td');
|
||||
const input = document.createElement('input');
|
||||
input.type = "text";
|
||||
input.style.width = "95%";
|
||||
if (distributor.sku) {
|
||||
input.value = distributor.sku;
|
||||
}
|
||||
td_sku.appendChild(input);
|
||||
tr.appendChild(td_sku);
|
||||
const td_url = document.createElement('td');
|
||||
if (distributor.url) {
|
||||
td_url.innerHTML = "<a href='" + distributor.url + "'>link</a>";
|
||||
}
|
||||
tr.appendChild(td_url);
|
||||
distributors.appendChild(tr);
|
||||
}
|
||||
// add properties and components
|
||||
const kv_tables = ['properties', 'components'];
|
||||
for (const kv_table of kv_tables) {
|
||||
const table = document.getElementById(kv_table);
|
||||
table.innerHTML = null;
|
||||
part[kv_table][""] = ""; // empty field to add
|
||||
for (const key in part[kv_table]) {
|
||||
// add distributors, properties and components
|
||||
for (const table of tables) {
|
||||
const tbody = document.getElementById(table);
|
||||
tbody.innerHTML = null;
|
||||
part[table].push({name: "", value: ""}); // empty field to add
|
||||
for (const row of part[table]) {
|
||||
const tr = document.createElement('tr');
|
||||
let td = document.createElement('td');
|
||||
let input = document.createElement('input');
|
||||
input.type = "text";
|
||||
input.style.width = "95%";
|
||||
input.value = key;
|
||||
input.value = row.name;
|
||||
td.appendChild(input);
|
||||
tr.appendChild(td);
|
||||
td = document.createElement('td');
|
||||
input = document.createElement('input');
|
||||
if ('components' == kv_table) {
|
||||
if (null != row.value) {
|
||||
td = document.createElement('td');
|
||||
input = document.createElement('input');
|
||||
input.type = "text";
|
||||
input.value = row.value;
|
||||
input.style.width = "95%";
|
||||
td.appendChild(input);
|
||||
tr.appendChild(td);
|
||||
}
|
||||
if (row.sku) {
|
||||
td = document.createElement('td');
|
||||
input = document.createElement('input');
|
||||
input.type = "text";
|
||||
input.value = row.sku;
|
||||
input.style.width = "95%";
|
||||
td.appendChild(input);
|
||||
tr.appendChild(td);
|
||||
}
|
||||
if (null != row.quantity) {
|
||||
td = document.createElement('td');
|
||||
input = document.createElement('input');
|
||||
input.type = "number";
|
||||
input.min = "0";
|
||||
input.step = "1";
|
||||
input.value = part[kv_table][key]
|
||||
} else {
|
||||
input.type = "text";
|
||||
if ("object" == typeof part[kv_table][key]) {
|
||||
input.value = part[kv_table][key].join(",");
|
||||
} else {
|
||||
input.value = part[kv_table][key];
|
||||
}
|
||||
input.value = row.quantity;
|
||||
input.style.width = "95%";
|
||||
td.appendChild(input);
|
||||
tr.appendChild(td);
|
||||
}
|
||||
input.style.width = "95%";
|
||||
td.appendChild(input);
|
||||
tr.appendChild(td);
|
||||
table.appendChild(tr);
|
||||
if (row.url) {
|
||||
td = document.createElement('td');
|
||||
td.innerHTML = "<a href='" + row.url + "'>link</a>";
|
||||
tr.appendChild(td);
|
||||
}
|
||||
tbody.appendChild(tr);
|
||||
}
|
||||
}
|
||||
// add attachments
|
||||
|
@ -226,32 +217,28 @@ function update_part()
|
|||
return;
|
||||
}
|
||||
// get distributors
|
||||
part.distributors = {};
|
||||
part.distributors = [];
|
||||
const distributors = document.getElementById('distributors');
|
||||
for (const distributor of distributors.rows) {
|
||||
part.distributors[distributor.cells[0].innerText] = distributor.cells[1].firstChild.value;
|
||||
part.distributors.push({name: distributor.cells[0].firstChild.value, sku: distributor.cells[1].firstChild.value});
|
||||
}
|
||||
// get properties
|
||||
part.properties = {};
|
||||
part.properties = [];
|
||||
const properties = document.getElementById('properties');
|
||||
for (const prop of properties.rows) {
|
||||
const name = prop.cells[0].firstChild.value;
|
||||
const value = prop.cells[1].firstChild.value;
|
||||
if (name && name.length > 0 && value && value.length > 0) {
|
||||
part.properties[name] = value.split(",");
|
||||
}
|
||||
part.properties.push({name: prop.cells[0].firstChild.value, value: prop.cells[1].firstChild.value});
|
||||
}
|
||||
// get components
|
||||
part.components = {};
|
||||
part.components = [];
|
||||
const components = document.getElementById('components');
|
||||
for (const component of components.rows) {
|
||||
const name = component.cells[0].firstChild.value;
|
||||
const quantity = component.cells[1].firstChild.value;
|
||||
if (name && name.length > 0) {
|
||||
part.components[name] = parseInt(quantity);
|
||||
const nam = component.cells[0].firstChild.value;
|
||||
const q = component.cells[1].firstChild.value;
|
||||
if (nam && nam.length > 0) {
|
||||
part.components.push({name: nam, quantity: parseInt(q)});
|
||||
}
|
||||
}
|
||||
//console.log(part);
|
||||
console.log(part);
|
||||
|
||||
var post = new XMLHttpRequest();
|
||||
post.open("POST", "part");
|
||||
|
|
95
server.rb
95
server.rb
|
@ -90,22 +90,13 @@ def get_part_by_id(id)
|
|||
part[k] ||= parent[k]
|
||||
end
|
||||
end
|
||||
# add all distributors
|
||||
distributors = @db.query("SELECT * FROM distributor").to_a
|
||||
statement = @db.prepare("SELECT * FROM distribution WHERE part = ?")
|
||||
distributions = statement.execute(id).to_a
|
||||
distributors.each do |distributor|
|
||||
distributions.each do |distribution|
|
||||
if distribution["distributor"] == distributor["id"] then
|
||||
distributor["sku"] = distribution["sku"]
|
||||
distributor["url"] = distributor["product_page"].gsub("%s", distribution["sku"])
|
||||
end
|
||||
end
|
||||
distributor.delete("id")
|
||||
distributor.delete("homepage")
|
||||
distributor.delete("product_page")
|
||||
# add distributors
|
||||
part["distributors"] = []
|
||||
statement = @db.prepare("SELECT distribution.sku AS sku, distributor.name AS name, distributor.product_page AS url FROM distribution LEFT JOIN distributor ON distributor.id = distribution.distributor WHERE distribution.part = ?")
|
||||
statement.execute(id).each do |distribution|
|
||||
distribution["url"].gsub!("%s", distribution["sku"])
|
||||
part["distributors"] << distribution
|
||||
end
|
||||
part["distributors"] = distributors
|
||||
# add inventory
|
||||
statement = @db.prepare("SELECT location.name AS location, inventory.quantity AS stock FROM inventory LEFT JOIN location ON location.id = inventory.location WHERE inventory.part = ? ORDER BY inventory.quantity DESC LIMIT 1")
|
||||
inventory = statement.execute(id).to_a[0]
|
||||
|
@ -114,17 +105,12 @@ def get_part_by_id(id)
|
|||
part["stock"] = inventory["stock"]
|
||||
end
|
||||
# add properties
|
||||
part["properties"] = {}
|
||||
part["properties"] = []
|
||||
statement = @db.prepare("SELECT property.name AS name, property_value.value AS value FROM property_value JOIN property ON property.id = property_value.property WHERE property_value.part = ?")
|
||||
statement.execute(id).each do |row|
|
||||
part["properties"][row["name"]] ||= []
|
||||
part["properties"][row["name"]] << row["value"]
|
||||
end
|
||||
if parent then
|
||||
parent["properties"].each do |k,v|
|
||||
part["properties"][k] ||= v
|
||||
end
|
||||
part["properties"] << row
|
||||
end
|
||||
part["properties"] += parent["properties"] if parent
|
||||
# add attachments
|
||||
part["attachments"] = []
|
||||
dir = PUBLIC + "/" + ATTACHMENTS + "/" + part["name"].gsub("/", "_")
|
||||
|
@ -136,20 +122,14 @@ def get_part_by_id(id)
|
|||
end
|
||||
end
|
||||
part["attachments"].sort!
|
||||
if parent then
|
||||
part["attachments"] += parent["attachments"]
|
||||
end
|
||||
part["attachments"] += parent["attachments"] if parent
|
||||
# add components for assembly
|
||||
part["components"] = {}
|
||||
if parent then
|
||||
parent["components"].each do |k,v|
|
||||
part["components"][k] ||= v
|
||||
end
|
||||
end
|
||||
part["components"] = []
|
||||
statement = @db.prepare("SELECT part.name AS name, assembly.quantity AS quantity FROM assembly JOIN part ON part.id = assembly.component WHERE assembly.assembled = ?")
|
||||
statement.execute(id).each do |row|
|
||||
part["components"][row["name"]] = row["quantity"]
|
||||
part["components"] << row
|
||||
end
|
||||
part["components"] += parent["components"] if parent
|
||||
# clean up
|
||||
delete = ["parent"]
|
||||
delete.each do |k|
|
||||
|
@ -345,7 +325,7 @@ def add_part(part)
|
|||
statement = @db.prepare("SELECT id FROM inventory WHERE part = ? AND location = ?")
|
||||
ref_inv = statement.execute(part["id"], ref["id"]).to_a[0]
|
||||
unless ref_inv then
|
||||
insert = @db.prepare("INSERT INTO inventory (part, location, quantity) VALUES (?,?,?)");
|
||||
insert = @db.prepare("INSERT INTO inventory (part, location, quantity) VALUES (?,?,?)")
|
||||
insert.execute(part["id"], ref["id"], part["stock"].to_i)
|
||||
end
|
||||
ref_inv = statement.execute(part["id"], ref["id"]).to_a[0]
|
||||
|
@ -361,13 +341,18 @@ def add_part(part)
|
|||
delete = @db.prepare("DELETE FROM distribution WHERE part = ?")
|
||||
delete.execute(part["id"])
|
||||
if part[field] then
|
||||
part[field].each do |distributor,sku|
|
||||
next unless sku and !sku.empty?
|
||||
part[field].each do |row|
|
||||
next unless row["name"] and !row["name"].empty?
|
||||
next unless row["sku"] and !row["sku"].empty?
|
||||
statement = @db.prepare("SELECT id FROM distributor WHERE LOWER(name) = ?")
|
||||
ref = statement.execute(distributor.downcase).to_a[0]
|
||||
raise StandardError.new("distributor unknown") unless ref
|
||||
insert = @db.prepare("INSERT INTO distribution (distributor,part,sku) VALUES (?,?,?)");
|
||||
insert.execute(ref["id"], part["id"], sku)
|
||||
ref = statement.execute(row["name"].downcase).to_a[0]
|
||||
unless ref then
|
||||
insert = @db.prepare("INSERT INTO distributor (name) VALUES (?)");
|
||||
insert.execute(row["name"])
|
||||
ref = statement.execute(row["name"].downcase).to_a[0]
|
||||
end
|
||||
insert = @db.prepare("INSERT INTO distribution (distributor,part,sku) VALUES (?,?,?)")
|
||||
insert.execute(ref["id"], part["id"], row["sku"])
|
||||
end
|
||||
end
|
||||
# update properties
|
||||
|
@ -375,20 +360,19 @@ def add_part(part)
|
|||
if part[field] then
|
||||
delete = @db.prepare("DELETE FROM property_value WHERE part = ?")
|
||||
delete.execute(part["id"])
|
||||
part[field].each do |name,values|
|
||||
next unless values and !values.empty?
|
||||
part[field].each do |row|
|
||||
next unless row["name"] and !row["name"].empty?
|
||||
next unless row["value"] and !row["value"].empty?
|
||||
next if family and family["properties"] and family["properties"].include?(row)
|
||||
statement = @db.prepare("SELECT id FROM property WHERE LOWER(name) = ?")
|
||||
ref = statement.execute(name.downcase).to_a[0]
|
||||
ref = statement.execute(row["name"].downcase).to_a[0]
|
||||
unless ref then
|
||||
insert = @db.prepare("INSERT INTO property (name) VALUES (?)");
|
||||
insert.execute(name)
|
||||
end
|
||||
ref = statement.execute(name.downcase).to_a[0]
|
||||
insert = @db.prepare("INSERT INTO property_value (property,part,value) VALUES (?,?,?)");
|
||||
values.each do |value|
|
||||
next if family and family["properties"] and family["properties"][name] and family["properties"][name].include?(value)
|
||||
insert.execute(ref["id"], part["id"], value)
|
||||
insert.execute(row["name"])
|
||||
ref = statement.execute(row["name"].downcase).to_a[0]
|
||||
end
|
||||
insert = @db.prepare("INSERT INTO property_value (property,part,value) VALUES (?,?,?)")
|
||||
insert.execute(ref["id"], part["id"], row["value"])
|
||||
end
|
||||
end
|
||||
# update components
|
||||
|
@ -396,15 +380,16 @@ def add_part(part)
|
|||
if part[field] then
|
||||
delete = @db.prepare("DELETE FROM assembly WHERE assembled = ?")
|
||||
delete.execute(part["id"])
|
||||
part[field].each do |name,quantity|
|
||||
next unless name
|
||||
part[field].each do |row|
|
||||
next unless row["name"] and !row["name"].empty?
|
||||
next unless row["quantity"]
|
||||
statement = @db.prepare("SELECT id FROM part WHERE LOWER(name) = ?")
|
||||
ref = statement.execute(name.downcase).to_a[0]
|
||||
ref = statement.execute(row["name"].downcase).to_a[0]
|
||||
#raise StandardError.new("component #{name} does not exist") unless ref
|
||||
next unless ref
|
||||
quantity ||= 0
|
||||
row["quantity"] ||= 0
|
||||
insert = @db.prepare("INSERT INTO assembly (assembled,component,quantity) VALUES (?,?,?)");
|
||||
insert.execute(part["id"], ref["id"], quantity)
|
||||
insert.execute(part["id"], ref["id"], row["quantity"])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue