Example #1
0
        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));
        }
Example #2
0
        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);
        }
Example #3
0
        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);
                }
            }
        }
Example #4
0
 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);
         }
     }
 }
Example #5
0
 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);
     }
 }