Creditor

Creditor's Database

UI Name
Database
Type
Remarks

Creditor Account

accNo

String

E.g.: 401-A001

Control Account

controlAccount

String

E.g.: 400-0000

Company Name

companyName

String

E.g.: GLOBAL SHIPPING INC.

Billing Address [Line 1]

address1

String

E.g.: 123 OCEAN DRIVE

Billing Address [Line 2]

address2

String

E.g.: SUITE 200

Billing Address [Line 3]

address3

String

E.g.: MARINA BAY

Billing Address [Line 4]

address4

String

E.g.: SINGAPORE 018956

Phone [Line 1]

phone1

String

E.g.: +6512345678

Phone [Line 2]

phone2

String

E.g.: +6598765432

Attention

attention

String

E.g.: MR. TERRY

Email Address

emailAddress

String

E.g.: contact@globalshipping.com

Currency

currencyCode

String

E.g.: SGD

Credit Term

displayTerm

String

E.g.: NET 30

Creditor'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}').findAll({ 'Audit.UpdatedDate': { '$gt': Inputs['lastSync'] }, 'Audit.UpdatedBy': { "$ne": 'External' }, 'Dynamic.Extension.{YOUR-FIELD-ID}': True })
debug('documentList', documentList)

resultList = []

def image_to_hex(image_url):
    web_client = WebClient()
    image_data = web_client.DownloadData(image_url)
    
    with MemoryStream(image_data) as image_stream:
        bitmap = Bitmap(image_stream)
        # Resize the image
        original_width = bitmap.Width
        original_height = bitmap.Height
        max_width = 240.0
        max_height = 240.0
        # Calculate new dimensions preserving the aspect ratio
        ratio = min(max_width / original_width, max_height / original_height)
        new_width = int(original_width * ratio)
        new_height = int(original_height * ratio)
        debug('new_width', new_width)
        
        resized_bitmap = bitmap.GetThumbnailImage(new_width, new_height, None, IntPtr.Zero)
        
        # Convert the image to PNG (or other supported formats)
        png_stream = MemoryStream()
        #resized_bitmap.Save(png_stream, ImageFormat.Png)
        png_bytes = png_stream.ToArray()
        
        # Convert PNG byte array to hexadecimal string
        png_hex = ''.join('{:02x}'.format(b) for b in png_bytes)

        # Create RTF content with the embedded PNG image
        rtf = []
        rtf.append(r"{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Arial;}}")
        rtf.append(r"\viewkind4\uc1")
        
        #image start
        stream = MemoryStream()
        resized_bitmap.Save(stream, ImageFormat.Bmp)  # Save as BMP
        stream.Position = 0  # Reset stream position

        # Read bytes and convert to hex
        img_bytes = stream.ToArray()
        #debug('img_bytes', img_bytes)
        #debug('here', 'here1')
        #hex_string = binascii.hexlify(img_bytes).decode('ascii')
        hex_string = BitConverter.ToString(img_bytes).Replace("-", "").ToLower()

        # Write the RTF content to a file
        return hex_string

    
def preparePayload(data):
    
    payloadData = JObject()
    payloadData["type"] = "APCreditor"
    payloadData["payload"] = JObject()
    if data['{YOUR-CREDITOR-CODE}'] != None and data['{YOUR-CREDITOR-CODE}'] != "":
        payloadData["payload"]["accNo"] = data['{YOUR-CREDITOR-CODE}'] 
    payloadData["payload"]["controlAccount"] = '400-0000'
    payloadData["payload"]["companyName"] = data['{YOUR-COMPANY-NAME}']
    payloadData["payload"]["address1"] = str(data['{YOUR-ADDRESS-1}'])[:40] if data['{YOUR-ADDRESS-1}'] is not None else None
    payloadData["payload"]["address2"] = str(data['{YOUR-ADDRESS-2}'])[:40] if data['{YOUR-ADDRESS-2}'] is not None else None
    payloadData["payload"]["address3"] = str(data['{YOUR-ADDRESS-3}'])[:40] if data['{YOUR-ADDRESS-3}'] is not None else None
    payloadData["payload"]["address4"] = str(data['{YOUR-ADDRESS-4}'])[:40] if data['{YOUR-ADDRESS-4}'] is not None else None
    payloadData["payload"]["phone1"] = data['{YOUR-TEL-1}']
    payloadData["payload"]["phone2"] = data['{YOUR-TEL-2}']
    payloadData["payload"]["attention"] = data['{YOUR-SALES-STAFF}'].ToString()
    payloadData["payload"]["emailAddress"] = data["{YOUR-EMAIL-1}"]
    payloadData["payload"]["currencyCode"] = data['{YOUR-TRADING-CURRENCY}'].ToString()
    payloadData["payload"]["displayTerm"] = data['{YOUR-PAYMENT-TERM}'].ToString()
    
    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)

Last updated