using Edge.Core.IndustryStandardInterface.Pump;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Edge.Core.Database.Models
{
public enum FuelSaleTransactionState
{
Undefined = 0,
Payable = 1,
Locked = 2,
Paid = 3,
Cleared = 4,
}
public class FuelSaleTransaction
{
// FDC defined:
//SALE_TRX_UNDEFINED = 0,
//SALE_TRX_PAYABLE = 1,
//SALE_TRX_LOCKED = 2,
//SALE_TRX_PAID = 3,
//SALE_TRX_CLEARED = 4,
///
/// Gets or sets the release token for this trx, release token is an database unique
/// id for a trx, unlike `TransactionSeqNumberFromPhysicalPump`, it's a
/// device dependent and will be re-cyclely used by device, so there're may have multiple
/// trx in database with same `TransactionSeqNumberFromPhysicalPump`, but release token is
/// guranteed to be unique for a trx.
///
[Key]
public int ReleaseToken { get; set; }
public int PumpId { get; set; }
public int LogicalNozzleId { get; set; }
public string TransactionSeqNumberFromPhysicalPump { get; set; }
public FuelSaleTransactionState State { get; set; }
public string ProductBarcode { get; set; }
///
/// without decimal points
///
public int UnitPrice { get; set; }
///
/// without decimal points
///
public int Amount { get; set; }
///
/// without decimal points
///
public int Volumn { get; set; }
///
/// Gets or sets the Fdc Client WorkStationId which reserved this fuel point.
/// the Pos id is the workstation id parameter used in Fdc client connect to Fdc server, each client
/// should have an unique this id to distinguish from each other.
/// until 2017 Dec, the pos id is config in COS (web), model: SiteDevice , column: PosDeviceFdcClientId, once the android POS
/// downloaded this value via AccessToken web service, it will be deducted with 100, and then plus 110, like you config the id in
/// COS is 109, then in fdc client connection, the final value will be 119.
///
public string LockedByFdcClientId { get; set; }
public DateTime? LockedTime { get; set; }
public string AuthorizedByFdcClientId { get; set; }
public DateTime? AuthorizedTime { get; set; }
public string PaidByFdcClientId { get; set; }
public DateTime? PaidTime { get; set; }
public DateTime? SaleStartTime { get; set; }
public DateTime? SaleEndTime { get; set; }
///
/// the money amount totalizer value after this new trx done, without decimal points
///
public int AmountTotalizer { get; set; }
///
/// the volume amount totalizer value after this new trx done, without decimal points
///
public int VolumeTotalizer { get; set; }
public override string ToString()
{
return $"ReleaseToken: {ReleaseToken }, PumpId: {PumpId }, logicalNozzleId: {LogicalNozzleId }, " +
$"seqNo: { (TransactionSeqNumberFromPhysicalPump ?? "")}, state: {State }, amount: {Amount }, " +
$"LockedByFdcClientId: { (LockedByFdcClientId ?? "")}, LockedTime: {(LockedTime?.ToShortTimeString() ?? "") }, " +
$"AuthorizedByFdcClientId: { (AuthorizedByFdcClientId ?? "")}, PaidByFdcClientId: { (PaidByFdcClientId ?? "")}, " +
$"SaleEndTime: {SaleEndTime?.ToString("yyyy-MM-dd HH:mm:ss fff") ?? ""}";
}
}
public class FuelSaleTransactionResponse
{
// FDC defined:
//SALE_TRX_UNDEFINED = 0,
//SALE_TRX_PAYABLE = 1,
//SALE_TRX_LOCKED = 2,
//SALE_TRX_PAID = 3,
//SALE_TRX_CLEARED = 4,
private FuelSaleTransactionResponse(FuelSaleTransaction fuelSaleTransaction,
IFdcPumpController fdcPumpController)
{
ReleaseToken = fuelSaleTransaction.ReleaseToken;
PumpId = fuelSaleTransaction.PumpId;
LogicalNozzleId = fuelSaleTransaction.LogicalNozzleId;
TransactionSeqNumberFromPhysicalPump = fuelSaleTransaction.TransactionSeqNumberFromPhysicalPump;
State = fuelSaleTransaction.State;
ProductBarcode = fuelSaleTransaction.ProductBarcode;
UnitPrice = (decimal)(fuelSaleTransaction.UnitPrice / Math.Pow(10, fdcPumpController.PriceDecimalDigits));
Amount = (decimal)(fuelSaleTransaction.Amount / Math.Pow(10, fdcPumpController.AmountDecimalDigits));
Volumn = (decimal)(fuelSaleTransaction.Volumn / Math.Pow(10, fdcPumpController.VolumeDecimalDigits));
LockedByFdcClientId = fuelSaleTransaction.LockedByFdcClientId;
LockedTime = fuelSaleTransaction.LockedTime;
AuthorizedByFdcClientId = fuelSaleTransaction.AuthorizedByFdcClientId;
AuthorizedTime = fuelSaleTransaction.AuthorizedTime;
PaidTime = fuelSaleTransaction.PaidTime;
SaleStartTime = fuelSaleTransaction.SaleStartTime;
SaleEndTime = fuelSaleTransaction.SaleEndTime;
AmountTotalizer = (decimal)(fuelSaleTransaction.AmountTotalizer / Math.Pow(10, fdcPumpController.AmountDecimalDigits));
VolumeTotalizer = (decimal)(fuelSaleTransaction.VolumeTotalizer / Math.Pow(10, fdcPumpController.VolumeTotalizerDecimalDigits));
}
public static FuelSaleTransactionResponse CreateInstance(FuelSaleTransaction fuelSaleTransaction,
IFdcPumpController fdcPumpController)
{
return new FuelSaleTransactionResponse(fuelSaleTransaction, fdcPumpController);
}
///
/// Gets or sets the release token for this trx, release token is an database unique
/// id for a trx, unlike `TransactionSeqNumberFromPhysicalPump`, it's a
/// device dependent and will be re-cyclely used by device, so there're may have multiple
/// trx in database with same `TransactionSeqNumberFromPhysicalPump`, but release token is
/// guranteed to be unique for a trx.
///
[Key]
public int ReleaseToken { get; set; }
public int PumpId { get; set; }
public int LogicalNozzleId { get; set; }
public string TransactionSeqNumberFromPhysicalPump { get; set; }
public FuelSaleTransactionState State { get; set; }
public string ProductBarcode { get; set; }
///
/// without decimal points
///
public decimal UnitPrice { get; set; }
///
/// without decimal points
///
public decimal Amount { get; set; }
///
/// without decimal points
///
public decimal Volumn { get; set; }
///
/// Gets or sets the Fdc Client WorkStationId which reserved this fuel point.
/// the Pos id is the workstation id parameter used in Fdc client connect to Fdc server, each client
/// should have an unique this id to distinguish from each other.
/// until 2017 Dec, the pos id is config in COS (web), model: SiteDevice , column: PosDeviceFdcClientId, once the android POS
/// downloaded this value via AccessToken web service, it will be deducted with 100, and then plus 110, like you config the id in
/// COS is 109, then in fdc client connection, the final value will be 119.
///
public string LockedByFdcClientId { get; set; }
public DateTime? LockedTime { get; set; }
public string AuthorizedByFdcClientId { get; set; }
public DateTime? AuthorizedTime { get; set; }
public string PaidByFdcClientId { get; set; }
public DateTime? PaidTime { get; set; }
public DateTime? SaleStartTime { get; set; }
public DateTime? SaleEndTime { get; set; }
///
/// the money amount totalizer value after this new trx done, without decimal points
///
public decimal AmountTotalizer { get; set; }
///
/// the volume amount totalizer value after this new trx done, without decimal points
///
public decimal VolumeTotalizer { get; set; }
public override string ToString()
{
return "ReleaseToken: " + ReleaseToken + ", PumpId: " + PumpId + ", logicalNozzleId: " + LogicalNozzleId + ", seqNo: " + (TransactionSeqNumberFromPhysicalPump ?? "")
+ ", state: " + State + ", amount: " + Amount + ", LockedByFdcClientId: " + (LockedByFdcClientId ?? "")
+ "LockedTime: " + (LockedTime?.ToShortTimeString() ?? "") + ", AuthorizedByFdcClientId: " + (AuthorizedByFdcClientId ?? "")
+ ", PaidByFdcClientId: " + (PaidByFdcClientId ?? "");
}
}
}