public FacturaDeCompraPOP(ConexionDB DatosConexionDB, int iNumLineas) { _DatosConexionDB = DatosConexionDB; _iNumLineas = iNumLineas; facturaPopCa = new taPopRcptHdrInsert(); facturaPopType = new POPReceivingsType(); }
/// <summary> /// save new receipt /// </summary> /// <param name="receipt"></param> /// <param name="receiptLines"></param> /// <returns></returns> public OperationResult SaveReceipt(POP10300_Receipt_Work receipt, List <POP10310> receiptLines) { var operationResult = new OperationResult(); logger.Debug("Receipt is being created..."); using (eConnectMethods e = new eConnectMethods()) { try { if (receiptLines != null && receiptLines.Count > 0) { taPopRcptLotInsert_ItemsTaPopRcptLotInsert[] lotItems = new taPopRcptLotInsert_ItemsTaPopRcptLotInsert[receiptLines.Count]; taPopRcptLineInsert_ItemsTaPopRcptLineInsert[] lineItems = new taPopRcptLineInsert_ItemsTaPopRcptLineInsert[receiptLines.Count]; var receiptLineNumber = 16384; var lineNumber = 0; foreach (var receiptLine in receiptLines) { // Instantiate a taUpdateCreateItemRcd XML node object taPopRcptLotInsert_ItemsTaPopRcptLotInsert receiptLotLine = new taPopRcptLotInsert_ItemsTaPopRcptLotInsert(); receiptLotLine.POPRCTNM = receiptLine.POPRCTNM; receiptLotLine.RCPTLNNM = receiptLineNumber; receiptLotLine.ITEMNMBR = receiptLine.ITEMNMBR; receiptLotLine.SERLTNUM = receiptLine.SERLTNUM; receiptLotLine.SERLTQTY = receiptLine.QTYSHPPD; receiptLotLine.CREATEBIN = 0; lotItems[lineNumber] = receiptLotLine; // Instantiate a taUpdateCreateItemRcd XML node object taPopRcptLineInsert_ItemsTaPopRcptLineInsert receiptLineItem = new taPopRcptLineInsert_ItemsTaPopRcptLineInsert(); //Populate elements of the taUpdateCreateItemRcd XML node object receiptLineItem.POPTYPE = receiptLine.POPTYPE; receiptLineItem.POPRCTNM = receiptLine.POPRCTNM; receiptLineItem.RCPTLNNM = receiptLineNumber; receiptLineItem.ITEMNMBR = receiptLine.ITEMNMBR; receiptLineItem.VENDORID = receiptLine.VENDORID; receiptLineItem.PONUMBER = receiptLine.PONUMBER; receiptLineItem.VNDITNUM = receiptLine.VNDITNUM; receiptLineItem.QTYSHPPD = receiptLine.QTYSHPPD; receiptLineItem.AUTOCOST = 1; lineItems[lineNumber] = receiptLineItem; receiptLineNumber = receiptLineNumber * 2; lineNumber++; } // Instantiate a taUpdateCreateItemRcd XML node object taPopRcptHdrInsert receiptHeader = new taPopRcptHdrInsert(); //Populate elements of the taUpdateCreateItemRcd XML node object receiptHeader.POPRCTNM = receipt.POPRCTNM; receiptHeader.POPTYPE = receipt.POPTYPE; receiptHeader.receiptdate = receipt.receiptdate; receiptHeader.BACHNUMB = receipt.BACHNUMB; receiptHeader.VENDORID = receipt.VENDORID; // Instantiate a IVItemMasterType schema object POPReceivingsType receipttype = new POPReceivingsType(); // Populate the IVItemMasterType schema with the taUpdateCreateItemRcd XML node receipttype.taPopRcptLotInsert_Items = lotItems; receipttype.taPopRcptLineInsert_Items = lineItems; receipttype.taPopRcptHdrInsert = receiptHeader; POPReceivingsType[] receiptEntry = { receipttype }; // Instantiate an eConnectType schema object eConnectType eConnect = new eConnectType(); // Instantiate a Memory Stream object MemoryStream memoryStream = new MemoryStream(); // Create an XML serializer object XmlSerializer serializer = new XmlSerializer(eConnect.GetType()); // Populate the eConnectType object with the IVItemMasterType schema object eConnect.POPReceivingsType = receiptEntry; /////////////////////////////////////////////////////////////////////////////// // Serialize the eConnectType. serializer.Serialize(memoryStream, eConnect); // Reset the position of the memory stream to the start. memoryStream.Position = 0; // Create an XmlDocument from the serialized eConnectType in memory. XmlDocument xmlDocument = new XmlDocument(); xmlDocument.Load(memoryStream); memoryStream.Close(); ///////////////////////////////////////////////////////////////////////////////// //string xmldocument; //SerializeReceiptHeaderObject("C:\\receipt.xml", receipt, receiptLines); ////Use an XML document to create a string representation of the customer //XmlDocument xmldoc = new XmlDocument(); //xmldoc.Load("C:\\receipt.xml"); //xmldocument = xmldoc.OuterXml; ////Call eConnect to process the xmldocument. //e.CreateEntity(_dynamicsConnection, xmldocument); ////////////////////////////////////////////////////////////////////////////////// // Call eConnect to process the XmlDocument. e.CreateEntity(_dynamicsConnection, xmlDocument.OuterXml); operationResult.Success = true; operationResult.Message = "Success"; } else { operationResult.Success = false; operationResult.Message = "No items are attached to receive."; } } // The eConnectException class will catch eConnect business logic errors. // display the error message on the console catch (eConnectException exc) { Console.Write(exc.ToString()); operationResult.Success = false; operationResult.Message = "Error"; logger.ErrorFormat("Error saving new receipt: {0} ", exc.ToString()); } // Catch any system error that might occurr. // display the error message on the console catch (System.Exception ex) { Console.Write(ex.ToString()); operationResult.Success = false; operationResult.Message = "Error"; logger.ErrorFormat("Error saving new receipt: {0} ", ex.ToString()); } finally { // Call the Dispose method to release the resources // of the eConnectMethds object e.Dispose(); } } // end of using statement return(operationResult); }
/// <summary> /// serialize recipt /// </summary> /// <param name="filename"></param> /// <param name="receipt"></param> /// <param name="receiptLines"></param> private static void SerializeReceiptObject(string filename, POP10300_Receipt_Work receipt, List <POP10310> receiptLines) { try { // Instantiate an eConnectType schema object eConnectType eConnect = new eConnectType(); taPopRcptLineInsert_ItemsTaPopRcptLineInsert[] lineItems = new taPopRcptLineInsert_ItemsTaPopRcptLineInsert[receiptLines.Count]; taPopRcptLotInsert_ItemsTaPopRcptLotInsert[] lotItems = new taPopRcptLotInsert_ItemsTaPopRcptLotInsert[receiptLines.Count]; var receiptLineNumber = 16384; var lineNumber = 0; foreach (var receiptLine in receiptLines) { // Instantiate a taUpdateCreateItemRcd XML node object taPopRcptLotInsert_ItemsTaPopRcptLotInsert receiptLotLine = new taPopRcptLotInsert_ItemsTaPopRcptLotInsert(); receiptLotLine.POPRCTNM = receiptLine.POPRCTNM; receiptLotLine.RCPTLNNM = receiptLineNumber; receiptLotLine.ITEMNMBR = receiptLine.ITEMNMBR; receiptLotLine.SERLTNUM = receiptLine.SERLTNUM; receiptLotLine.SERLTQTY = receiptLine.QTYSHPPD; receiptLotLine.CREATEBIN = 0; lotItems[lineNumber] = receiptLotLine; // Instantiate a taUpdateCreateItemRcd XML node object taPopRcptLineInsert_ItemsTaPopRcptLineInsert receiptLineItem = new taPopRcptLineInsert_ItemsTaPopRcptLineInsert(); //Populate elements of the taUpdateCreateItemRcd XML node object receiptLineItem.POPTYPE = receiptLine.POPTYPE; receiptLineItem.POPRCTNM = receiptLine.POPRCTNM; receiptLineItem.RCPTLNNM = receiptLineNumber; receiptLineItem.ITEMNMBR = receiptLine.ITEMNMBR; receiptLineItem.VENDORID = receiptLine.VENDORID; receiptLineItem.PONUMBER = receiptLine.PONUMBER; receiptLineItem.VNDITNUM = receiptLine.VNDITNUM; receiptLineItem.QTYSHPPD = receiptLine.QTYSHPPD; receiptLineItem.AUTOCOST = 1; lineItems[lineNumber] = receiptLineItem; receiptLineNumber = receiptLineNumber * 2; lineNumber++; } // Instantiate a taUpdateCreateItemRcd XML node object taPopRcptHdrInsert receiptHeader = new taPopRcptHdrInsert(); //Populate elements of the taUpdateCreateItemRcd XML node object receiptHeader.POPRCTNM = receipt.POPRCTNM; receiptHeader.POPTYPE = receipt.POPTYPE; receiptHeader.receiptdate = receipt.receiptdate; receiptHeader.BACHNUMB = receipt.BACHNUMB; receiptHeader.VENDORID = receipt.VENDORID; // Instantiate a IVItemMasterType schema object POPReceivingsType receipttype = new POPReceivingsType(); // Populate the IVItemMasterType schema with the taUpdateCreateItemRcd XML node receipttype.taPopRcptLotInsert_Items = lotItems; receipttype.taPopRcptLineInsert_Items = lineItems; receipttype.taPopRcptHdrInsert = receiptHeader; POPReceivingsType[] receiptEntry = { receipttype }; // Instantiate a Memory Stream object MemoryStream memoryStream = new MemoryStream(); // Create an XML serializer object XmlSerializer serializer = new XmlSerializer(eConnect.GetType()); // Populate the eConnectType object with the IVItemMasterType schema object eConnect.POPReceivingsType = receiptEntry; // Create objects to create file and write the customer XML to the file FileStream fs = new FileStream(filename, FileMode.Create); XmlTextWriter writer = new XmlTextWriter(fs, new UTF8Encoding()); // Serialize the eConnectType object to a file using the XmlTextWriter. serializer.Serialize(writer, eConnect); writer.Close(); } // catch any errors that occur and display them to the console catch (System.Exception ex) { Console.Write(ex.ToString()); } }
/// <summary> /// Con un Receiving Task generar el documento de Purchase Receipt a Generar /// </summary> /// <param name="recivingTask"></param> /// <returns></returns> public Boolean CreatePurchaseReceipt(Document receipt, IList<NodeTrace> traceList, bool costZero) { eConnectType eConnect; try { if (receipt.DocumentLines == null || receipt.DocumentLines.Count == 0) { ExceptionMngr.WriteEvent("CreatePurchaseReceipt: No lines to process.", ListValues.EventType.Error, null, null, ListValues.ErrorCategory.ErpConnection); throw new Exception("CreatePurchaseReceipt: No lines to process."); } if (receipt.Location == null) { ExceptionMngr.WriteEvent("CreatePurchaseReceipt: Document Location is missing.", ListValues.EventType.Error, null, null, ListValues.ErrorCategory.ErpConnection); throw new Exception("CreatePurchaseReceipt: Document Location is missing."); } taPopRcptLineInsert_ItemsTaPopRcptLineInsert[] docLines = new taPopRcptLineInsert_ItemsTaPopRcptLineInsert[receipt.DocumentLines.Count]; //Create an object that holds XML node object taPopRcptLineInsert_ItemsTaPopRcptLineInsert curLine; int i = 1; //For trak options IList<taPopRcptSerialInsert_ItemsTaPopRcptSerialInsert> serialTrack = new List<taPopRcptSerialInsert_ItemsTaPopRcptSerialInsert>(); IList<taPopRcptLotInsert_ItemsTaPopRcptLotInsert> lotTrack = new List<taPopRcptLotInsert_ItemsTaPopRcptLotInsert>(); // Next consecutive for a Purchase Receipt foreach (DocumentLine dr in receipt.DocumentLines) { //Debe ser active, para garantizar que no es Misc, o service Item if (dr.Product.Status.StatusID == EntityStatus.Active) { curLine = new taPopRcptLineInsert_ItemsTaPopRcptLineInsert(); //Validate Item/Vendor, GP requires that the Vendor has assigned the ItemNumber ValidateItemAndVendor(receipt.Vendor.AccountCode, dr.Product.ProductCode); //Validate Item/Location, GP requires that the Location has assigned the ItemNumber ValidateItemAndLocation(receipt.Location.ErpCode, dr.Product.ProductCode); // Populate Lines curLine.POPRCTNM = receipt.DocNumber; curLine.POPTYPE = GP_DocType.PR_Shipment; curLine.receiptdate = DateTime.Today.ToString("yyyy-MM-dd"); curLine.VENDORID = receipt.Vendor.AccountCode; //Si va a Costo Zero el Costo debe ser enviado en el recibo como ZERO if (costZero) { curLine.AUTOCOST = 0; curLine.EXTDCOST = 0; curLine.EXTDCOSTSpecified = true; curLine.UNITCOST = 0; curLine.UNITCOSTSpecified = true; } else curLine.AUTOCOST = 1; curLine.ITEMNMBR = dr.Product.ProductCode; curLine.VNDITNUM = dr.AccountItem; curLine.LOCNCODE = dr.Location.ErpCode; curLine.RCPTLNNM = i; curLine.UOFM = dr.Unit.ErpCode; curLine.QTYSHPPD = Decimal.Parse(dr.Quantity.ToString()); //Organizando los productos con Serial y Lotcode para cada linea del documento if (dr.Product.ErpTrackOpt > 1 && dr.Product.ProductTrack != null) foreach (ProductTrackRelation pt in dr.Product.ProductTrack) { if (pt.TrackOption.RowID == 1 && pt.DisplayName == null) //Serial serialTrack = GetReceiptLineSerials(serialTrack, traceList.Where(f => f.PostingDocLineNumber == dr.LineNumber).ToList()); else if (pt.TrackOption.RowID == 2 && pt.DisplayName == null) //Lot Code lotTrack = GetReceiptLineLots(lotTrack, traceList.Where(f => f.PostingDocLineNumber == dr.LineNumber).ToList()); } if (!string.IsNullOrEmpty(dr.LinkDocNumber)) { curLine.PONUMBER = dr.LinkDocNumber; curLine.POLNENUM = dr.LinkDocLineNumber; } docLines[i - 1] = curLine; i++; } } //Create a SOPTransactionType schema object and populate its taSopLineIvcInsert_Items poperty POPReceivingsType docType = new POPReceivingsType(); //Adicionado Track Lists docType.taPopRcptLineInsert_Items = docLines; if (lotTrack.Count > 0) docType.taPopRcptLotInsert_Items = lotTrack.ToArray(); if (serialTrack.Count > 0) docType.taPopRcptSerialInsert_Items = serialTrack.ToArray(); //Create a taSopHdrIvcInsert XML node object taPopRcptHdrInsert docHdr = new taPopRcptHdrInsert(); //Populate Header docHdr.BACHNUMB = costZero ? "WMS_LANDING" : receipt.Location.ErpCode + "_" + GPBatchNumber.Receipt; docHdr.POPRCTNM = receipt.DocNumber; docHdr.POPTYPE = GP_DocType.PR_Shipment; docHdr.receiptdate = DateTime.Today.ToString("yyyy-MM-dd"); docHdr.VENDORID = receipt.Vendor.AccountCode; //Define el Auto Cost docHdr.AUTOCOST = costZero ? 0 : 1; docHdr.NOTETEXT = "WMS DOC#: " + receipt.DocNumber; docHdr.VNDDOCNM = receipt.Reference; docHdr.DUEDATE = (receipt.Date5 == null) ? "" : receipt.Date5.Value.ToString("yyyy-MM-dd"); docType.taPopRcptHdrInsert = docHdr; POPReceivingsType[] docTypeArray = new POPReceivingsType[1]; docTypeArray[0] = docType; //Create an eConnect XML document object and populate its docType property with //the docType schema object eConnect = new eConnectType(); eConnect.POPReceivingsType = docTypeArray; //Serialize the XML document to the file XmlSerializer serializer = new XmlSerializer(typeof(eConnectType)); StringWriter writer = new StringWriter(); serializer.Serialize(writer, eConnect); DynamicsGP_ec.SendData(writer.ToString()); return true; } catch (Exception ex) { //ExceptionMngr.WriteEvent("CreatePurchaseReceipt: ", ListValues.EventType.Error, ex, null, //ListValues.ErrorCategory.ErpConnection); throw new Exception(WriteLog.GetTechMessage(ex)); } }