using System;
using System.Globalization;
using Wayne.Lib;
using Wayne.Lib.Log;
namespace Wayne.ForecourtControl.Fusion
{
/*internal*/
public class FUSIONFuelling : IFuellingEx
{
// Fields
private decimal amount;
private long authorizationId;
private DateTime completionDateTime;
private int completionReason;
private int fuelGrade;
private int transactionId;
private int fuellingSequenceNumber;
private int fuelPeriodId;
private FUSIONManager manager;
private int nfsFillingType;
private FUSIONPump nfsPump;
private INozzle nozzle;
private PresetType presetType;
private decimal presetValue;
private decimal price;
private PriceGroup priceGroup;
private decimal quantity;
private int reservedBy;
private int authorizedBy;
private FuellingState state;
private FuellingType type;
private ushort _CRC;
private string signedReceiptLines;
private string signedReceiptLinesWide;
private byte reservingDeviceId;
private FuellingType reservingType;
internal string origMessageXml = null;
private readonly DebugLogger debugLogger;
// Methods
internal FUSIONFuelling(FUSIONManager manager, FUSIONPump pump)
{
this.manager = manager;
this.nfsPump = pump;
this.fuelGrade = 1;
this.presetType = PresetType.Amount;
this.priceGroup = ForecourtControl.PriceGroup.Unknown;
this.WritableReservedBy = 0;
this.WritableAuthorizedBy = 0;
this.WritableState = FuellingState.Unknown;
debugLogger = manager.DebugLogger;
}
internal void Dispose()
{
this.manager = null;
}
private void DebugLog(string s)
{
if (debugLogger.IsActive())
debugLogger.Add(s);
}
///
/// Gets the orig message XML.
///
///
/// The orig message XML.
///
public string OrigMessageXml
{
get { return origMessageXml; }
}
public void ReserveAsync(EventHandler fuellingReserveCompleted, object userToken)
{
// call LockFuelSaleTrx
// this.WritableReservedBy = this.manager.Id;
this.manager.ifsfManager.LockFuelSaleTrx(((FUSIONPump)(this.Pump)).realId, this.TransactionId, (int)(this.AuthorizationId), fuellingReserveCompleted, userToken, this);
}
private void SendFillingRequest(EventHandler requestCompleted, object userToken, ushort fid)
{
throw new NotImplementedException("SendFillingRequest - TODO");
}
public void SetAsPaidAsync(EventHandler requestCompleted, object userToken)
{
// call ClearFuelSaleTrx
DebugLog(string.Format("SetAsPaidAsync: transactionId={0}, fuellingSequenceNumber={1}, State={2}", this.transactionId, this.fuellingSequenceNumber, State));
this.manager.ifsfManager.ClearFuelSaleTrx(((FUSIONPump)(this.Pump)).realId, this.TransactionId, (int)(this.AuthorizationId), "", requestCompleted, userToken, this);
}
public void SetAsPaidAsync(string note, EventHandler requestCompleted, object userToken)
{
// call ClearFuelSaleTrx
DebugLog(string.Format("SetAsPaidAsync: transactionId={0}, fuellingSequenceNumber={1}, State={2}", this.transactionId, this.fuellingSequenceNumber, State));
this.manager.ifsfManager.ClearFuelSaleTrx(((FUSIONPump)(this.Pump)).realId, this.TransactionId, (int)(this.AuthorizationId), note, requestCompleted, userToken, this);
}
public override string ToString()
{
return this.ToString("", CultureInfo.InvariantCulture);
}
public string ToString(IFormatProvider provider)
{
return this.ToString("", provider);
}
public string ToString(string format)
{
return this.ToString(format, CultureInfo.InvariantCulture);
}
public string ToString(string format, IFormatProvider provider)
{
return ("Fuelling, Pump=" + this.nfsPump.Id.ToString(CultureInfo.InvariantCulture) + " SqN=" + this.fuellingSequenceNumber.ToString(CultureInfo.InvariantCulture) + " AuthId=" + this.authorizationId.ToString(CultureInfo.InvariantCulture));
}
public void TransferAsync(EventHandler requestCompleted, object userToken)
{
// does nothing on transfer operation but setting fuelling on state Transferred
DebugLog(string.Format("TransferAsync: transactionId={0}, fuellingSequenceNumber={1}, State={2}", this.transactionId, this.fuellingSequenceNumber, State));
if (this.State != FuellingState.Transferred)
{
this.WritableState = FuellingState.Transferred;
this.nfsPump.FireFuellingStateChange(this, this.WritableState);
}
if (requestCompleted != null)
requestCompleted(this, new AsyncCompletedEventArgs(true, userToken));
}
public void UndoTransferAsync(EventHandler requestCompleted, object userToken)
{
// does nothing on undotransfer operation but resetting fuelling on state PayableTransaction
if (this.State == FuellingState.Transferred)
this.WritableState = FuellingState.PayableTransaction;
if (requestCompleted != null)
requestCompleted(this, new AsyncCompletedEventArgs(true, userToken));
}
public void UnreserveAsync(EventHandler requestCompleted, object userToken)
{
// call UnlockFuelSaleTrx
//this.WritableReservedBy = 0;
this.manager.ifsfManager.UnlockFuelSaleTrx(((FUSIONPump)(this.Pump)).realId, this.TransactionId, (int)(this.AuthorizationId), requestCompleted, userToken, this);
}
// Properties
public decimal Amount
{
get
{
return this.amount;
}
}
public long AuthorizationId
{
get
{
return this.authorizationId;
}
}
public DateTime CompletionDateTime
{
get
{
return this.completionDateTime;
}
}
public int CompletionReason
{
get
{
return this.completionReason;
}
}
private bool Disposed
{
get
{
return (this.manager == null);
}
}
public int FuelGrade
{
get
{
if (manager.FuelGradeShift != 0)
return this.fuelGrade + manager.FuelGradeShift;
else
return this.fuelGrade;
}
}
public int TransactionId
{
get
{
return this.transactionId;
}
}
public int FuellingSequenceNumber
{
get
{
return this.fuellingSequenceNumber;
}
}
public int FuelPeriodId
{
get
{
return this.fuelPeriodId;
}
}
internal int NfsFillingType
{
get
{
return this.nfsFillingType;
}
set
{
this.nfsFillingType = value;
}
}
public INozzle Nozzle
{
get
{
return this.nozzle;
}
}
public PresetType PresetType
{
get
{
return this.presetType;
}
}
public decimal PresetValue
{
get
{
return this.presetValue;
}
}
public decimal Price
{
get
{
return this.price;
}
}
public int PriceGroup
{
get
{
return (int)this.priceGroup;
}
}
public IPump Pump
{
get
{
return this.nfsPump;
}
}
public PumpAccumulatorReading PumpAccumulator
{
get
{
return null;
}
}
public decimal Quantity
{
get
{
return this.quantity;
}
}
public int ReservedBy
{
get
{
return this.reservedBy;
}
}
public int AuthorizedBy
{
get
{
return this.authorizedBy;
}
}
public FuellingState State
{
get
{
return this.state;
}
}
public FuellingType Type
{
get
{
return this.type;
}
}
public ushort CRC
{
get
{
return this._CRC;
}
}
public string SignedReceiptLines
{
get
{
return this.signedReceiptLines;
}
}
public string SignedReceiptLinesWide
{
get
{
return this.signedReceiptLinesWide;
}
}
public byte ReservingDeviceId
{
get { return reservingDeviceId; }
}
internal decimal WritableAmount
{
get
{
return this.amount;
}
set
{
this.amount = value;
}
}
internal long WritableAuthorizationId
{
get
{
return this.authorizationId;
}
set
{
this.authorizationId = value;
}
}
internal DateTime WritableCompletionDateTime
{
get
{
return this.completionDateTime;
}
set
{
this.completionDateTime = value;
}
}
internal int WritableCompletionReason
{
get
{
return this.completionReason;
}
set
{
this.completionReason = value;
}
}
internal int WritableFuelGrade
{
get
{
return this.fuelGrade;
}
set
{
this.fuelGrade = value;
}
}
internal int WritableTransactionId
{
get
{
return this.transactionId;
}
set
{
this.transactionId = value;
}
}
internal int WritableFuellingSequenceNumber
{
get
{
return this.fuellingSequenceNumber;
}
set
{
this.fuellingSequenceNumber = value;
}
}
internal int WritableFuelPeriodId
{
get
{
return this.fuelPeriodId;
}
set
{
this.fuelPeriodId = value;
}
}
internal INozzle WritableNozzle
{
get
{
return this.nozzle;
}
set
{
this.nozzle = value;
}
}
internal PresetType WritablePresetType
{
get
{
return this.presetType;
}
set
{
this.presetType = value;
}
}
internal decimal WritablePresetValue
{
get
{
return this.presetValue;
}
set
{
this.presetValue = value;
}
}
internal decimal WritablePrice
{
get
{
return this.price;
}
set
{
this.price = value;
}
}
internal PriceGroup WritablePriceGroup
{
get
{
return this.priceGroup;
}
set
{
this.priceGroup = value;
}
}
internal decimal WritableQuantity
{
get
{
return this.quantity;
}
set
{
this.quantity = value;
}
}
internal int WritableReservedBy
{
get
{
return this.reservedBy;
}
set
{
this.reservedBy = value;
}
}
internal int WritableAuthorizedBy
{
get
{
return this.authorizedBy;
}
set
{
this.authorizedBy = value;
}
}
internal FuellingState WritableState
{
get
{
return this.state;
}
set
{
this.state = value;
}
}
internal FuellingType WritableType
{
get
{
return this.type;
}
set
{
this.type = value;
}
}
internal ushort WritableCRC
{
get
{
return this._CRC;
}
set
{
this._CRC = value;
}
}
internal string WritableSignedReceiptLines
{
get
{
return this.signedReceiptLines;
}
set
{
this.signedReceiptLines = value;
}
}
internal string WritableSignedReceiptLinesWide
{
get
{
return this.signedReceiptLinesWide;
}
set
{
this.signedReceiptLinesWide = value;
}
}
internal byte WritableReservingDeviceId
{
get { return reservingDeviceId; }
set { reservingDeviceId = value; }
}
internal FuellingType WritableReservingType
{
get { return reservingType; }
set { reservingType = value; }
}
public int convertStatus(int status)
{
// TODO
return status;
}
#region IFuelling Members
public byte PriceRevision
{
get { return 0; }
}
#endregion
}
}