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; } } } }