Class SaleInfoProvider
Implementation of ISaleInfo2; create through factory (see remarks)
Namespace: SuperOffice.CRM.Entities.Providers
Assembly: SoDataBase.dll
Syntax
public class SaleInfoProvider : Object, ISaleInfo3, ISaleInfo2, ISaleInfo
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.Properties
Amount
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public double Amount { get; }
Property Value
Type | Description |
---|---|
Double |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.Associate
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public string Associate { get; }
Property Value
Type | Description |
---|---|
String |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.AssociateId
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public int AssociateId { get; }
Property Value
Type | Description |
---|---|
Int32 |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.Competitor
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public string Competitor { get; }
Property Value
Type | Description |
---|---|
String |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.Cost
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public double Cost { get; }
Property Value
Type | Description |
---|---|
Double |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.CreatedAssociate
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public string CreatedAssociate { get; }
Property Value
Type | Description |
---|---|
String |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.Credited
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public string Credited { get; }
Property Value
Type | Description |
---|---|
String |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.Currency
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public string Currency { get; }
Property Value
Type | Description |
---|---|
String |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.CustomFields
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public Dictionary<string, string> CustomFields { get; }
Property Value
Type | Description |
---|---|
Dictionary<String, String> |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.Earning
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public double Earning { get; }
Property Value
Type | Description |
---|---|
Double |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.EarningPercent
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public double EarningPercent { get; }
Property Value
Type | Description |
---|---|
Double |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.HasGuide
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public bool HasGuide { get; }
Property Value
Type | Description |
---|---|
Boolean |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.HasStakeHolders
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public bool HasStakeHolders { get; }
Property Value
Type | Description |
---|---|
Boolean |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.NextDueDate
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public string NextDueDate { get; }
Property Value
Type | Description |
---|---|
String |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.Number
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public string Number { get; }
Property Value
Type | Description |
---|---|
String |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.Probability
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public short Probability { get; }
Property Value
Type | Description |
---|---|
Int16 |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.PublishActiveDate
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public DateTime PublishActiveDate { get; }
Property Value
Type | Description |
---|---|
DateTime |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.PublishEndDate
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public string PublishEndDate { get; }
Property Value
Type | Description |
---|---|
String |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.PublishStartDate
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public string PublishStartDate { get; }
Property Value
Type | Description |
---|---|
String |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.Reason
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public string Reason { get; }
Property Value
Type | Description |
---|---|
String |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.Registered
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public string Registered { get; }
Property Value
Type | Description |
---|---|
String |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.Sale
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public Sale Sale { get; }
Property Value
Type | Description |
---|---|
Sale |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.SaleDate
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public string SaleDate { get; }
Property Value
Type | Description |
---|---|
String |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.SaleId
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public int SaleId { get; }
Property Value
Type | Description |
---|---|
Int32 |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.SaleText
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public string SaleText { get; }
Property Value
Type | Description |
---|---|
String |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.Source
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public string Source { get; }
Property Value
Type | Description |
---|---|
String |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.Stage
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public string Stage { get; }
Property Value
Type | Description |
---|---|
String |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.Status
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public string Status { get; }
Property Value
Type | Description |
---|---|
String |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.Title
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public string Title { get; }
Property Value
Type | Description |
---|---|
String |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.Type
Implementation of ISaleInfo2; create through factory (see remarks)
Declaration
public string Type { get; }
Property Value
Type | Description |
---|---|
String |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.Methods
GetUserDefinedDecimal(Int32)
Return a user defined value of type decimal
Declaration
public string GetUserDefinedDecimal(int fieldNo)
Parameters
Type | Name | Description |
---|---|---|
Int32 | fieldNo | Index of field to retrieve value for |
Returns
Type | Description |
---|---|
String | String representation of the value of specified field |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.GetUserDefinedDecimal(String)
Get the decimal udef value based on the prog.id name of the udef field.
Declaration
public double GetUserDefinedDecimal(string progId)
Parameters
Type | Name | Description |
---|---|---|
String | progId | Program name of udef field |
Returns
Type | Description |
---|---|
Double | double value of field, or NAN if field not found |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.GetUserDefinedInt(Int32)
Return a user defined value of type int
Declaration
public string GetUserDefinedInt(int fieldNo)
Parameters
Type | Name | Description |
---|---|---|
Int32 | fieldNo | Index of field to retrieve value for |
Returns
Type | Description |
---|---|
String | String representation of the value of specified field |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.GetUserDefinedInt(String)
Get the int udef value based on the prog.id name of the udef field.
Declaration
public int GetUserDefinedInt(string progId)
Parameters
Type | Name | Description |
---|---|---|
String | progId | Program name of udef field |
Returns
Type | Description |
---|---|
Int32 | int value of field, or MINVALUE if field not found |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.GetUserDefinedString(Int32)
Return a user defined value of type string
Declaration
public string GetUserDefinedString(int fieldNo)
Parameters
Type | Name | Description |
---|---|---|
Int32 | fieldNo | Index of field to retrieve value for |
Returns
Type | Description |
---|---|
String | Value of specified field |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.GetUserDefinedString(String)
Get the string udef value based on the prog.id name of the udef field.
Declaration
public string GetUserDefinedString(string progId)
Parameters
Type | Name | Description |
---|---|---|
String | progId | Program name of udef field |
Returns
Type | Description |
---|---|
String | string value of field, or NULL if field not found |
Remarks
To create an instance of SaleInfoProvider, use
var info = ClassFactory.Create<ISaleInfo2>(sale);
where sale is a Sale, to use an already-loaded entity object (that may also contain unsaved data); or where sale is an int that is a saleId, which will cause database fetches. The factory methods at the bottom of this class will handle both cases.
If you are in the Cpp world, or otherwise have unsaved data that you would want to use without incurring the overhead of an entity object, instantiate a SimpleSaleInfo instead, fully populate it, and pass that to the factory.