using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using Xylem.Common.CommonCore.Configuration;
using Xylem.Common.CommonCore.Consts;
using Xylem.Common.Logic.SoftwareAccessHelper;
namespace Xylem.Common.Logic.ProductionOrderCore.OrderData
{
///
/// Class for DB interfaces.
///
[Serializable]
public static class OrderDetailsDb
{
private const Int32 shortTimeoutDbRequest = 2000;
private const Int32 moderateTimeoutDbRequest = 10000;
private const Int32 hugeTimeoutDbRequest = 30000;
///
/// Set the picking state:
/// - reserved = null,
/// - successfully finished = 1,
/// - failed = 0.
///
///
///
/// null, 1, 0
/// true if successful
///
/// - Initial.
///
public static Boolean SetCordonelPickingStateToDb(String pcbId, Int64 orderNumber, Int32? state = null)
{
try
{
var strState = state == null ? "null" : $"{state}";
var url = ServiceUrls.GenesisSetPickingStateServiceUrl();
url += $@"{pcbId}&FertigungsauftragsNr={orderNumber}&successful={strState}";
var retString = LocalWebRequest.PostRequestAsyncAndGetContent(url, moderateTimeoutDbRequest);
if (bool.TryParse(retString, out var result))
{
return result;
}
return false;
}
catch (Exception)
{
return false;
}
}
///
/// Get all Cordonel serial numbers of a specific order.
///
///
///
///
/// true if successful
///
/// - Initial.
///
///
/// - Import from FwUpdateDb.
///
public static Boolean GetAllCordonelSerialNumbersFromDb(Int64 orderNumber, Int64 orderPos,
out List serialNumbers)
{
try
{
var url = ServiceUrls.ListAllOrderCordonelsServiceUrl();
url += $@"{orderNumber}&CustomerOrderPos={orderPos}";
var requestResponse = LocalWebRequest.GetRequest(url, moderateTimeoutDbRequest);
if (string.IsNullOrEmpty(requestResponse))
{
serialNumbers = new List();
return false;
}
serialNumbers = JsonConvert.DeserializeObject>(requestResponse);
return serialNumbers != null && serialNumbers.Count != 0;
}
catch (Exception)
{
serialNumbers = new List();
return false;
}
}
///
/// Get all Cordonel order details for production order.
/// This includes the order number and position needed to get the customer serial number with
///
///
///
///
/// true if successful
///
/// - Initial.
///
public static Boolean GetCordonelOrderDetails(Int64 productionOrderNumber,
out List orderDetails)
{
try
{
var url = ServiceUrls.ListCordonelOrderDetailsServiceUrl();
url += $@"{productionOrderNumber}";
var requestResponse = LocalWebRequest.GetRequest(url, moderateTimeoutDbRequest);
if (string.IsNullOrEmpty(requestResponse))
{
orderDetails = new List();
return false;
}
orderDetails = JsonConvert.DeserializeObject>(requestResponse);
return orderDetails != null && orderDetails.Count != 0;
}
catch (Exception)
{
orderDetails = new List();
return false;
}
}
///
/// Get Cordonel order details for production status:
/// - MeterSize,
/// - FrequencyIndicator,
/// - PressurePresent.
///
///
///
///
/// true if successful
///
/// - Initial.
///
public static Boolean GetOrderDetails(Int64 productionOrderNumber, String pcbId,
out PickingCompareItem orderDetails)
{
try
{
var url = ServiceUrls.GetOrderOverviewServiceUrl();
url += $@"{productionOrderNumber}&CheckPcbId={pcbId}";
var requestResponse = LocalWebRequest.GetRequest(url, hugeTimeoutDbRequest);
if (string.IsNullOrEmpty(requestResponse))
{
orderDetails = new PickingCompareItem(0, 0, false, null);
return false;
}
var o = JsonConvert.DeserializeObject(requestResponse);
orderDetails = new PickingCompareItem(o.PickingCompareItem.MeterSize, o.PickingCompareItem.FrequencyIndicator,
o.PickingCompareItem.PressurePresent, null);
return orderDetails != null;
}
catch (Exception)
{
orderDetails = new PickingCompareItem(0, 0, false, null);
return false;
}
}
///
/// Get Cordonel overview of production status:
/// - Order no.
/// - Count (order amount),
/// - Assigned picking,
/// - Pressure tested,
/// - Helium tested,
/// - EOL completed.
///
///
///
/// true if successful
///
/// - Initial.
///
public static Boolean GetCordonelOrderOverview(Int64 productionOrderNumber,
out OrderOverViewCordonel orderOverview)
{
try
{
var url = ServiceUrls.GetOrderOverviewServiceUrl();
url += $@"{productionOrderNumber}";
var requestResponse = LocalWebRequest.GetRequest(url, moderateTimeoutDbRequest);
if (string.IsNullOrEmpty(requestResponse))
{
orderOverview = new OrderOverViewCordonel();
return false;
}
orderOverview = JsonConvert.DeserializeObject(requestResponse);
return orderOverview != null;
}
catch (Exception)
{
orderOverview = new OrderOverViewCordonel();
return false;
}
}
///
/// Get Cordonel mapping.
///
///
///
/// true if successful
///
/// - Initial.
///
public static Boolean GetCordonelMapping(String pcbId, out List cordonelMap)
{
try
{
var url = ServiceUrls.GetCordonelMappingServiceUrl() + pcbId;
var requestResponse = LocalWebRequest.GetRequest(url, moderateTimeoutDbRequest);
if (string.IsNullOrEmpty(requestResponse))
{
cordonelMap = new List();
return false;
}
cordonelMap = JsonConvert.DeserializeObject>(requestResponse);
return cordonelMap != null && cordonelMap.Count > 0;
}
catch (Exception)
{
cordonelMap = new List();
return false;
}
}
///
/// Get all Cordonel customers from DB. The return can be used to select a specific customer and get
/// the customer number which is the base for the order search.
///
///
/// specific search pattern for customer name
/// true if successful
///
/// - Initial.
///
///
/// - Import from FwUpdateDb.
///
public static Boolean GetAllCordonelCustomersFromDb(out List customers,
String searchPattern = Constants.StrWildcard)
{
try
{
var url = ServiceUrls.ListAllCordonelCustomersWithFilterServiceUrl();
url += searchPattern;
var requestResponse = LocalWebRequest.GetRequest(url, hugeTimeoutDbRequest);
if (string.IsNullOrEmpty(requestResponse))
{
customers = new List();
return false;
}
customers = JsonConvert.DeserializeObject>(requestResponse);
return customers != null && customers.Count != 0;
}
catch (Exception)
{
customers = new List();
return false;
}
}
///
/// Get all Cordonel customers orders from DB. The return can be used to select a specific order number
/// and position which is the base for the Cordonel serial number search.
///
///
///
/// true if successful
///
/// - Initial.
///
///
/// - Sort list by customer order numbers.
///
///
/// - Import from FwUpdateDb.
///
public static Boolean GetAllCordonelCustomerOrdersFromDb(Int64 customerNumber,
out List customerOrders)
{
try
{
var url = ServiceUrls.ListAllCordonelCustomerOrdersServiceUrl();
url += $@"{customerNumber}";
var requestResponse = LocalWebRequest.GetRequest(url, hugeTimeoutDbRequest);
if (string.IsNullOrEmpty(requestResponse))
{
customerOrders = new List();
return false;
}
customerOrders = JsonConvert.DeserializeObject>(requestResponse);
customerOrders?.Sort((a, b) => a.CustomerOrderNumber.CompareTo(b.CustomerOrderNumber));
return customerOrders != null && customerOrders.Count != 0;
}
catch (Exception)
{
customerOrders = new List();
return false;
}
}
}
}