Files
DP44/DataPRO/Modules/DatabaseImporter/DatabaseImport/ISO/CustomerDetails.cs
2026-04-17 14:55:32 -04:00

187 lines
7.4 KiB
C#

using System;
using System.Linq;
using System.Data;
using System.Data.SqlClient;
namespace DatabaseImport.ISO
{
[Serializable]
public class CustomerDetails //: ISerializableFile
{
// #region properties
public string CustomerName { get; set; } = string.Empty;
public string CustomerTestRefNumber { get; set; } = string.Empty;
private string _projectRefNumber = "NOVALUE";
public string ProjectRefNumber
{
get => _projectRefNumber;
set
{
if (value != string.Empty)
{
_projectRefNumber = value;
}
}
}
private string _customerOrderNumber = "NOVALUE";
public string CustomerOrderNumber
{
get => _customerOrderNumber;
set
{
if (value != string.Empty)
{
_customerOrderNumber = value;
}
}
}
private string _customerCostUnit = "NOVALUE";
public string CustomerCostUnit
{
get => _customerCostUnit;
set
{
if (value != string.Empty)
{
_customerCostUnit = value;
}
}
}
public bool LocalOnly { get; set; } = false;
public string Name { get; set; } = "";
public DateTime LastModified { get; set; }
public string LastModifiedBy { get; set; }
public int Version { get; set; } = 1;
// #endregion properties
// #region constructor
public CustomerDetails()
{
}
// public CustomerDetails(string name, bool localOnly) { Name = name; LocalOnly = localOnly; }
public CustomerDetails(DataRow dr)
{
Name = (string)dr["Name"];
CustomerName = (string)dr["CustomerName"];
CustomerTestRefNumber = (string)dr["CustomerTestRefNumber"];
ProjectRefNumber = (string)dr["ProjectRefNumber"];
CustomerOrderNumber = (string)dr["CustomerOrderNumber"];
CustomerCostUnit = (string)dr["CustomerCostUnit"];
LocalOnly = Convert.ToBoolean(dr["LocalOnly"]);
LastModified = Convert.ToDateTime(dr["LastModified"]);
LastModifiedBy = (string)dr["LastModifiedBy"];
Version = Convert.ToInt32(dr["Version"]);
}
public CustomerDetails(CustomerDetails copy)
{
Name = copy.Name;
CustomerName = copy.CustomerName;
CustomerTestRefNumber = copy.CustomerTestRefNumber;
ProjectRefNumber = copy.ProjectRefNumber;
CustomerOrderNumber = copy.CustomerOrderNumber;
CustomerCostUnit = copy.CustomerCostUnit;
LocalOnly = copy.LocalOnly;
LastModified = copy.LastModified;
LastModifiedBy = copy.LastModifiedBy;
Version = copy.Version;
}
// #endregion constructor
private enum Fields
{
Name,
CustomerName,
CustomerTestRefNumber,
ProjectRefNumber,
CustomerOrderNumber,
CustomerCostUnit,
LocalOnly,
LastModified,
LastModifiedBy,
Version
}
public static CustomerDetails ReadXML(System.Xml.XmlElement root)
{
var c = new CustomerDetails();
foreach (var node in root.ChildNodes)
{
if (node is System.Xml.XmlElement)
{
ProcessXMLElement(node as System.Xml.XmlElement, ref c);
}
}
return c;
}
private static void ProcessXMLElement(System.Xml.XmlElement node, ref CustomerDetails c)
{
if (!Enum.TryParse(node.Name, out Fields field)) return;
switch (field)
{
case Fields.CustomerCostUnit: c.CustomerCostUnit = node.InnerText; break;
case Fields.CustomerName: c.CustomerName = node.InnerText; break;
case Fields.CustomerOrderNumber: c.CustomerOrderNumber = node.InnerText; break;
case Fields.CustomerTestRefNumber: c.CustomerTestRefNumber = node.InnerText; break;
case Fields.LastModified: c.LastModified = DateTime.Parse(node.InnerText, System.Globalization.CultureInfo.InvariantCulture); break;
case Fields.LastModifiedBy: c.LastModifiedBy = node.InnerText; break;
case Fields.LocalOnly: c.LocalOnly = bool.Parse(node.InnerText); break;
case Fields.Name: c.Name = node.InnerText; break;
case Fields.ProjectRefNumber: c.ProjectRefNumber = node.InnerText; break;
case Fields.Version: c.Version = int.Parse(node.InnerText, System.Globalization.CultureInfo.InvariantCulture); break;
default: throw new NotSupportedException("ISODll.CustomerDetails::ProcessXMLElement unsupported field: " + field.ToString());
}
}
public void WriteXML(ref System.Xml.XmlWriter writer)
{
writer.WriteStartElement("CustomerDetail");
var fields = Enum.GetValues(typeof(Fields)).Cast<Fields>().ToArray();
foreach (var field in fields)
{
writer.WriteStartElement(field.ToString());
switch (field)
{
case Fields.CustomerCostUnit: writer.WriteString(CustomerCostUnit); break;
case Fields.CustomerName: writer.WriteString(CustomerName); break;
case Fields.CustomerOrderNumber: writer.WriteString(CustomerOrderNumber); break;
case Fields.CustomerTestRefNumber: writer.WriteString(CustomerTestRefNumber); break;
case Fields.LastModified: writer.WriteString(LastModified.ToString(System.Globalization.CultureInfo.InvariantCulture)); break;
case Fields.LastModifiedBy: writer.WriteString(LastModifiedBy); break;
case Fields.LocalOnly: writer.WriteString(LocalOnly.ToString()); break;
case Fields.Name: writer.WriteString(Name); break;
case Fields.ProjectRefNumber: writer.WriteString(ProjectRefNumber); break;
case Fields.Version: writer.WriteString(Version.ToString(System.Globalization.CultureInfo.InvariantCulture)); break;
default: throw new NotSupportedException("CustomerDetails::WriteXML unsupported field " + field.ToString());
}
writer.WriteEndElement();
}
writer.WriteEndElement();
}
public static void DeleteCustomerDetails(string name = null)
{
try
{
var errorNumber = DTS.Common.Storage.DbOperations.CustomerDetailsDelete(name, out string errorMessage);
if (errorNumber != 0)
{
//APILogger.Log("Failed to delete customer details", errorMessage);
}
}
catch (Exception)
{
//APILogger.Log("Failed to delete customer details", ex);
}
}
}
}