public async Task <IActionResult> GetWarehouseState() { List <WarehouseReport> warehouseReport = new List <WarehouseReport>(); var connectionString = _configuration.GetConnectionString("WarehouseDB"); await using var conn = new NpgsqlConnection(connectionString); await conn.OpenAsync(); string sql = "SELECT DISTINCT p.part_id, p.part_name, (SELECT SUM(f.part_qty) FROM feeds f WHERE f.part_id = p.part_id) AS total_feeds, (SELECT SUM(s.shipment_qty) FROM shipments s WHERE s.part_id = p.part_id) AS total_shipments, w.part_qty AS warehouse_qty FROM parts p LEFT JOIN feeds f ON p.part_id = f.part_id LEFT JOIN shipments s ON p.part_id = s.part_id JOIN warehouses w ON p.part_id = w.part_id;"; await using (var cmd = new NpgsqlCommand(sql, conn)) await using (var reader = await cmd.ExecuteReaderAsync()) while (await reader.ReadAsync()) { var info = new WarehouseReport(); info.PartId = reader["part_id"] is DBNull ? "N/A" : reader["part_id"].ToString(); info.PartName = reader["part_name"] is DBNull ? "N/A" : reader["part_name"].ToString(); info.TotalFeeds = reader["total_feeds"] is DBNull ? 0 : Convert.ToInt32(reader["total_feeds"]); info.TotalShipments = reader["total_shipments"] is DBNull ? 0 : Convert.ToInt32(reader["total_shipments"]); info.WarehouseQty = reader["warehouse_qty"] is DBNull ? 0 : Convert.ToInt32(reader["warehouse_qty"]); warehouseReport.Add(info); } return(Ok(warehouseReport)); }
public string PrintToFile(WarehouseReport report) { var filename = string.Empty; try { filename = string.Format("output-{0}.txt", DateTime.Now.ToString("yyyyMMddHHmmss")); using (StreamWriter sw = new StreamWriter(filename)) { foreach (var warehouse in report.Warehouses) { sw.WriteLine("{0} (total {1})", warehouse.Name, warehouse.Total); foreach (var material in warehouse.Materials) { sw.WriteLine("{0}: {1}", material.Id, material.Amount); } sw.WriteLine(); } } } catch (IOException e) { Console.WriteLine("The file could not be write:"); Console.WriteLine(e.Message); } return(filename); }
public void DeserializeLine(string inputLine, WarehouseReport report) { var splittedItems = inputLine.Split(';'); var material = new Material(); material.Name = splittedItems[0].Trim(); material.Id = splittedItems[1]; var warehouses = splittedItems[2].Split('|'); foreach (var wh in warehouses) { var whInfo = wh.Split(','); var whName = whInfo[0]; material.Amount = int.Parse(whInfo[1]); if (report.Warehouses.Any(x => x.Name == whName)) { warehouseManager.UpdateWarehouse(report, material, whName); } else { var warehouse = warehouseManager.CreateWarehouse(material, whInfo); report.Warehouses.Add(warehouse); } } }
public void UpdateWarehouse(WarehouseReport report, Material material, string whName) { foreach (var wh in report.Warehouses.Where(x => x.Name == whName)) { if (wh.Materials.Any(m => m.Id.Equals(material.Id))) { wh.Materials.Where(m => m.Id.Equals(material.Id)).FirstOrDefault().Amount += material.Amount; } else { wh.Materials.Add(material); } } }
public void Load(string fileName, WarehouseReport report) { try { using (StreamReader sr = new StreamReader(fileName)) { string line; while ((line = sr.ReadLine()) != null) { if (!line.StartsWith("#")) { deserializer.DeserializeLine(line, report); } } } } catch (IOException e) { Console.WriteLine("The file could not be read:"); Console.WriteLine(e.Message); } }