123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- using Dfs.WayneChina.IMisPlus.Models;
- using System;
- using System.Collections.Generic;
- using System.Globalization;
- using System.Linq;
- using System.Text;
- using System.Xml.Linq;
- namespace Dfs.WayneChina.IMisPlus
- {
- /// <summary>
- /// Manages the xml settings part of the legacy iFuel forecourt configuration.
- /// </summary>
- public class ForecourtXml
- {
- #region Fields
- private XDocument xdoc;
- #endregion
- #region Properties
- public ForecourtConfig ForecourtConfig { get; set; }
- #endregion
- public bool Load(string fileName)
- {
- xdoc = XDocument.Load(fileName);
- return ParseConfig();
- }
- public bool Parse(string xml)
- {
- xdoc = XDocument.Parse(xml);
- return ParseConfig();
- }
- private bool ParseConfig()
- {
- var configRoot = xdoc.Document.Element("ForecourtConfig");
- //Parse <ForecourtConfig/>
- ForecourtConfig = new ForecourtConfig();
- ForecourtConfig.CurrentVersion = configRoot.Attribute("Version").Value;
- Console.WriteLine(configRoot.Attribute("Version").Value);
- //Parse <TerminalConfig/>
- var terminalConfig = configRoot.Descendants("TerminalConfig").First();
- var terminals = from term in terminalConfig.Descendants("Terminal")
- select new Terminal
- {
- Id = Convert.ToByte(term.Attribute("Id").Value),
- PayMode = Convert.ToByte(term.Attribute("PayMode").Value),
- ProtocolType = Convert.ToByte(term.Attribute("ProtocolType").Value),
- Address = term.Attribute("Address").Value
- };
- ForecourtConfig.Terminals = terminals.ToList();
- foreach (var item in ForecourtConfig.Terminals)
- {
- Console.WriteLine("Terminal Id: {0}, Pay mode: {1}, Protocol type: {2}, Address: {3}",
- item.Id, item.PayMode, item.ProtocolType, item.Address);
- }
- //Parse <DispenserConfig/>
- var dispenserConfig = configRoot.Descendants("DispenserConfig").First();
- var disps = from disp in dispenserConfig.Descendants("Dispenser")
- select new Dispenser
- {
- DispNo = disp.Attribute("DispNo").Value,
- DispType = disp.Attribute("DispType").Value,
- Manufacturer = disp.Attribute("Manufacturer").Value,
- ProtocolType = Convert.ToByte(disp.Attribute("Protocol").Value),
- Address = disp.Attribute("Address").Value,
- Life = Convert.ToUInt16(disp.Attribute("Life").Value),
- State = disp.Attribute("State").Value,
- ManufacturingNo = disp.Attribute("ManufacturingNo").Value,
- DateOfManufacture = GetFormattedDate(disp.Attribute("DateOfManufacture").Value)
- };
- ForecourtConfig.Dispensers = disps.ToList();
- foreach (var item in ForecourtConfig.Dispensers)
- {
- Console.WriteLine("Dispenser number: {0}, type: {1}, manufacturer: {2}, protocol type: {3}, address: {4}, life: {5}, state: {6}, date of manufacture: {7} nozzle count: {8}",
- item.DispNo, item.DispType, item.Manufacturer, item.ProtocolType, item.Address, item.Life, item.State, item.DateOfManufacture, item.NozzleCount);
- }
- //Parse <PumpConfig/>
- var pumpConfig = configRoot.Descendants("PumpConfig").First();
- var pumps = from pump in pumpConfig.Descendants("Pump")
- select new Pump
- {
- Id = Convert.ToByte(pump.Attribute("Id").Value),
- PosId = Convert.ToByte(pump.Attribute("PosId").Value),
- DispType = Convert.ToByte(pump.Attribute("DispType").Value),
- DispTypeName = pump.Attribute("DispTypeName").Value,
- TankId = Convert.ToByte(pump.Attribute("TankId").Value),
- AppProtocol = Convert.ToUInt16(pump.Attribute("AppProtocol").Value),
- ProtocolType = Convert.ToByte(pump.Attribute("ProtocolType").Value),
- Port = pump.Attribute("Port").Value,
- SerialPort = Convert.ToUInt16(pump.Attribute("SerialPort").Value),
- Node = Convert.ToUInt16(pump.Attribute("Node").Value),
- SubAddress = Convert.ToByte(pump.Attribute("SubAddress").Value),
- Mode = Convert.ToByte(pump.Attribute("Mode").Value),
- PayStackSize = Convert.ToByte(pump.Attribute("PayStack").Value),
- CheckOutMode = Convert.ToByte(pump.Attribute("CheckOutMode").Value),
- MaxAmount = Convert.ToUInt32(pump.Attribute("MaxAmount").Value),
- MaxVolume = Convert.ToUInt32(pump.Attribute("MaxVolume").Value),
- Nozzles = (from noz in pump.Descendants("Nozzle")
- select new Nozzle
- {
- Id = Convert.ToByte(noz.Attribute("Id").Value),
- PhysicalId = Convert.ToByte(noz.Attribute("PhysicalId").Value),
- DispNo = noz.Attribute("DispNo").Value,
- SiteNozzleNo = Convert.ToUInt16(noz.Attribute("SiteNozzleNo").Value),
- TankId = Convert.ToByte(noz.Attribute("TankId").Value),
- ProductCode = noz.Attribute("ProductCode").Value,
- State = noz.Attribute("State").Value,
- VehicleIdReaderAddress = noz.Attribute("VehicleIdReaderAddress").Value
- }).ToList()
- };
- ForecourtConfig.Pumps = pumps.ToList();
- foreach (var p in ForecourtConfig.Pumps)
- {
- Console.WriteLine("Pump Id: {0}", p.Id);
- foreach (var n in p.Nozzles)
- {
- Console.WriteLine("Nozzle Id: {0}", n.Id);
- }
- }
- //Parse <TankConfig/>
- var tankConfig = configRoot.Descendants("TankConfig").First();
- var tanks = from tank in tankConfig.Descendants("Tank")
- select new Tank
- {
- Id = Convert.ToByte(tank.Attribute("TankId")),
- };
- foreach (var t in tanks)
- {
- Console.WriteLine("Tank Id: {0}, Serial number: {1}", t.Id, "");
- }
- //Parse <FuelConfig/>
- var fuelConfig = configRoot.Descendants("FuelConfig").First();
- var fuels = from fuel in fuelConfig.Descendants("Fuel")
- select new Fuel
- {
- Id = Convert.ToInt32(fuel.Attribute("Id").Value),
- ProductCode = fuel.Attribute("ProductCode").Value,
- ClassNo = fuel.Attribute("ClassNo").Value,
- Name = fuel.Attribute("Name").Value,
- Price = Convert.ToInt32(fuel.Attribute("Price").Value),
- OldPrice = Convert.ToInt32(fuel.Attribute("OldPrice").Value),
- UnitMeasure = fuel.Attribute("UnitMeasure").Value,
- Storage = Convert.ToInt32(fuel.Attribute("Storage").Value),
- TaxPer = Convert.ToInt32(fuel.Attribute("TaxPer").Value),
- Density = fuel.Attribute("Density").Value
- };
- ForecourtConfig.Fuels = fuels.ToList();
- return true;
- }
- public bool AddNozzle(Nozzle nozzle)
- {
- return true;
- }
- public bool AddPump(Pump pump)
- {
- if (pump == null)
- return false;
- if (ForecourtConfig.Pumps.Any(p => p.Id == pump.Id))
- return false;
- ForecourtConfig.Pumps.Add(pump);
- return true;
- }
- private DateTime GetFormattedDate(string dateString)
- {
- DateTime dateOfManufacture;
- string format = "yyyy-MM-dd";
- bool result =
- DateTime.TryParseExact(dateString, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateOfManufacture);
- return result ? dateOfManufacture : DateTime.MinValue;
- }
- }
- }
|