3.0.1.0 Portal Transactions.
This commit is contained in:
@@ -828,4 +828,13 @@
|
||||
<data name="label.raised.by" xml:space="preserve">
|
||||
<value>Raised by</value>
|
||||
</data>
|
||||
<data name="label.requirements" xml:space="preserve">
|
||||
<value>Requirements</value>
|
||||
</data>
|
||||
<data name="label.requirement" xml:space="preserve">
|
||||
<value>Requirement</value>
|
||||
</data>
|
||||
<data name="caption.item.requirements" xml:space="preserve">
|
||||
<value>{0} Items</value>
|
||||
</data>
|
||||
</root>
|
||||
+34
-6
@@ -1,5 +1,4 @@
|
||||
using DocumentFormat.OpenXml.EMMA;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Sarand.BusinessMgr.Net.Standard.Base.App;
|
||||
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
|
||||
using Sarand.BusinessMgr.Web.Portal.Components;
|
||||
@@ -13,6 +12,7 @@ using Sarand.Net.Standard.Base.Security;
|
||||
using Sarand.Net.Standard.Base.Utils;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace Sarand.BusinessMgr.Web.Portal.Controllers.Transactions
|
||||
{
|
||||
@@ -150,7 +150,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Transactions
|
||||
responseData.Data.TransactionTypes.Add(new AjaxResponse_Data.ItemCodeDesc(transactionType.Code, transactionType.Desc));
|
||||
|
||||
// Reference data - statuses.
|
||||
foreach (SaStatus status in SbmTransaction.ValidStatuses().FindAll(item => item != SaStatus.Deleted))
|
||||
foreach (SaStatus status in SbmTransaction.ValidStatusesByType(model.GetFilterTransactionType()).Where(item => item != SaStatus.Deleted))
|
||||
responseData.Data.Statuses.Add(new AjaxResponse_Data.ItemCodeDesc(SacsSystem.GetStatusCode(status), Localiser.GetStatusCaption(status)));
|
||||
responseData.Data.DefaultStatusCode = SacsSystem.GetStatusCode(SbmTransaction.DefaultStatus);
|
||||
}
|
||||
@@ -218,7 +218,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Transactions
|
||||
else prmTransaction.StatusCat = SbmTransaction.StatusCat.NotDeleted;
|
||||
if (model.GetFilterTransactionType() <= 0)
|
||||
prmTransaction.SortColumns.Add(TransactionMgr.GetTransactionColumnDfn(SbmTransaction.Column.Type_Desc));
|
||||
prmTransaction.SortColumns.Add(TransactionMgr.GetTransactionColumnDfn(SbmTransaction.Column.Ref));
|
||||
prmTransaction.SortColumns.Add(TransactionMgr.GetTransactionColumnDfn(SbmTransaction.Column.RaisedOn).SetSortDescending());
|
||||
model.Paging.ItemTotal = (ulong)TransactionMgr.GetTransactionCount(prmTransaction);
|
||||
model.PopulatePagingTo(prmTransaction.ResultsPaging);
|
||||
|
||||
@@ -407,6 +407,11 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Transactions
|
||||
return Json(responseData.SetGoHome(messageTitle, Localiser["msg.error.system"]));
|
||||
}
|
||||
transaction = TransactionMgr.CreateTransaction(associationId, model.GetTransactionType());
|
||||
if (transaction == null)
|
||||
{
|
||||
SaLogger.Warn($"{SysUtil.Fn} Failed to create Transaction. {TransactionMgr.ErrorStateMessage.TrimEnd('.')}.");
|
||||
return Json(responseData.SetGoHome(messageTitle, Localiser["msg.error.system"]));
|
||||
}
|
||||
}
|
||||
|
||||
// Populate item properties.
|
||||
@@ -416,11 +421,34 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Transactions
|
||||
transaction.RefExt = model.Transaction.ReferenceExt;
|
||||
if (model.Transaction.DescBrief != null)
|
||||
transaction.DescBrief = model.Transaction.DescBrief;
|
||||
if (model.Transaction.RaisedBy != null)
|
||||
transaction.RaisedBy = model.Transaction.RaisedBy;
|
||||
if (model.Transaction.ContactName != null)
|
||||
transaction.ContactName = model.Transaction.ContactName;
|
||||
|
||||
// Status & dates.
|
||||
if (model.Transaction.StatusCode != null)
|
||||
transaction.Status = model.GetTransactionStatus();
|
||||
// Raised date.
|
||||
if (model.Transaction.Raised != null)
|
||||
transaction.Raised = model.ParseDateFromForm(model.Transaction.Raised);
|
||||
if (transaction.TransactionStatusCat == SbmTransaction.StatusCat.Pending)
|
||||
transaction.InProgress = DateTime.MinValue;
|
||||
else
|
||||
{
|
||||
// In Progress date.
|
||||
if (model.Transaction.InProgress != null)
|
||||
transaction.InProgress = model.ParseDateFromForm(model.Transaction.InProgress);
|
||||
// Closed date.
|
||||
if (transaction.TransactionStatusCat == SbmTransaction.StatusCat.Closed)
|
||||
transaction.Closed = DateTime.MinValue;
|
||||
else if (model.Transaction.Closed != null)
|
||||
transaction.Closed = model.ParseDateFromForm(model.Transaction.Closed);
|
||||
}
|
||||
|
||||
// Common properties.
|
||||
if (model.Transaction.Notes != null)
|
||||
transaction.Notes = model.Transaction.Notes;
|
||||
if (model.Transaction.StatusCode != null)
|
||||
transaction.Status = model.GetTransactionStatus();
|
||||
|
||||
// Store item.
|
||||
if (!SysId.IsValid(transaction.Id))
|
||||
|
||||
@@ -17,6 +17,7 @@ using System.Threading.Tasks;
|
||||
using Sarand.BusinessMgr.Web.Portal.Models.Transactions;
|
||||
using Sarand.BusinessMgr.Web.Portal.Components;
|
||||
using Sarand.Net.Standard.Base.Core;
|
||||
using System.Transactions;
|
||||
|
||||
namespace Sarand.BusinessMgr.Web.Portal.Controllers.Transactions
|
||||
{
|
||||
@@ -55,7 +56,13 @@ namespace Sarand.BusinessMgr.Web.Portal.Controllers.Transactions
|
||||
// Transaction page.
|
||||
Model_Transaction model = new Model_Transaction(Localiser);
|
||||
RefreshModel(model);
|
||||
model.Filter.TransactionType = transactionTypes.GetCodeForType(transactionType);
|
||||
model.Filter.Type = transactionTypes.GetCodeForType(transactionType);
|
||||
if (StringUtil.IsBlank(model.Filter.Type))
|
||||
{
|
||||
SaLogger.Warn($"{SysUtil.Fn} Transaction View invoked without Transaction Type specified.");
|
||||
return RedirectToAction("", "");
|
||||
}
|
||||
model.Filter.StatusCat = Internals.GetSystemCodes(Sbm.SystemCode.TransactionStatusCat).GetCodeForType(SbmTransaction.StatusCat.Open);
|
||||
model.Paging.PageNo = SessionData_Portal.Profile.Transaction.Filter.PageNo;
|
||||
model.Paging.PageLength = SessionData_Portal.Profile.Transaction.Filter.PageLength;
|
||||
model.PopulateListConfig();
|
||||
|
||||
@@ -0,0 +1,520 @@
|
||||
using Sarand.BusinessMgr.Net.Standard.Base.App;
|
||||
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
|
||||
using Sarand.Net.Standard.Base.Bus;
|
||||
using Sarand.Net.Standard.Base.Utils;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
|
||||
namespace Sarand.BusinessMgr.Web.Portal.Models.Requirements
|
||||
{
|
||||
//=======================================================================
|
||||
// Requirement model - Configuration.
|
||||
//=======================================================================
|
||||
partial class Model_Requirement
|
||||
{
|
||||
//-------------------------------------------------------------------
|
||||
// Requirement fields.
|
||||
//-------------------------------------------------------------------
|
||||
|
||||
/// <summary>Prefix for field names.</summary>
|
||||
public const String FieldNamePrefix = "Reqnt";
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
/// <summary>Item fields.</summary>
|
||||
public enum ItemField
|
||||
{
|
||||
// Identity.
|
||||
Pos,
|
||||
Id,
|
||||
TransactionId,
|
||||
AssociationName,
|
||||
AssociationId,
|
||||
Type,
|
||||
Sequence,
|
||||
JobNumber,
|
||||
// Source requirement.
|
||||
SourceReqntId,
|
||||
SourceReqntTransRef,
|
||||
SourceReqntTransRefExt,
|
||||
SourceReqntJobNumber,
|
||||
// Status dates.
|
||||
Required, RequiredFmt,
|
||||
Started, StartedFmt,
|
||||
Completed, CompletedFmt,
|
||||
// Details.
|
||||
AssociationIdSubContract,
|
||||
DescBrief,
|
||||
DescIntro,
|
||||
DescOutline,
|
||||
DescDetail,
|
||||
PromotionCode,
|
||||
PromotionCaption,
|
||||
NominalCode,
|
||||
RandDIndicator,
|
||||
// Commodity.
|
||||
CommodityId,
|
||||
ProductCode,
|
||||
DrawingIssue,
|
||||
AssetId,
|
||||
Quantity,
|
||||
QuantityProd,
|
||||
UomId,
|
||||
MaterialSourceCode,
|
||||
LocationIdStock,
|
||||
AllocationIndicator,
|
||||
// Amounts.
|
||||
AmountUnit,
|
||||
AmountAct,
|
||||
AmountDisc,
|
||||
AmountNet,
|
||||
TaxCodeId,
|
||||
TaxRate,
|
||||
AmountTax,
|
||||
AmountTot,
|
||||
TimeEst,
|
||||
TimeAct,
|
||||
TimeTot,
|
||||
// Costs.
|
||||
CostLabourHours,
|
||||
CostLabourRateHour,
|
||||
CostLabour,
|
||||
CostCommodity,
|
||||
CostPurchase,
|
||||
CostProcess,
|
||||
CostAdditional,
|
||||
CostTotal,
|
||||
CostCalculated,
|
||||
CostPercentMargin,
|
||||
// Common.
|
||||
Notes,
|
||||
Status,
|
||||
OnHold,
|
||||
CreatedOn,
|
||||
UpdatedOn,
|
||||
Actions,
|
||||
//---------------------------------------------------------------
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Identifier used by form fields to show control specific messages generated by model validation etc.
|
||||
/// <para>- Both page and model should use this method to consistently generate the field name.</para>
|
||||
/// </summary>
|
||||
public static String GetFieldName(ItemField field)
|
||||
{
|
||||
return $"{FieldNamePrefix}{field}";
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
|
||||
// List configuration.
|
||||
public class ListConfigData
|
||||
{
|
||||
// List caption.
|
||||
public String Caption { get; set; }
|
||||
// Actions.
|
||||
public class ActionData
|
||||
{
|
||||
public class AllowData
|
||||
{
|
||||
public bool? Create { get; set; }
|
||||
public bool? Update { get; set; }
|
||||
}
|
||||
public AllowData Allow { get; } = new AllowData();
|
||||
}
|
||||
public ActionData Action { get; } = new ActionData();
|
||||
// List columns.
|
||||
public class ColumnData
|
||||
{
|
||||
// Column name prefix.
|
||||
public String Prefix { get; } = Model_Requirement.FieldNamePrefix;
|
||||
// Hide column.
|
||||
public HashSet<string> Hide { get; } = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
|
||||
// Column labels.
|
||||
public Dictionary<String, String> Label { get; } = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase);
|
||||
}
|
||||
public ColumnData Column { get; } = new ColumnData();
|
||||
}
|
||||
public ListConfigData ListConfig { get; private set; }
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
/// <summary>
|
||||
/// Populate Requirement list configuration data in this model - only required on initial page construction.
|
||||
/// </summary>
|
||||
public void PopulateListConfig()
|
||||
{
|
||||
ListConfig = new ListConfigData();
|
||||
PopulateListConfig(ListConfig);
|
||||
}
|
||||
/// <summary>
|
||||
/// Populate Requirement list configuration data.
|
||||
/// </summary>
|
||||
public void PopulateListConfig(ListConfigData config)
|
||||
{
|
||||
// View properties.
|
||||
ViewMode viewMode = GetFilterMode();
|
||||
bool modeIsSearch = viewMode == ViewMode.Search;
|
||||
bool modeIsMaintain = viewMode == ViewMode.Maintain;
|
||||
bool modeIsProductionControl = viewMode == ViewMode.ProductionControl;
|
||||
bool modeIsCommodityHistory_Maintain = viewMode == ViewMode.CommodityHistory_Maintain;
|
||||
bool modeIsCommodityHistory_ReadOnly = viewMode == ViewMode.CommodityHistory_ReadOnly;
|
||||
bool modeIsCommodityHistory = modeIsCommodityHistory_Maintain || modeIsCommodityHistory_ReadOnly;
|
||||
bool modeIsAssetOrders_Maintain = viewMode == ViewMode.AssetOrders_Maintain;
|
||||
bool modeIsAssetOrders_ReadOnly = viewMode == ViewMode.AssetOrders_ReadOnly;
|
||||
bool modeIsAssetOrders = modeIsAssetOrders_Maintain || modeIsAssetOrders_ReadOnly;
|
||||
|
||||
// Transaction.
|
||||
Sbm.TransactionType transactionType = GetFilterTransactionType();
|
||||
SbmTransaction.StatusCat transactionStatusCat = GetFilterTransactionStatusCat();
|
||||
bool isProject = transactionType == Sbm.TransactionType.Project;
|
||||
bool isSales = SbmTransaction.IsSalesType(transactionType);
|
||||
bool isSalesLead = transactionType == Sbm.TransactionType.SalesLead;
|
||||
bool isSalesQuote = transactionType == Sbm.TransactionType.SalesQuote;
|
||||
bool isSalesOrder = transactionType == Sbm.TransactionType.SalesOrder || transactionType == Sbm.TransactionType.ProformaSalesOrder;
|
||||
bool isSalesPO = transactionType == Sbm.TransactionType.SalesPO;
|
||||
bool isSalesDispatch = transactionType == Sbm.TransactionType.SalesDispatch;
|
||||
bool isSalesInvoice = transactionType == Sbm.TransactionType.SalesInvoice || transactionType == Sbm.TransactionType.ProformaSalesInvoice;
|
||||
bool isPurchase = SbmTransaction.IsPurchaseType(transactionType);
|
||||
bool isPurchaseQuote = transactionType == Sbm.TransactionType.PurchaseQuote;
|
||||
bool isPurchaseOrder = transactionType == Sbm.TransactionType.PurchaseOrder || transactionType == Sbm.TransactionType.ProformaPurchaseOrder;
|
||||
bool isPurchaseSO = transactionType == Sbm.TransactionType.PurchaseSO;
|
||||
bool isPurchaseDelivery = transactionType == Sbm.TransactionType.PurchaseDelivery;
|
||||
bool isPurchaseInvoice = transactionType == Sbm.TransactionType.PurchaseInvoice || transactionType == Sbm.TransactionType.ProformaPurchaseInvoice;
|
||||
|
||||
// Requirement.
|
||||
Sbm.RequirementType requirementType = GetFilterRequirementType();
|
||||
SbmRequirement.StatusCat requirementStatusCat = GetFilterRequirementStatusCat();
|
||||
|
||||
// Options.
|
||||
bool userCanCreateRequirements = SessionData_Portal.SecurityProfile.UserCanCreateItemType(Sbm.ItemType.Requirement);
|
||||
bool userCanUpdateRequirements = SessionData_Portal.SecurityProfile.UserCanUpdateItemType(Sbm.ItemType.Requirement);
|
||||
bool allowJobNumber = SessionConsole.AllowOption(Sbm.ConfigOption.SalesOrderItemJobNumber);
|
||||
bool showDrawingIssue = SessionConsole.DisplayAttribute(SbmDbDfn.ColumnIdx.Commodity_DrawingIssue);
|
||||
bool showAllocationInd = SessionConsole.GetOwnerOption_ShowColumn(Sbm.OrgOption_ShowColumn.OrderItem_AllocationInd);
|
||||
SbmStockControlConfig stockControlConfig = Internals.StockControlConfig;
|
||||
bool allowProductionControl = SessionConsole.AllowOption(Sbm.ConfigOption.ProductionControl);
|
||||
bool allowTimeRecording = SessionConsole.AllowOption(Sbm.ConfigOption.TimeRecording);
|
||||
bool allowCommodityPromotions = SessionConsole.AllowOption(Sbm.ConfigOption.CommodityPromotion);
|
||||
bool allowJobCosting = SessionConsole.GetRequirementCostingConfig().AllowRequirementCosting(transactionType) && TransactionMgr.CostColumnsAreAvailable() && UserCanViewFinancials();
|
||||
bool allowSalesOrderItemRandD = SessionConsole.AllowOption(Sbm.ConfigOption.SalesOrderItemRandD);
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// List Caption.
|
||||
config.Caption = StringUtil.OnBlank(GetListCaptionByTransactionType(transactionType), Localiser["label.requirements"]);
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// Actions.
|
||||
|
||||
if (userCanCreateRequirements)
|
||||
config.Action.Allow.Create = true;
|
||||
if (userCanUpdateRequirements)
|
||||
config.Action.Allow.Update = true;
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// Requirement list columns.
|
||||
|
||||
// Position.
|
||||
|
||||
// Id
|
||||
if (!SbmSystem.DebugMode)
|
||||
config.Column.Hide.Add($"{ItemField.Id}");
|
||||
|
||||
// Sequence - Maintain mode.
|
||||
if (modeIsMaintain)
|
||||
{
|
||||
// Sequence column shown.
|
||||
}
|
||||
else config.Column.Hide.Add($"{ItemField.Sequence}");
|
||||
|
||||
// Job Number - Only Sales Orders and not Search/Production/Asset modes.
|
||||
if (isSalesOrder && !modeIsSearch && !modeIsProductionControl && !modeIsAssetOrders && allowJobNumber)
|
||||
{
|
||||
// Job Number column shown.
|
||||
}
|
||||
else config.Column.Hide.Add($"{ItemField.JobNumber}");
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// Source Requirement references - Sales Dispatch/Invoice not in Search/Production/Asset modes.
|
||||
if ((isSalesDispatch || isSalesInvoice) && !modeIsSearch && !modeIsProductionControl && !modeIsAssetOrders)
|
||||
{
|
||||
// Source requirement references shown.
|
||||
if (!allowJobNumber)
|
||||
config.Column.Hide.Add($"{ItemField.SourceReqntJobNumber}");
|
||||
}
|
||||
else
|
||||
{
|
||||
config.Column.Hide.Add($"{ItemField.SourceReqntTransRef}");
|
||||
config.Column.Hide.Add($"{ItemField.SourceReqntTransRefExt}");
|
||||
config.Column.Hide.Add($"{ItemField.SourceReqntJobNumber}");
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// Product code - not in Commodity/Asset modes.
|
||||
if (!modeIsCommodityHistory && !modeIsAssetOrders)
|
||||
{
|
||||
// Product Code is shown.
|
||||
}
|
||||
else config.Column.Hide.Add($"{ItemField.ProductCode}");
|
||||
|
||||
// Drawing Issue - not Assets modes.
|
||||
if (showDrawingIssue && !modeIsAssetOrders)
|
||||
{
|
||||
// Drawing Issue is shown.
|
||||
}
|
||||
else config.Column.Hide.Add($"{ItemField.DrawingIssue}");
|
||||
|
||||
// Description - always shown.
|
||||
|
||||
// Required - Sales Quote/Order, Purchase Order.
|
||||
if (isSalesQuote || isSalesOrder || isPurchaseOrder)
|
||||
{
|
||||
// Required is shown.
|
||||
}
|
||||
else
|
||||
{
|
||||
config.Column.Hide.Add($"{ItemField.Required}");
|
||||
config.Column.Hide.Add($"{ItemField.RequiredFmt}");
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// Quantity - always shown.
|
||||
|
||||
// Production Quantity - Sales Quote/Order not in Assets mode.
|
||||
if (allowProductionControl && (isSalesQuote || isSalesOrder) && !modeIsAssetOrders)
|
||||
{
|
||||
// Production Quantity is shown.
|
||||
}
|
||||
else config.Column.Hide.Add($"{ItemField.QuantityProd}");
|
||||
|
||||
// Allocation Indicator - Sales/Purchase Order not in Assets mode.
|
||||
if (stockControlConfig.AllowStockControl() && showAllocationInd && (isSalesOrder || isPurchaseOrder) && transactionStatusCat != SbmTransaction.StatusCat.Pending && !modeIsAssetOrders)
|
||||
{
|
||||
// Allocation Indicator is shown.
|
||||
}
|
||||
else config.Column.Hide.Add($"{ItemField.AllocationIndicator}");
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// Financials.
|
||||
|
||||
// Unit Amount.
|
||||
if (UserCanViewFinancials())
|
||||
{
|
||||
// Unit Amount is shown.
|
||||
}
|
||||
else config.Column.Hide.Add($"{ItemField.AmountUnit}");
|
||||
|
||||
// Net Amount - Maintain mode only.
|
||||
if (UserCanViewFinancials() && modeIsMaintain)
|
||||
{
|
||||
// Unit Amount is shown.
|
||||
}
|
||||
else config.Column.Hide.Add($"{ItemField.AmountNet}");
|
||||
|
||||
// Tax Amount - Maintain mode only.
|
||||
if (UserCanViewFinancials() && isSalesInvoice && modeIsMaintain)
|
||||
{
|
||||
// Tax Amount is shown.
|
||||
}
|
||||
else config.Column.Hide.Add($"{ItemField.AmountTax}");
|
||||
|
||||
// Total Amount - Maintain mode only.
|
||||
if (UserCanViewFinancials() && !isSalesDispatch && !isPurchaseQuote && !isPurchaseOrder && modeIsMaintain)
|
||||
{
|
||||
// Total Amount is shown.
|
||||
}
|
||||
else config.Column.Hide.Add($"{ItemField.AmountTot}");
|
||||
|
||||
//---------------------------------------------------------------
|
||||
|
||||
// Research & Development Indicator.
|
||||
if (isSalesOrder && allowSalesOrderItemRandD && modeIsMaintain)
|
||||
{
|
||||
// R&D Indicator is shown.
|
||||
}
|
||||
else config.Column.Hide.Add($"{ItemField.RandDIndicator}");
|
||||
|
||||
// Time columns.
|
||||
|
||||
// Estimated Time.
|
||||
if ((isProject || isSalesQuote || isSalesOrder) && allowProductionControl && modeIsMaintain)
|
||||
{
|
||||
// Estimated Time is shown.
|
||||
}
|
||||
else config.Column.Hide.Add($"{ItemField.TimeEst}");
|
||||
|
||||
// Actual time.
|
||||
if (isSalesOrder && allowProductionControl && modeIsMaintain)
|
||||
{
|
||||
// Actual Time is shown.
|
||||
}
|
||||
else config.Column.Hide.Add($"{ItemField.TimeAct}");
|
||||
|
||||
// Total time.
|
||||
if ((isProject || isSalesOrder) && allowTimeRecording && modeIsMaintain)
|
||||
{
|
||||
// Total Time is shown.
|
||||
}
|
||||
else config.Column.Hide.Add($"{ItemField.TimeTot}");
|
||||
|
||||
// Job Costing.
|
||||
if (allowJobCosting && modeIsMaintain)
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
config.Column.Hide.Add($"{ItemField.CostTotal}");
|
||||
config.Column.Hide.Add($"{ItemField.CostPercentMargin}");
|
||||
}
|
||||
|
||||
// Promotions.
|
||||
if (allowCommodityPromotions && modeIsMaintain)
|
||||
{
|
||||
// Promotion is shown.
|
||||
}
|
||||
else
|
||||
{
|
||||
config.Column.Hide.Add($"{ItemField.PromotionCode}");
|
||||
config.Column.Hide.Add($"{ItemField.PromotionCaption}");
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// Common.
|
||||
|
||||
// Status.
|
||||
if (!isSalesDispatch && !isSalesInvoice && !isPurchaseInvoice && modeIsMaintain)
|
||||
{
|
||||
// Status is shown.
|
||||
}
|
||||
else config.Column.Hide.Add($"{ItemField.Status}");
|
||||
|
||||
// Actions.
|
||||
if (modeIsMaintain)
|
||||
{
|
||||
// Actions are shown.
|
||||
}
|
||||
else config.Column.Hide.Add($"{ItemField.Actions}");
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
private String GetListCaptionByTransactionType(Sbm.TransactionType transactionType)
|
||||
{
|
||||
String transactionTypeCaption = GetTransactionTypeCaption(transactionType);
|
||||
if (!StringUtil.IsBlank(transactionTypeCaption))
|
||||
return Localiser.GetText("caption.item.requirements", new object[] { transactionTypeCaption });
|
||||
return Localiser["label.requirements"];
|
||||
}
|
||||
private String GetTransactionTypeCaption(Sbm.TransactionType transactionType)
|
||||
{
|
||||
switch (transactionType)
|
||||
{
|
||||
case Sbm.TransactionType.Project: return Localiser["caption.projects"];
|
||||
case Sbm.TransactionType.SalesLead: return Localiser["caption.sales.leads"];
|
||||
case Sbm.TransactionType.SalesQuote: return Localiser["caption.sales.quotes"];
|
||||
case Sbm.TransactionType.ProformaSalesOrder: return Localiser["caption.proforma.sales.orders"];
|
||||
case Sbm.TransactionType.SalesPO: return Localiser["caption.sales.purchase.orders"];
|
||||
case Sbm.TransactionType.SalesOrder: return Localiser["caption.sales.orders"];
|
||||
case Sbm.TransactionType.SalesDispatch: return Localiser["caption.sales.dispatches"];
|
||||
case Sbm.TransactionType.ProformaSalesInvoice: return Localiser["caption.proforma.sales.invoices"];
|
||||
case Sbm.TransactionType.SalesInvoice: return Localiser["caption.sales.invoices"];
|
||||
case Sbm.TransactionType.PurchaseQuote: return Localiser["caption.purchase.quotes"];
|
||||
case Sbm.TransactionType.ProformaPurchaseOrder: return Localiser["caption.proforma.purchase.orders"];
|
||||
case Sbm.TransactionType.PurchaseSO: return Localiser["caption.purchase.sales.orders"];
|
||||
case Sbm.TransactionType.PurchaseOrder: return Localiser["caption.purchase.orders"];
|
||||
case Sbm.TransactionType.PurchaseDelivery: return Localiser["caption.purchase.deliveries"];
|
||||
case Sbm.TransactionType.ProformaPurchaseInvoice: return Localiser["caption.proforma.purchase.invoices"];
|
||||
case Sbm.TransactionType.PurchaseInvoice: return Localiser["caption.purchase.invoices"];
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Item configuration.
|
||||
//-------------------------------------------------------------------
|
||||
|
||||
// Contact item configuration.
|
||||
public class ItemConfigData
|
||||
{
|
||||
// Item type.
|
||||
public bool? IsOrganisation { get; set; }
|
||||
public bool? IsIndividual { get; set; }
|
||||
public bool? IsGroup { get; set; }
|
||||
// Item fields.
|
||||
public class FieldData
|
||||
{
|
||||
// Field name prefix.
|
||||
public String Prefix { get; } = Model_Requirement.FieldNamePrefix;
|
||||
// Hide field.
|
||||
public HashSet<string> Hide { get; } = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
|
||||
// Read-only field.
|
||||
public HashSet<string> Readonly { get; } = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
|
||||
// Field labels.
|
||||
public Dictionary<String, String> Label { get; } = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase);
|
||||
}
|
||||
public FieldData Field { get; } = new FieldData();
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
/// <summary>
|
||||
/// Populate item configuration for existing requirement.
|
||||
/// </summary>
|
||||
public void PopulateItemConfig(ItemConfigData config, SbmTransaction transaction, SbmRequirement requirement)
|
||||
{
|
||||
PopulateItemConfig(config, requirement.GetItemId(), transaction.TransactionType, requirement.RequirementType);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Populate item configuration for new or existing requirement.
|
||||
/// </summary>
|
||||
public void PopulateItemConfig(ItemConfigData config, ItemId requirementItemId, Sbm.TransactionType transactionType, Sbm.RequirementType requirementType)
|
||||
{
|
||||
// Item type.
|
||||
bool isSales = SbmTransaction.IsSalesType(transactionType);
|
||||
bool isPurchase = SbmTransaction.IsPurchaseType(transactionType);
|
||||
|
||||
// Configuration options.
|
||||
bool importedFromAccounts = Internals.AccountsConsole.ItemIsImportedFromAccounts(requirementItemId);
|
||||
bool managedByAccounts = Internals.AccountsConsole.IsItemTypeManagedByAccounts(Sbm.ItemType.Requirement);
|
||||
bool showDrawingIssue = SessionConsole.DisplayAttribute(SbmDbDfn.ColumnIdx.Commodity_DrawingIssue);
|
||||
bool showNotes = true;
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// Requirement.
|
||||
|
||||
// Id.
|
||||
if (SbmSystem.DebugMode)
|
||||
config.Field.Readonly.Add($"{ItemField.Id}");
|
||||
else
|
||||
config.Field.Hide.Add($"{ItemField.Id}");
|
||||
|
||||
// Job Number.
|
||||
if (transactionType != Sbm.TransactionType.SalesOrder || !SessionConsole.AllowOption(Sbm.ConfigOption.SalesOrderItemJobNumber))
|
||||
config.Field.Hide.Add($"{ItemField.JobNumber}");
|
||||
|
||||
// Narrative.
|
||||
config.Field.Label.Add($"{ItemField.DescBrief}", SessionConsole.GetAttributeCaption(SbmDbDfn.ColumnIdx.Requirement_DescBrief, Localiser["label.narrative"]));
|
||||
if (managedByAccounts)
|
||||
config.Field.Readonly.Add($"{ItemField.DescBrief}");
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// Sales order.
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// Purchase order.
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// Common.
|
||||
|
||||
// Notes.
|
||||
if (!showNotes)
|
||||
config.Field.Hide.Add($"{ItemField.Notes}");
|
||||
|
||||
// Status.
|
||||
// Read-only if transaction being superceded.
|
||||
if (managedByAccounts)
|
||||
config.Field.Readonly.Add($"{ItemField.Status}");
|
||||
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,235 @@
|
||||
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||
using Sarand.BusinessMgr.Net.Core.Web.App;
|
||||
using Sarand.BusinessMgr.Net.Standard.Base.App;
|
||||
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
|
||||
using Sarand.BusinessMgr.Web.Portal.Components;
|
||||
using Sarand.Net.Standard.Base.App;
|
||||
using Sarand.Net.Standard.Base.Bus;
|
||||
using Sarand.Net.Standard.Base.Core;
|
||||
using Sarand.Net.Standard.Base.Utils;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace Sarand.BusinessMgr.Web.Portal.Models.Requirements
|
||||
{
|
||||
//=======================================================================
|
||||
// Requirement model.
|
||||
//=======================================================================
|
||||
/// <summary>
|
||||
/// Requirement model - Filter, Form, validation and configuration.
|
||||
/// </summary>
|
||||
public partial class Model_Requirement : SbmModel_Portal
|
||||
{
|
||||
//-------------------------------------------------------------------
|
||||
// Definitions.
|
||||
public enum ViewMode
|
||||
{
|
||||
// 'Commit updates' modes - changes are immediately commited to the database.
|
||||
Maintain,
|
||||
ProductionControl,
|
||||
CommodityHistory_Maintain,
|
||||
AssetOrders_Maintain,
|
||||
// 'No updates' modes - no changes are allowed.
|
||||
CommodityHistory_ReadOnly,
|
||||
AssetOrders_ReadOnly,
|
||||
Search
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Construction.
|
||||
public Model_Requirement(SbmLocaliser localiser) :
|
||||
base(localiser)
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Filter properties.
|
||||
public class FilterData
|
||||
{
|
||||
public String Mode { get; set; }
|
||||
public String TransactionType { get; set; }
|
||||
public String Type { get; set; }
|
||||
public String Search { get; set; }
|
||||
public String TransactionStatusCat { get; set; }
|
||||
public String StatusCat { get; set; }
|
||||
}
|
||||
public FilterData Filter { get; } = new FilterData();
|
||||
public ViewMode GetFilterMode()
|
||||
{
|
||||
return EnumUtil.ParseEnum(Filter.Mode, ViewMode.Search);
|
||||
}
|
||||
public Sbm.TransactionType GetFilterTransactionType()
|
||||
{
|
||||
Sbm.TransactionType transactionType = (Sbm.TransactionType)Internals.TransactionTypeCodes.GetTypeForCode(Filter.Type);
|
||||
if (transactionType == 0 && !StringUtil.IsBlank(Filter.Type) && StringUtil.IsNumeric(Filter.Type, true))
|
||||
transactionType = (Sbm.TransactionType)StringUtil.ToInt(Filter.Type);
|
||||
return transactionType;
|
||||
}
|
||||
public Sbm.RequirementType GetFilterRequirementType()
|
||||
{
|
||||
Sbm.RequirementType transactionType = (Sbm.RequirementType)Internals.RequirementTypeCodes.GetTypeForCode(Filter.Type);
|
||||
if (transactionType == 0 && !StringUtil.IsBlank(Filter.Type) && StringUtil.IsNumeric(Filter.Type, true))
|
||||
transactionType = (Sbm.RequirementType)StringUtil.ToInt(Filter.Type);
|
||||
return transactionType;
|
||||
}
|
||||
public SbmTransaction.StatusCat GetFilterTransactionStatusCat()
|
||||
{
|
||||
return (SbmTransaction.StatusCat)Internals.GetSystemCodes(Sbm.SystemCode.TransactionStatusCat).GetTypeForCode(Filter.TransactionStatusCat);
|
||||
}
|
||||
public SbmRequirement.StatusCat GetFilterRequirementStatusCat()
|
||||
{
|
||||
return (SbmRequirement.StatusCat)Internals.GetSystemCodes(Sbm.SystemCode.RequirementStatusCat).GetTypeForCode(Filter.StatusCat);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Requirement properties.
|
||||
public class RequirementData
|
||||
{
|
||||
public String Exists { get; set; }
|
||||
public String Id { get; set; }
|
||||
public String TransactionId { get; set; }
|
||||
public String RequirementIdSource { get; set; }
|
||||
public String Type { get; set; }
|
||||
public String Sequence { get; set; }
|
||||
public String JobNumber { get; set; }
|
||||
// Status dates.
|
||||
public String Required { get; set; }
|
||||
public String Started { get; set; }
|
||||
public String Completed { get; set; }
|
||||
// Details.
|
||||
public String AssociationIdSubContract { get; set; }
|
||||
public String DescBrief { get; set; }
|
||||
public String DescIntro { get; set; }
|
||||
public String DescOutline { get; set; }
|
||||
public String DescDetail { get; set; }
|
||||
public String PromotionCode { get; set; }
|
||||
public String NominalCode { get; set; }
|
||||
// Commodity.
|
||||
public String CommodityId { get; set; }
|
||||
public String ProductCode { get; set; }
|
||||
public String AssetId { get; set; }
|
||||
public String Quantity { get; set; }
|
||||
public String QuantityProd { get; set; }
|
||||
public String UomId { get; set; }
|
||||
public String Weight { get; set; }
|
||||
public String UomIdWeight { get; set; }
|
||||
public String MaterialSourceCode { get; set; }
|
||||
public String LocationIdStock { get; set; }
|
||||
// Amounts.
|
||||
public String AmountUnit { get; set; }
|
||||
public String AmountAct { get; set; }
|
||||
public String AmountDisc { get; set; }
|
||||
public String AmountNet { get; set; }
|
||||
public String TaxCodeId { get; set; }
|
||||
public String TaxRate { get; set; }
|
||||
public String AmountTax { get; set; }
|
||||
public String AmountTot { get; set; }
|
||||
// Common properties.
|
||||
public String Notes { get; set; }
|
||||
public String StatusCode { get; set; }
|
||||
}
|
||||
public RequirementData Requirement { get; } = new RequirementData();
|
||||
public Sbm.RequirementType GetRequirementType()
|
||||
{
|
||||
return (Sbm.RequirementType)Internals.RequirementTypeCodes.GetTypeForCode(Requirement.Type);
|
||||
}
|
||||
public SaStatus GetRequirementStatus()
|
||||
{
|
||||
return SacsSystem.GetStatusForCode(Requirement.StatusCode);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Validation.
|
||||
//-------------------------------------------------------------------
|
||||
// Requirement validation.
|
||||
public bool ValidateRequirementData(Sacs.Web.Components.SaController.AjaxResponse_Data responseData)
|
||||
{
|
||||
|
||||
// Narrative.
|
||||
if (Requirement.DescBrief != null)
|
||||
{
|
||||
String controlName = GetFieldName(ItemField.DescBrief);
|
||||
responseData.SetControlValue(controlName, Requirement.DescBrief);
|
||||
if (StringUtil.GetLength(Requirement.DescBrief) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Requirement_DescBrief))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Requirement_DescBrief)]);
|
||||
}
|
||||
|
||||
// Desc Intro.
|
||||
if (Requirement.DescIntro != null)
|
||||
{
|
||||
String controlName = GetFieldName(ItemField.DescIntro);
|
||||
responseData.SetControlValue(controlName, Requirement.DescIntro);
|
||||
if (StringUtil.GetLength(Requirement.DescIntro) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Requirement_DescIntro))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Requirement_DescIntro)]);
|
||||
}
|
||||
|
||||
// Desc Outline.
|
||||
if (Requirement.DescOutline != null)
|
||||
{
|
||||
String controlName = GetFieldName(ItemField.DescOutline);
|
||||
responseData.SetControlValue(controlName, Requirement.DescOutline);
|
||||
if (StringUtil.GetLength(Requirement.DescOutline) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Requirement_DescOutline))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Requirement_DescOutline)]);
|
||||
}
|
||||
|
||||
// Desc Detail.
|
||||
if (Requirement.DescDetail != null)
|
||||
{
|
||||
String controlName = GetFieldName(ItemField.DescDetail);
|
||||
responseData.SetControlValue(controlName, Requirement.DescDetail);
|
||||
if (StringUtil.GetLength(Requirement.DescDetail) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Requirement_DescDetail))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Requirement_DescDetail)]);
|
||||
}
|
||||
|
||||
|
||||
// Requirement status.
|
||||
if (Requirement.StatusCode != null)
|
||||
{
|
||||
String controlName = GetFieldName(ItemField.Status);
|
||||
if (Requirement.StatusCode.IsEmpty())
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.mandatory.value"]);
|
||||
else if (!SbmRequirement.ValidStatuses.Contains(GetRequirementStatus()))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]);
|
||||
}
|
||||
|
||||
// Required.
|
||||
if (Requirement.Required != null)
|
||||
{
|
||||
String controlName = GetFieldName(ItemField.Required);
|
||||
if (!Requirement.Required.IsEmpty() && !DateUtil.IsValid(ParseDateFromForm(Requirement.Required)))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]);
|
||||
}
|
||||
|
||||
// Status dates - Started.
|
||||
if (Requirement.Started != null)
|
||||
{
|
||||
String controlName = GetFieldName(ItemField.Started);
|
||||
if (!Requirement.Started.IsEmpty() && !DateUtil.IsValid(ParseDateFromForm(Requirement.Started)))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]);
|
||||
}
|
||||
|
||||
// Status dates - Completed.
|
||||
if (Requirement.Completed != null)
|
||||
{
|
||||
String controlName = GetFieldName(ItemField.Completed);
|
||||
if (!Requirement.Completed.IsEmpty() && !DateUtil.IsValid(ParseDateFromForm(Requirement.Completed)))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]);
|
||||
}
|
||||
|
||||
// Requirement Notes.
|
||||
if (Requirement.Notes != null)
|
||||
{
|
||||
String controlName = GetFieldName(ItemField.Notes);
|
||||
responseData.SetControlValue(controlName, Requirement.Notes);
|
||||
if (!Requirement.Notes.IsEmpty() && StringUtil.GetLength(Requirement.Notes) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Requirement_Notes))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Requirement_Notes)]);
|
||||
}
|
||||
|
||||
return !responseData.HasControlErrors();
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
}
|
||||
//=======================================================================
|
||||
}
|
||||
@@ -233,7 +233,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// List Caption.
|
||||
config.Caption = StringUtil.OnBlank(GetListCaptionByTransactionType(transactionType),Localiser["label.transactions"]);
|
||||
config.Caption = StringUtil.OnBlank(GetListCaptionByTransactionType(transactionType), Localiser["label.transactions"]);
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// Actions.
|
||||
@@ -343,7 +343,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
}
|
||||
|
||||
// In Progress date.
|
||||
if (!modeIsDeliveryPlanning && !isSalesLead && !isSalesDispatch && transactionStatusCat != SbmTransaction.StatusCat.Pending)
|
||||
if (!modeIsDeliveryPlanning && !isSalesLead && !isSalesDispatch && transactionStatusCat == SbmTransaction.StatusCat.Open)
|
||||
{
|
||||
//config.Column.Label.Add($"{ItemField.InProgress}", Localiser["label.in.progress"]);
|
||||
}
|
||||
@@ -367,7 +367,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
}
|
||||
|
||||
// Closed date.
|
||||
if (modeIsDeliveryPlanning || transactionStatusCat != SbmTransaction.StatusCat.Open)
|
||||
if (modeIsDeliveryPlanning || transactionStatusCat == SbmTransaction.StatusCat.Closed)
|
||||
{
|
||||
//config.Column.Label.Add($"{ItemField.Closed}", Localiser["label.closed"]);
|
||||
}
|
||||
@@ -588,7 +588,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
/// <summary>
|
||||
/// Populate item configuration for existing association.
|
||||
/// Populate item configuration for existing transaction.
|
||||
/// </summary>
|
||||
public void PopulateItemConfig(ItemConfigData config, SbmTransaction transaction)
|
||||
{
|
||||
@@ -596,7 +596,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Populate item configuration for new or existing association.
|
||||
/// Populate item configuration for new or existing transaction.
|
||||
/// </summary>
|
||||
public void PopulateItemConfig(ItemConfigData config, ItemId transactionItemId, Sbm.TransactionType transactionType)
|
||||
{
|
||||
|
||||
@@ -40,7 +40,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
public class FilterData
|
||||
{
|
||||
public String Mode { get; set; }
|
||||
public String TransactionType { get; set; }
|
||||
public String Type { get; set; }
|
||||
public String Search { get; set; }
|
||||
public String StatusCat { get; set; }
|
||||
}
|
||||
@@ -51,9 +51,9 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
}
|
||||
public Sbm.TransactionType GetFilterTransactionType()
|
||||
{
|
||||
Sbm.TransactionType transactionType = (Sbm.TransactionType)Internals.TransactionTypeCodes.GetTypeForCode(Filter.TransactionType);
|
||||
if (transactionType == 0 && !StringUtil.IsBlank(Filter.TransactionType) && StringUtil.IsNumeric(Filter.TransactionType, true))
|
||||
transactionType = (Sbm.TransactionType)StringUtil.ToInt(Filter.TransactionType);
|
||||
Sbm.TransactionType transactionType = (Sbm.TransactionType)Internals.TransactionTypeCodes.GetTypeForCode(Filter.Type);
|
||||
if (transactionType == 0 && !StringUtil.IsBlank(Filter.Type) && StringUtil.IsNumeric(Filter.Type, true))
|
||||
transactionType = (Sbm.TransactionType)StringUtil.ToInt(Filter.Type);
|
||||
return transactionType;
|
||||
}
|
||||
public String GetFilterAssociationTypeCode()
|
||||
@@ -66,7 +66,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
}
|
||||
public SbmTransaction.StatusCat GetFilterTransactionStatusCat()
|
||||
{
|
||||
return (SbmTransaction.StatusCat)StringUtil.ToInt(Filter.StatusCat);
|
||||
return (SbmTransaction.StatusCat)Internals.GetSystemCodes(Sbm.SystemCode.TransactionStatusCat).GetTypeForCode(Filter.StatusCat);
|
||||
}
|
||||
|
||||
/// <summary>Transaction Status Cats for filter dropdown.</summary>
|
||||
@@ -100,10 +100,10 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
public String Raised { get; set; }
|
||||
public String Required { get; set; }
|
||||
public String InProgress { get; set; }
|
||||
public String Closed { get; set; }
|
||||
// Delivery.
|
||||
public String DeliveredEst { get; set; }
|
||||
public String DeliveredAct { get; set; }
|
||||
public String Closed { get; set; }
|
||||
public String Department { get; set; }
|
||||
public String DescBrief { get; set; }
|
||||
public String DescIntro { get; set; }
|
||||
@@ -168,7 +168,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
Sbm.TransactionType transactionType = GetTransactionType();
|
||||
if (Transaction.Type != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.Type);
|
||||
String controlName = GetFieldName(ItemField.Type);
|
||||
if (Transaction.Type.IsEmpty() || GetTransactionType() <= 0)
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.mandatory.value"]);
|
||||
else if (!SessionConsole.AllowTransactionType(transactionType))
|
||||
@@ -178,7 +178,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
// Association.
|
||||
if (Transaction.AssociationId != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.AssociationName);
|
||||
String controlName = GetFieldName(ItemField.AssociationName);
|
||||
SysId associationId = SysId.ToSysId(Transaction.AssociationId);
|
||||
if (!SysId.IsValid(associationId))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.mandatory.value"]);
|
||||
@@ -187,7 +187,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
// Reference.
|
||||
if (Transaction.Reference != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.Reference);
|
||||
String controlName = GetFieldName(ItemField.Reference);
|
||||
responseData.SetControlValue(controlName, Transaction.Reference);
|
||||
if (StringUtil.GetLength(Transaction.Reference) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_Ref))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_Ref)]);
|
||||
@@ -196,7 +196,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
// Ext Reference.
|
||||
if (Transaction.ReferenceExt != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.ReferenceExt);
|
||||
String controlName = GetFieldName(ItemField.ReferenceExt);
|
||||
responseData.SetControlValue(controlName, Transaction.ReferenceExt);
|
||||
if (StringUtil.GetLength(Transaction.ReferenceExt) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_RefExt))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_RefExt)]);
|
||||
@@ -205,7 +205,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
// Narrative.
|
||||
if (Transaction.DescBrief != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.DescBrief);
|
||||
String controlName = GetFieldName(ItemField.DescBrief);
|
||||
responseData.SetControlValue(controlName, Transaction.DescBrief);
|
||||
if (StringUtil.GetLength(Transaction.DescBrief) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_DescBrief))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_DescBrief)]);
|
||||
@@ -214,7 +214,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
// Contact Name.
|
||||
if (Transaction.ContactName != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.ContactName);
|
||||
String controlName = GetFieldName(ItemField.ContactName);
|
||||
responseData.SetControlValue(controlName, Transaction.ContactName);
|
||||
if (StringUtil.GetLength(Transaction.ContactName) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_ContactName))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_ContactName)]);
|
||||
@@ -223,7 +223,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
// Likelihood.
|
||||
if (Transaction.Likelihood != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.Likelihood);
|
||||
String controlName = GetFieldName(ItemField.Likelihood);
|
||||
responseData.SetControlValue(controlName, Transaction.Likelihood);
|
||||
if (StringUtil.GetLength(Transaction.Likelihood) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_Likelihood))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_Likelihood)]);
|
||||
@@ -232,7 +232,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
// Referral code.
|
||||
if (Transaction.ReferCode != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.ReferCode);
|
||||
String controlName = GetFieldName(ItemField.ReferCode);
|
||||
responseData.SetControlValue(controlName, Transaction.ReferCode);
|
||||
if (StringUtil.GetLength(Transaction.ReferCode) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_ReferCode))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_ReferCode)]);
|
||||
@@ -241,7 +241,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
// Refer source.
|
||||
if (Transaction.ReferSource != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.ReferSource);
|
||||
String controlName = GetFieldName(ItemField.ReferSource);
|
||||
responseData.SetControlValue(controlName, Transaction.ReferSource);
|
||||
if (StringUtil.GetLength(Transaction.ReferSource) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_ReferSource))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_ReferSource)]);
|
||||
@@ -250,7 +250,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
// Department.
|
||||
if (Transaction.Department != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.Department);
|
||||
String controlName = GetFieldName(ItemField.Department);
|
||||
responseData.SetControlValue(controlName, Transaction.Department);
|
||||
if (StringUtil.GetLength(Transaction.Department) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_Department))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_Department)]);
|
||||
@@ -259,7 +259,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
// Desc Intro.
|
||||
if (Transaction.DescIntro != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.DescIntro);
|
||||
String controlName = GetFieldName(ItemField.DescIntro);
|
||||
responseData.SetControlValue(controlName, Transaction.DescIntro);
|
||||
if (StringUtil.GetLength(Transaction.DescIntro) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_DescIntro))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_DescIntro)]);
|
||||
@@ -268,7 +268,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
// Desc Outline.
|
||||
if (Transaction.DescOutline != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.DescOutline);
|
||||
String controlName = GetFieldName(ItemField.DescOutline);
|
||||
responseData.SetControlValue(controlName, Transaction.DescOutline);
|
||||
if (StringUtil.GetLength(Transaction.DescOutline) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_DescOutline))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_DescOutline)]);
|
||||
@@ -277,7 +277,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
// Desc Detail.
|
||||
if (Transaction.DescDetail != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.DescDetail);
|
||||
String controlName = GetFieldName(ItemField.DescDetail);
|
||||
responseData.SetControlValue(controlName, Transaction.DescDetail);
|
||||
if (StringUtil.GetLength(Transaction.DescDetail) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_DescDetail))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_DescDetail)]);
|
||||
@@ -286,7 +286,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
// Contact Area code.
|
||||
if (Transaction.ContactAreaCode != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.ContactAreaCode);
|
||||
String controlName = GetFieldName(ItemField.ContactAreaCode);
|
||||
responseData.SetControlValue(controlName, Transaction.ContactAreaCode);
|
||||
if (StringUtil.GetLength(Transaction.ContactAreaCode) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_ContactAreaCode))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_ContactAreaCode)]);
|
||||
@@ -295,7 +295,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
// Response code.
|
||||
if (Transaction.ResponseCode != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.ResponseCode);
|
||||
String controlName = GetFieldName(ItemField.ResponseCode);
|
||||
responseData.SetControlValue(controlName, Transaction.ResponseCode);
|
||||
if (StringUtil.GetLength(Transaction.ResponseCode) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_ResponseCode))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_ResponseCode)]);
|
||||
@@ -304,7 +304,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
// Box Count.
|
||||
if (Transaction.BoxCount != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.BoxCount);
|
||||
String controlName = GetFieldName(ItemField.BoxCount);
|
||||
responseData.SetControlValue(controlName, Transaction.BoxCount);
|
||||
if (StringUtil.GetLength(Transaction.BoxCount) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_BoxCount))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_BoxCount)]);
|
||||
@@ -313,7 +313,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
// Delivery Status code.
|
||||
if (Transaction.DeliveryStatusCode != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.DeliveryStatus);
|
||||
String controlName = GetFieldName(ItemField.DeliveryStatus);
|
||||
responseData.SetControlValue(controlName, Transaction.DeliveryStatusCode);
|
||||
if (StringUtil.GetLength(Transaction.DeliveryStatusCode) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_DeliveryStatusCode))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_DeliveryStatusCode)]);
|
||||
@@ -322,7 +322,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
// Delivery Type code.
|
||||
if (Transaction.DeliveryTypeCode != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.DeliveryType);
|
||||
String controlName = GetFieldName(ItemField.DeliveryType);
|
||||
responseData.SetControlValue(controlName, Transaction.DeliveryTypeCode);
|
||||
if (StringUtil.GetLength(Transaction.DeliveryTypeCode) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_DeliveryTypeCode))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_DeliveryTypeCode)]);
|
||||
@@ -331,7 +331,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
// Delivery Method code.
|
||||
if (Transaction.DeliveryMethodCode != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.DeliveryMethod);
|
||||
String controlName = GetFieldName(ItemField.DeliveryMethod);
|
||||
responseData.SetControlValue(controlName, Transaction.DeliveryMethodCode);
|
||||
if (StringUtil.GetLength(Transaction.DeliveryMethodCode) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_DeliveryMethodCode))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_DeliveryMethodCode)]);
|
||||
@@ -340,7 +340,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
// Delivery Courier code.
|
||||
if (Transaction.DeliveryCourierCode != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.DeliveryCourier);
|
||||
String controlName = GetFieldName(ItemField.DeliveryCourier);
|
||||
responseData.SetControlValue(controlName, Transaction.DeliveryCourierCode);
|
||||
if (StringUtil.GetLength(Transaction.DeliveryCourierCode) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_DeliveryCourierCode))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_DeliveryCourierCode)]);
|
||||
@@ -349,7 +349,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
// Delivery Book In code.
|
||||
if (Transaction.DeliveryBookInCode != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.DeliveryBookIn);
|
||||
String controlName = GetFieldName(ItemField.DeliveryBookIn);
|
||||
responseData.SetControlValue(controlName, Transaction.DeliveryBookInCode);
|
||||
if (StringUtil.GetLength(Transaction.DeliveryBookInCode) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_DeliveryBookInCode))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_DeliveryBookInCode)]);
|
||||
@@ -358,7 +358,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
// Stock Picker code.
|
||||
if (Transaction.StockPickerCode != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.StockPicker);
|
||||
String controlName = GetFieldName(ItemField.StockPicker);
|
||||
responseData.SetControlValue(controlName, Transaction.StockPickerCode);
|
||||
if (StringUtil.GetLength(Transaction.StockPickerCode) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_StockPickerCode))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_StockPickerCode)]);
|
||||
@@ -367,7 +367,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
// Delivery Ref.
|
||||
if (Transaction.DeliveryRef != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.DeliveryRef);
|
||||
String controlName = GetFieldName(ItemField.DeliveryRef);
|
||||
responseData.SetControlValue(controlName, Transaction.DeliveryRef);
|
||||
if (StringUtil.GetLength(Transaction.DeliveryRef) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_DeliveryRef))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_DeliveryRef)]);
|
||||
@@ -376,7 +376,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
// Delivery Comment.
|
||||
if (Transaction.DeliveryComment != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.DeliveryComment);
|
||||
String controlName = GetFieldName(ItemField.DeliveryComment);
|
||||
responseData.SetControlValue(controlName, Transaction.DeliveryComment);
|
||||
if (StringUtil.GetLength(Transaction.DeliveryComment) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_DeliveryComment))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_DeliveryComment)]);
|
||||
@@ -385,7 +385,7 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
// Delivery Department.
|
||||
if (Transaction.DeliveryDepartment != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.DeliveryDepartment);
|
||||
String controlName = GetFieldName(ItemField.DeliveryDepartment);
|
||||
responseData.SetControlValue(controlName, Transaction.DeliveryDepartment);
|
||||
if (StringUtil.GetLength(Transaction.DeliveryDepartment) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_DeliveryDepartment))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_DeliveryDepartment)]);
|
||||
@@ -394,30 +394,61 @@ namespace Sarand.BusinessMgr.Web.Portal.Models.Transactions
|
||||
// Delivery Nominal code.
|
||||
if (Transaction.DeliveryNominalCode != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.DeliveryNominalCode);
|
||||
String controlName = GetFieldName(ItemField.DeliveryNominalCode);
|
||||
responseData.SetControlValue(controlName, Transaction.DeliveryNominalCode);
|
||||
if (StringUtil.GetLength(Transaction.DeliveryNominalCode) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_DeliveryNominalCode))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_DeliveryNominalCode)]);
|
||||
}
|
||||
|
||||
// Transaction Notes.
|
||||
if (Transaction.Notes != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.Notes);
|
||||
responseData.SetControlValue(controlName, Transaction.Notes);
|
||||
if (!Transaction.Notes.IsEmpty() && StringUtil.GetLength(Transaction.Notes) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_Notes))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_Notes)]);
|
||||
}
|
||||
|
||||
// Transaction status.
|
||||
if (Transaction.StatusCode != null)
|
||||
{
|
||||
String controlName = Model_Transaction.GetFieldName(Model_Transaction.ItemField.Status);
|
||||
String controlName = GetFieldName(ItemField.Status);
|
||||
if (Transaction.StatusCode.IsEmpty())
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.mandatory.value"]);
|
||||
else if (!SbmTransaction.ValidStatusesByType(transactionType).Contains(GetTransactionStatus()))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]);
|
||||
}
|
||||
SbmTransaction.StatusCat transactionStatusCat = SbmTransaction.GetCategoryForStatus(GetTransactionStatus());
|
||||
|
||||
// Status dates - Raised.
|
||||
if (Transaction.Raised != null)
|
||||
{
|
||||
String controlName = GetFieldName(ItemField.Raised);
|
||||
if (Transaction.Raised.IsEmpty() || !DateUtil.IsValid(ParseDateFromForm(Transaction.Raised)))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.mandatory.value"]);
|
||||
else if (ParseDateFromForm(Transaction.Raised) > DateTime.Today)
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]);
|
||||
}
|
||||
|
||||
// Status dates - In Progress.
|
||||
if (Transaction.InProgress != null)
|
||||
{
|
||||
String controlName = GetFieldName(ItemField.InProgress);
|
||||
if ((Transaction.InProgress.IsEmpty() || !DateUtil.IsValid(ParseDateFromForm(Transaction.InProgress))) && (transactionStatusCat == SbmTransaction.StatusCat.Open || transactionStatusCat == SbmTransaction.StatusCat.Closed))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.mandatory.value"]);
|
||||
else if (ParseDateFromForm(Transaction.InProgress) > DateTime.Today)
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]);
|
||||
}
|
||||
|
||||
// Status dates - Closed.
|
||||
if (Transaction.Closed != null)
|
||||
{
|
||||
String controlName = GetFieldName(ItemField.Closed);
|
||||
if ((Transaction.Closed.IsEmpty() || !DateUtil.IsValid(ParseDateFromForm(Transaction.Closed))) && (transactionStatusCat == SbmTransaction.StatusCat.Closed))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.mandatory.value"]);
|
||||
else if (ParseDateFromForm(Transaction.Closed) > DateTime.Today)
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]);
|
||||
}
|
||||
|
||||
// Transaction Notes.
|
||||
if (Transaction.Notes != null)
|
||||
{
|
||||
String controlName = GetFieldName(ItemField.Notes);
|
||||
responseData.SetControlValue(controlName, Transaction.Notes);
|
||||
if (!Transaction.Notes.IsEmpty() && StringUtil.GetLength(Transaction.Notes) > GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_Notes))
|
||||
responseData.SetControlError(controlName, Localiser["msg.validation.maximum.length", GetControlMaxLength(SbmDbDfn.ColumnIdx.Transaction_Notes)]);
|
||||
}
|
||||
|
||||
return !responseData.HasControlErrors();
|
||||
}
|
||||
|
||||
@@ -80,4 +80,9 @@
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="Portal\Controllers\Requirements\" />
|
||||
<Folder Include="Views\Requirement\" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
{
|
||||
@Html.Hidden("Transaction.Id", "", new { @id = "", @class = "TransactionId sbm-input" })
|
||||
@Html.Hidden("Transaction.Exists", "", new { @id = "", @class = "TransactionExists sbm-input" })
|
||||
@Html.Hidden("Transaction.Type", "", new { @id = "", @class = "TransactionType sbm-input" })
|
||||
<div class="spacer2"></div>
|
||||
|
||||
@* Association *@
|
||||
@@ -218,9 +219,33 @@
|
||||
</div>
|
||||
<div class="col-6">
|
||||
|
||||
@* Raised by *@
|
||||
<div class="sbm-form-control @Model_Transaction.GetFieldName(Model_Transaction.ItemField.Closed)">
|
||||
@* Required *@
|
||||
<div class="sbm-form-control @Model_Transaction.GetFieldName(Model_Transaction.ItemField.Required)">
|
||||
<div class="row pl-3">
|
||||
<div class="col-sm-4">
|
||||
<div class="sbm-label">
|
||||
<label for="ifTransactionRequired"><span>@Localiser["label.required"]</span></label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm">
|
||||
<div class="sbm-control row">
|
||||
<div class="fixed">@Html.TextBox("Transaction.Required", "", new { @id = "ifTransactionRequired", @class = "TransactionRequired sbm-input sbm-calendar sbm-auto-val", @maxlen = 10 })</div>
|
||||
<div class="col"><div class="pt-2 pl-2"><img src="~/img/action/delete16.png" class="ClearTransactionRequired sbm-action" alt="" title="" /></div></div>
|
||||
</div>
|
||||
<div class="sbm-message"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
|
||||
@* Closed *@
|
||||
<div class="sbm-form-control @Model_Transaction.GetFieldName(Model_Transaction.ItemField.Closed)">
|
||||
<div class="row">
|
||||
<div class="col-sm-4">
|
||||
<div class="sbm-label">
|
||||
<label for="ifTransactionClosed"><span>@Localiser["label.closed"]</span></label>
|
||||
@@ -235,6 +260,9 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="col-6">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
<div class="row">
|
||||
@if (ModelTransaction?.GetFilterTransactionType() > 0)
|
||||
{
|
||||
@Html.Hidden("Filter.TransactionType", ModelTransaction.Filter.TransactionType, new { @id = "", @class = "FilterTransactionType" })
|
||||
@Html.Hidden("Filter.Type", ModelTransaction.Filter.Type, new { @id = "", @class = "FilterType sbm-input" })
|
||||
<input type="hidden" class="FilterAssociationType" value="@ModelTransaction.GetFilterAssociationTypeCode()" />
|
||||
}
|
||||
else
|
||||
@@ -52,7 +52,7 @@
|
||||
@* Transaction Category *@
|
||||
<div class="col-4 col-sm-4 sbm-label text-left text-sm-right">@Localiser["label.type"]</div>
|
||||
<div class="col-7 col-sm-8">
|
||||
@Html.DropDownList("Filter.TransactionType", Model.GetTransactionTypeCodesForFilterDropdown(), null, new { @id = "", @class = "FilterTransactionType sbm-select" })
|
||||
@Html.DropDownList("Filter.Type", Model.GetTransactionTypeCodesForFilterDropdown(), null, new { @id = "", @class = "FilterType sbm-select" })
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@@ -60,7 +60,7 @@
|
||||
@* Transaction Status *@
|
||||
<div class="col-4 col-sm-4 sbm-label text-left text-sm-right">@Localiser["label.status"]</div>
|
||||
<div class="col-7 col-sm-8">
|
||||
@Html.DropDownList("Filter.TransactionStatusCat", ModelTransaction?.GetTransactionStatusCatsForFilterDropdown() ?? Model.GetEmptyListForSelect(), null, new { @id = "", @class = "FilterTransactionStatusCat sbm-select" })
|
||||
@Html.DropDownList("Filter.StatusCat", ModelTransaction?.GetTransactionStatusCatsForFilterDropdown() ?? Model.GetEmptyListForSelect(), null, new { @id = "", @class = "FilterStatusCat sbm-select" })
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-4 row pb4">
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
@* Transaction type *@
|
||||
<div class="col-4 col-sm-4 sbm-label text-left text-sm-right">@Localiser["label.type"]</div>
|
||||
<div class="col-8 col-sm-8">
|
||||
@Html.DropDownList("Filter.TransactionType", Model.GetTransactionTypeCodesForFilterDropdown(), Localiser["label.any"], new { @id = "", @class = "FilterTransactionType sbm-select" })
|
||||
@Html.DropDownList("Filter.Type", Model.GetTransactionTypeCodesForFilterDropdown(), Localiser["label.any"], new { @id = "", @class = "FilterType sbm-select" })
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-4 row pb4">
|
||||
|
||||
@@ -484,7 +484,7 @@ table.sbm-item-list tbody td
|
||||
|
||||
/* Item statuses */
|
||||
|
||||
.sbm-status-awa, .sbm-status-req, .sbm-status-rai, .sbm-status-clo
|
||||
.sbm-status-pre, .sbm-status-awa, .sbm-status-req, .sbm-status-rai, .sbm-status-clo
|
||||
{
|
||||
color: darkorange;
|
||||
}
|
||||
@@ -499,12 +499,12 @@ table.sbm-item-list tbody td
|
||||
color: darkred;
|
||||
}
|
||||
|
||||
.sbm-status-inp, .sbm-status-exp, .sbm-status-inv, .sbm-status-suc, .sbm-status-act, .sbm-status-que, .sbm-status-log
|
||||
.sbm-status-wip, .sbm-status-exp, .sbm-status-inv, .sbm-status-suc, .sbm-status-act, .sbm-status-que, .sbm-status-log
|
||||
{
|
||||
color: darkcyan;
|
||||
}
|
||||
|
||||
.sbm-status-pre, .sbm-status-pro, .sbm-status-inp, .sbm-status-hld, .sbm-status-upd, .sbm-status-sup, .sbm-status-aut, .sbm-status-sub
|
||||
.sbm-status-pro, sbm-status-hld, .sbm-status-upd, .sbm-status-sup, .sbm-status-aut, .sbm-status-sub
|
||||
{
|
||||
color: dodgerblue;
|
||||
}
|
||||
|
||||
@@ -171,7 +171,7 @@
|
||||
|
||||
.sbm-form .sbm-input.sbm-calendar
|
||||
{
|
||||
max-width: 180px;
|
||||
max-width: 120px;
|
||||
}
|
||||
|
||||
.sbm-form .sbm-textarea, .sbm-form .sbm-select[multiple="multiple"]
|
||||
|
||||
@@ -442,4 +442,9 @@ a:focus
|
||||
border: 1px solid var(--color-OldGold);
|
||||
}
|
||||
|
||||
.ui-datepicker-trigger
|
||||
{
|
||||
margin-left:4px;
|
||||
}
|
||||
|
||||
/* The End */
|
||||
|
||||
@@ -138,7 +138,7 @@
|
||||
}
|
||||
sbm.initCalendars = function (sel, opt)
|
||||
{
|
||||
return $(sel).datepicker(opt || {});
|
||||
return $(sel).prop('autocomplete', false).datepicker(opt || {});
|
||||
}
|
||||
sbm.allowClearCalendar = function (sel)
|
||||
{
|
||||
@@ -583,14 +583,15 @@
|
||||
$.datepicker.setDefaults({
|
||||
showOn: 'both',
|
||||
buttonImageOnly: true,
|
||||
buttonImage: '../img/action/calendar32.png',
|
||||
buttonImage: '../img/action/calendar24.png',
|
||||
buttonText: sbm.lbl.calendar,
|
||||
dateFormat: sbm.form.calendarDateFormat,
|
||||
changeMonth: true,
|
||||
changeYear: false,
|
||||
yearRange: '-14:+01',
|
||||
yearRange: '-30:+01',
|
||||
firstDay: 1,
|
||||
//defaultDate: 0,
|
||||
beforeShow: function (i) { if ($(i).attr('readonly')) { return false; } },
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -127,15 +127,16 @@
|
||||
{
|
||||
co.clearItem(env, cfg);
|
||||
let $frm = env.$frm.item;
|
||||
$frm.find('.TransactionType').val(env.data.transactionTypeDefault);
|
||||
env.$ctrl.trnType.val(env.$frm.filter.find('.sbm-input.FilterType').val());
|
||||
env.$ctrl.searchTgtAssoc.show();
|
||||
$frm.find('.TransactionStatus').val(env.data.defaultStatusCode);
|
||||
env.$ctrl.trnStatus.val(env.data.defaultStatusCode).trigger('change');
|
||||
env.$ctrl.trnRaised.datepicker('setDate', 'today');
|
||||
co.openItemDlg(env, cfg, sbm.dlg.title.createTransaction);
|
||||
}
|
||||
co.clearItem = function (env, cfg)
|
||||
{
|
||||
sbm.clearItemForm(env.$frm.item);
|
||||
sbm.populateSelectCodeDesc('#cbTransactionStatus', env.data.statuses);
|
||||
sbm.populateSelectCodeDesc(env.$ctrl.trnStatus, env.data.statuses);
|
||||
}
|
||||
co.openItemDlg = function (env, cfg, title)
|
||||
{
|
||||
@@ -161,7 +162,7 @@
|
||||
}
|
||||
co.onUpdateItem = function (env, response)
|
||||
{
|
||||
sbm.debug('onUpdateItem', env, response);
|
||||
//sbm.debug('onUpdateItem', env, response);
|
||||
if (!response.success) return;
|
||||
let cfg = response.config || {};
|
||||
co.clearItem(env, cfg);
|
||||
@@ -171,11 +172,10 @@
|
||||
let $ctrls = $frm.find('.sbm-input,.sbm-textarea,.sbm-select');
|
||||
$ctrls.filter('.TransactionId').val(item.id);
|
||||
$ctrls.filter('.TransactionExists').val(1);
|
||||
sbm.debug(item.field.value.AssociationId);
|
||||
$ctrls.filter('.TransactionAssociationId').val(item.field.value.AssociationId);
|
||||
env.$ctrl.searchTgtAssoc.hide();
|
||||
sbm.selectOrAdd($ctrls.filter('.TransactionType'), item.typeCode, item.typeDesc);
|
||||
sbm.selectOrAdd($ctrls.filter('.TransactionStatus'), item.statusCode, item.field.value.Status);
|
||||
sbm.selectOrAdd(env.$ctrl.trnStatus, item.statusCode, item.field.value.Status);
|
||||
env.$ctrl.trnStatus.trigger('change');
|
||||
co.openItemDlg(env, cfg, sbm.dlg.title.updateTransaction);
|
||||
}
|
||||
|
||||
@@ -187,11 +187,22 @@
|
||||
}
|
||||
co.onSelectAssocTarget = function (env, item)
|
||||
{
|
||||
sbm.debug('onSelectAssocTarget', env, item);
|
||||
//sbm.debug('onSelectAssocTarget', env, item);
|
||||
env.$frm.item.find('.TransactionAssociationId').val(item.id);
|
||||
env.$frm.item.find('.TransactionAssociation').val(item.name);
|
||||
}
|
||||
|
||||
co.onChangeStatus = function (env)
|
||||
{
|
||||
let sta = env.$ctrl.trnStatus.val();
|
||||
env.$ctrl.trnRaised.prop('readonly', sta != 'PRE');
|
||||
env.$ctrl.trnInProgress.prop('readonly', sta != 'WIP');
|
||||
if (sta == 'PRE') env.$ctrl.trnInProgress.val('')
|
||||
env.$ctrl.trnRequired.prop('readonly', (sta != 'PRE' && sta != 'WIP'));
|
||||
env.$ctrl.trnClosed.prop('readonly', sta == 'PRE' || sta == 'WIP');
|
||||
if (sta == 'PRE' || sta == 'WIP') env.$ctrl.trnClosed.val('')
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
co.storeItem = function (env)
|
||||
{
|
||||
@@ -230,7 +241,7 @@
|
||||
//sbm.debug('selectTransaction', prm);
|
||||
let env = co.env.select;
|
||||
env.prmSelect = prm;
|
||||
env.$frm.filter.find('.FilterTransactionType').val('');
|
||||
env.$frm.filter.find('.FilterType').val('');
|
||||
env.$frm.filter.find('.FilterSearch').val(prm.search || '');
|
||||
env.$pnl.table.find('tbody tr').remove();
|
||||
sbm.openDialog(env.$dlg.select, 1000, 800);
|
||||
@@ -282,17 +293,28 @@
|
||||
|
||||
env.$frm.filter = $items.find('.frmTransactionFilter');
|
||||
if (env.$frm.filter.length)
|
||||
env.$frm.filter.on('input', '.FilterSearch', function () { co.refreshItems(env, 250); }).on('change', '.FilterTransactionType,.FilterTransactionStatusCat', function () { co.refreshItems(env, 50); });
|
||||
env.$frm.filter.on('input', '.FilterSearch', function () { co.refreshItems(env, 250); }).on('change', '.sbm-select.FilterType,.sbm-select.FilterStatusCat', function () { co.refreshItems(env, 50); });
|
||||
env.$frm.itemId = $items.find('#frmTransactionId');
|
||||
var opt = sbm.dlgOpts();
|
||||
opt.dialogClass += " sbm-Transaction";
|
||||
env.$dlg.item = $items.find('#dlgTransaction').dialog(opt);
|
||||
env.$frm.item = env.$dlg.item.find('#frmTransaction').on('input', '.sbm-input, .sbm-textarea', function () { sbm.clearControlError(this); }).on('change', '.sbm-select', function () { sbm.clearControlError(this); });
|
||||
sbm.initCalendars(env.$dlg.item.find('.sbm-input.sbm-calendar'), {});
|
||||
env.$frm.item.on('blur', '.sbm-input.sbm-format-integer', function () { sbm.formatInteger($(this)); }).on('blur', '.sbm-input.sbm-format-currency', function () { sbm.formatCurrency($(this)); });
|
||||
env.$frm.item.find('.TransactionAssociation').on('dblclick', function () { co.selectAssocTarget(env); });
|
||||
env.$ctrl.searchTgtAssoc = env.$frm.item.find('.AssociationTargetSearch').on('click', function () { co.selectAssocTarget(env); });
|
||||
|
||||
if (env.$frm.item.length)
|
||||
{
|
||||
env.$frm.item.on('blur', '.sbm-input.sbm-format-integer', function () { sbm.formatInteger($(this)); }).on('blur', '.sbm-input.sbm-format-currency', function () { sbm.formatCurrency($(this)); });
|
||||
env.$ctrl.trnType = env.$frm.item.find('.sbm-input.TransactionType');
|
||||
env.$frm.item.find('.TransactionAssociation').on('dblclick', function () { co.selectAssocTarget(env); });
|
||||
env.$ctrl.searchTgtAssoc = env.$frm.item.find('.AssociationTargetSearch').on('click', function () { co.selectAssocTarget(env); });
|
||||
env.$ctrl.trnStatus = env.$frm.item.find('.sbm-select.TransactionStatus');
|
||||
if (env.$ctrl.trnStatus.length) env.$ctrl.trnStatus.on('change', function () { co.onChangeStatus(env); });
|
||||
sbm.initCalendars(env.$frm.item.find('.sbm-input.sbm-calendar'), {});
|
||||
env.$ctrl.trnRaised = env.$frm.item.find('.sbm-input.TransactionRaised');
|
||||
env.$ctrl.trnInProgress = env.$frm.item.find('.sbm-input.TransactionInProgress');
|
||||
env.$ctrl.trnRequired = env.$frm.item.find('.sbm-input.TransactionRequired');
|
||||
env.$ctrl.clearRequired = env.$frm.item.find('.ClearTransactionRequired').on('click', function () { env.$ctrl.trnRequired.val(''); });
|
||||
sbm.allowClearCalendar(env.$ctrl.trnRequired);
|
||||
env.$ctrl.trnClosed = env.$frm.item.find('.sbm-input.TransactionClosed');
|
||||
}
|
||||
var opt = sbm.dlgOpts();
|
||||
opt.dialogClass += " sbm-Transaction";
|
||||
opt.buttons[sbm.lbl.ok] = function () { co.selectItem(env); };
|
||||
|
||||
Reference in New Issue
Block a user