tbf/SharedDatabase/Entities/OrderInfo.cs
2021-11-18 14:53:11 +01:00

264 lines
9.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using Common;
using SharedDatabase.Resources;
namespace SharedDatabase.Entities
{
public class OrderInfo : IParamsProvider
{
public virtual int Id { get; protected set; }
public virtual string POName { get; set; } /// 0
public virtual sbyte POState { get; set; } /// 1 0=New, 1=Active, 2=Finished
public virtual string Workflow { get; set; } /// 2
public virtual string TestProcedure { get; set; } /// 3
public virtual string VariantCode { get; set; } /// 4
public virtual int PiecesCount { get; set; } /// 5
public virtual string SNPrefix { get; set; } /// 6
public virtual int SNFirst { get; set; } /// 7
public virtual int SNDigitsCount { get; set; } /// 8
public virtual string SNSuffix { get; set; } /// 9
public virtual string RAPrefix { get; set; } /// 10
public virtual int RAFirst { get; set; } /// 11
public virtual int RADigitsCount { get; set; } /// 12
public virtual string RASuffix { get; set; } /// 13
public virtual int BaseNr1 { get; set; }
public virtual int BaseNr2 { get; set; }
public virtual int BaseNr3 { get; set; }
public virtual int BaseNr4 { get; set; }
public virtual int BaseNr5 { get; set; }
public virtual string Remark { get; set; } /// 14
public OrderInfo()
{
POName = string.Empty;
POState = (sbyte)OrderState.New;
InitializeAll();
}
public OrderInfo(string orderName)
{
POName = orderName;
POState = (sbyte)OrderState.New;
InitializeAll();
}
public virtual void InitializeAll()
{
Workflow = string.Empty;
TestProcedure = string.Empty;
VariantCode = string.Empty;
SNPrefix = string.Empty;
SNSuffix = string.Empty;
RAPrefix = string.Empty;
RASuffix = string.Empty;
Remark = string.Empty;
}
/// <summary>
/// All members are copied except of ID (so that NHibernate works properly).
/// List of groups is empty.
/// </summary>
/// <param name="newOrderNr">New order ID string</param>
/// <param name="targetPiecesCount">-1 = the same number of pieces as the original order</param>
/// <returns></returns>
public virtual IParamsProvider Clone()
{
var newOrder = new OrderInfo();
newOrder.POName = string.Empty;
newOrder.POState = (sbyte)OrderState.New;
newOrder.Workflow = Workflow;
newOrder.TestProcedure = TestProcedure;
newOrder.VariantCode = VariantCode;
newOrder.PiecesCount = PiecesCount;
newOrder.SNPrefix = SNPrefix;
newOrder.SNFirst = SNFirst + PiecesCount;
newOrder.SNDigitsCount = SNDigitsCount;
newOrder.SNSuffix = SNSuffix;
newOrder.RAPrefix = RAPrefix;
newOrder.RAFirst = RAFirst + PiecesCount;
newOrder.RADigitsCount = RADigitsCount;
newOrder.RASuffix = RASuffix;
newOrder.BaseNr1 = BaseNr1;
newOrder.BaseNr2 = BaseNr2;
newOrder.BaseNr3 = BaseNr3;
newOrder.BaseNr4 = BaseNr4;
newOrder.BaseNr5 = BaseNr5;
newOrder.Remark = Remark;
return newOrder;
}
public virtual XmlSerializer GetSerializer() { return null; }
public virtual string ComponentName { get { return POName; } }
string[] paramNames = new string[]
{
Strings.Order,
Strings.State,
Strings.Workflow,
Strings.Test_procedure,
Strings.Variant_code,
Strings.Pieces_count,
Strings.Serial_nr + " " + Strings.prefix,
Strings.Serial_nr + " " + Strings.first,
Strings.Serial_nr + " " + Strings.digits_count,
Strings.Serial_nr + " " + Strings.suffix,
Strings.Radio_address + " " + Strings.prefix,
Strings.Radio_address + " " + Strings.first,
Strings.Radio_address + " " + Strings.digits_count,
Strings.Radio_address + " " + Strings.suffix,
Strings.Remark,
};
public virtual string ParamName(int i) { return paramNames[i]; }
public virtual int ParamsCount() { return paramNames.Length; }
public virtual ICollection<string> ParamValues(int i)
{
var list = new List<string>();
switch (i)
{
default:
return null;
}
}
public virtual string ToString(int i)
{
switch (i)
{
case 0: return POName;
case 1: return ((OrderState)POState).ToString();
case 2: return Workflow;
case 3: return TestProcedure;
case 4: return VariantCode;
case 5: return PiecesCount.ToString();
case 6: return SNPrefix;
case 7: return SNFirst.ToString();
case 8: return SNDigitsCount.ToString();
case 9: return SNSuffix;
case 10: return RAPrefix;
case 11: return RAFirst.ToString();
case 12: return RADigitsCount.ToString();
case 13: return RASuffix;
case 14: return Remark;
default:
return string.Format("order={0} pcs={1} wflow={2} proc={3} vaco={4} #1={5} #2={6} #3={7} #4={8} #5={9} remark={10}",
POName, PiecesCount, Workflow, TestProcedure, VariantCode,
BaseNr1, BaseNr2, BaseNr3, BaseNr4, BaseNr5, Remark);
}
}
public virtual CfgUpdateFlags UpdateParam(int i, string str)
{
switch (i)
{
case 0:
POName = str;
return CfgUpdateFlags.RestartRqrd;
case 1:
POState = (sbyte)((str == OrderState.New.ToString()) ? OrderState.New :
(str == OrderState.Active.ToString()) ? OrderState.Active : OrderState.Finished);
return CfgUpdateFlags.RestartRqrd;
case 2:
Workflow = str;
return CfgUpdateFlags.RestartRqrd;
case 3:
TestProcedure = str;
return CfgUpdateFlags.RestartRqrd;
case 4:
VariantCode = str;
return CfgUpdateFlags.RestartRqrd;
case 5:
PiecesCount = int.Parse(str);
return CfgUpdateFlags.RestartRqrd;
case 6:
SNPrefix = str;
return CfgUpdateFlags.RestartRqrd;
case 7:
SNFirst = int.Parse(str);
return CfgUpdateFlags.RestartRqrd;
case 8:
SNDigitsCount = int.Parse(str);
return CfgUpdateFlags.RestartRqrd;
case 9:
SNSuffix = str;
return CfgUpdateFlags.RestartRqrd;
case 10:
RAPrefix = str;
return CfgUpdateFlags.RestartRqrd;
case 11:
RAFirst = int.Parse(str);
return CfgUpdateFlags.RestartRqrd;
case 12:
RADigitsCount = int.Parse(str);
return CfgUpdateFlags.RestartRqrd;
case 13:
RASuffix = str;
return CfgUpdateFlags.RestartRqrd;
case 14:
Remark = str;
return CfgUpdateFlags.RestartRqrd;
default:
return CfgUpdateFlags.None;
}
}
public virtual bool ValidateParam(int i, string str, out string message)
{
message = string.Empty;
int idummy;
switch (i)
{
case 0:
case 2:
case 3:
case 4:
/// nonempty string
if (!string.IsNullOrEmpty(str)) return true;
message = string.Format(Strings._0_should_not_be_empty, ParamName(i));
return false;
case 5:
case 8:
case 12:
/// positive integers
if (int.TryParse(str, out idummy) && idummy > 0) return true;
break;
case 6:
case 9:
case 10:
case 13:
case 14:
/// strings
return true;
case 7:
case 11:
/// non-negative integer
if (int.TryParse(str, out idummy) && idummy >= 0) return true;
break;
default:
message = "Invalid index";
return false;
}
message = string.Format(Strings.Invalid_0, ParamName(i));
return false;
}
public virtual bool UpdateEmbeddedDbEntity()
{
return true; /// =OK, do nothing
}
}
public enum OrderState : sbyte
{
New = 0,
Active = 1,
Finished = 2,
}
}