Avoid using the same Stock Transfer No to prevent overwrite.
E.g.: STC00001
Description
String
E.g.: STOCK TRANSFER
Date
String
E.g.: 2024-11-27T00:00:00+08:00
From Location
String
Must have existing FromLocationin the accounting system.
E.g.: HQ
To Location
String
Must have existing ToLocationin the accounting system.
E.g.: CUST
Table Item
Array
Stock Transfer's Table Item
UI Name
Database
Type
Remarks
Item Code
String
E.g.: A001
Description
String
E.g.: PRODUCT - CL14
UOM
String
E.g.: UNIT
Qty
Decimal
Value must be number, and value cannot be zero or negative.
E.g.: 10.0
Unit Price
Decimal
Value must be number, and value cannot be negative.
E.g.: 10.0
Stock Transfer's Sample Code
Remember to change to the correct field before proceeding to run ANY script.
To find {fieldName}, you are required to have access to Alpha or use Network in Developer Tools [F12].
import clr
clr.AddReference("Newtonsoft.Json")
clr.AddReference("System.Net")
clr.AddReference("System.IO")
from System.Text import *
from Newtonsoft.Json import *
from Newtonsoft.Json.Linq import *
from System import *
clr.AddReference("System.Drawing")
from System.Drawing import Bitmap, Image
from System.Drawing.Imaging import ImageFormat
from System.IO import MemoryStream, StreamWriter
from System.Net import WebClient
import binascii
from System import BitConverter
# search
documentList = Module("{YOUR-MODULE-NAME}").findAll(
{
"Audit.UpdatedDate": {"$gt": Inputs["lastSync"]},
"Audit.UpdatedBy": {"$ne": "External"},
}
)
debug("documentList", documentList)
resultList = []
def prepareRow(x):
row = JObject()
row["itemCode"] = x["{YOUR-ITEM-CODE}"]
row["description"] = x["{YOUR-DESCRIPTION}"].ToString()
row["uom"] = x["{YOUR-UOM}"]
row["qty"] = x["{YOUR-QTY}"]
row["unitPrice"] = x["{YOUR-UNIT-PRICE}"]
return row
def preparePayload(data):
payloadData = JObject()
payloadData["type"] = "ST"
payloadData["payload"] = JObject()
# payloadData["payload"]["docNo"] = None if data['{YOUR-DOC-NO}'] == "" or data['{YOUR-DOC-NO}'] is None else data['{YOUR-DOC-NO}']
payloadData["payload"]["docNo"] = data.DocumentId
payloadData["payload"]["description"] = "STOCK TRANSFER"
payloadData["payload"]["docDate"] = data["{YOUR-DOC-DATE}"]
payloadData["payload"]["FromLocation"] = data["{YOUR-FROM-LOCATION}"]
payloadData["payload"]["ToLocation"] = data["{YOUR-TO-LOCATION}"]
payloadData["payload"]["details"] = JArray.FromObject(
data["{YOUR-TABLE}"].Select(lambda x: prepareRow(x))
)
payloadData["LastModified"] = data.UpdatedDate
return payloadData
# end of added
for entry in documentList:
payloadData = preparePayload(entry)
resultList.append(payloadData)
# debug('payloadData', payloadData)
# debug('done', resultList)
outputs["results"] = JArray.FromObject(resultList)
debug("result", resultList)
moduleName = "{YOUR_MODULE_NAME}"
if inputs is not None and inputs['document'] is not None and inputs['document']['payload'] is not None:
doc = Module(moduleName).find({ 'Document.DocumentId': inputs['document']['payload']['docNo'] })
if doc is not None:
form = Module(moduleName).execute('sync', doc)
form['Error'] = True
form['Error Message'] = inputs['error']
debug("result",form)
Module(moduleName).submit(doc, form)