BA-BS Form Carie Mode: Update an extra form.

Jira Code: MBS-20
Add an extra form “Cari Mutabakat ” in addition to the BA-BS form. Update the forms so that the search result appears only on the click of the ‘Display’ button.

Suitelet: MBS-20 JJ SL Carie Form

/**
 * @NApiVersion 2.x
 * @NScriptType Suitelet
 * @NModuleScope Public
 */
/*******************************************************************************
 * CLIENTNAME:Moneta Business Solutions MBS -20 
 * ************************************************************************ Date :
 * 29/05/2019
 * 
 * Author: Jobin & Jismi IT Services LLP Script Description : This is to Create
 * a SL for showing results of "Cari Mutabakat" form 
 * Date created : 29/05/2019
 * 
 * REVISION HISTORY
 * 
 * Revision 1.0 ${29/05/2019} nd : created
 * 
 * 
 ******************************************************************************/
define(
    ['N/record', 'N/search', 'N/ui/serverWidget', 'N/render', 'N/email', 'N/file', 'N/encode', 'N/task'],
    /**
     * @param {record}
     *            record
     * @param {search}
     *            search
     * @param {serverWidget}
     *            serverWidget
     */
    function(record, search, serverWidget, render, email, file, encode, task) {

        /**
         * Definition of the Suitelet script trigger point.
         * 
         * @param {Object}
         *            context
         * @param {ServerRequest}
         *            context.request - Encapsulation of the incoming
         *            request
         * @param {ServerResponse}
         *            context.response - Encapsulation of the Suitelet
         *            response
         * @Since 2015.2
         */

        function onRequest(context) {
            try {
                var pageIndex = assignDefaultValue(
                    context.request.parameters.pageindexfield, 0);
                var showDisp = assignDefaultValue(
                    context.request.parameters.display, false);
                // log.debug('showDisp', showDisp)
                var form_name = context.request.parameters.form_name;
                var form_type = context.request.parameters.form_type;
                //log.debug('form_name',form_name)
                var formTypeSelected = context.request.parameters.formTypeSelected;
                // var startDateSelected = context.request.parameters.startDateSelected;
                var endDateSelected = context.request.parameters.endDateSelected;

                //endDateSelected

                // var amountSelected = context.request.parameters.amountSelected;
                var mode = context.request.parameters.mode;
                var returnObj = context.request.parameters.returnObj;

                log.debug("mode", mode);
                log.debug("form_name", form_name);
                log.debug("form_type", form_type);

                if (context.request.method === 'GET') {
                    // to create a form
                    var form = serverWidget.createForm({
                        title: 'Mutabakat Formu'
                    });

                    // //Ba-Bs vs cari
                    var formType = form.addField({
                        id: 'custpage_type',
                        label: 'Mutabakat Tipi',
                        type: serverWidget.FieldType.SELECT
                    });
                    if (checkForParameter(form_name))
                        formType.defaultValue = form_name;
                    formType.addSelectOption({
                        value: '0',
                        text: 'Select Any..'
                    });
                    formType.addSelectOption({
                        value: '1',
                        text: 'Ba-Bs Mutabakatı'
                    });
                    formType.addSelectOption({
                        value: '2',
                        text: 'Cari Mutabakatı'
                    });


                    // end date
                    var endDate = form.addField({
                        id: 'custpage_end_date',
                        label: 'End Date',
                        type: serverWidget.FieldType.DATE
                    });
                    if (checkForParameter(endDateSelected))
                        endDate.defaultValue = endDateSelected;

                    // Sublist
                    var searchSublist = form.addSublist({
                        id: 'custpage_search_sublist',
                        type: serverWidget.SublistType.LIST,
                        label: 'Cari Mutabakat'
                    });


                    // to add buttons
                    var display = form.addButton({
                        id: 'custpage_display',
                        label: 'Display',
                        functionName: 'displayResult'
                    });

                    var print = form.addButton({
                        id: 'custpage_print',
                        label: 'Print',
                        functionName: 'printData'
                    });
                    var sendMail = form.addButton({
                        id: 'custpage_send_mail',
                        label: 'Send E-mail',
                        functionName: 'sendMailTo'
                    });

                    var pageIndexField = form.addField({
                        id: 'pageindexfield',
                        type: serverWidget.FieldType.SELECT,
                        label: 'Page Index'
                    }).updateLayoutType({
                        layoutType: serverWidget.FieldLayoutType.STARTROW
                    });

                    if (endDateSelected) {
                        pageIndexField.defaultValue = pageIndex;


                    } else {

                        pageIndexField.addSelectOption({
                            value: 0,
                            text: '0 of 0'
                        });

                        pageIndexField.defaultValue = 0;
                    }

                    var runSearchObj = runSearch(endDateSelected, pageIndexField, pageIndex);
                    log.debug('checkForParameter(runSearchObj', checkForParameter(runSearchObj))
                    log.debug('showDisp', showDisp)
                    if ((checkForParameter(runSearchObj)) && (showDisp === 'true')) {
                        log.debug('showDisp if', showDisp)
                        // dynamically define the column list based on the saved
                        var select = searchSublist.addField({
                            id: 'custpage_select',
                            label: 'Yazdir',
                            type: serverWidget.FieldType.CHECKBOX
                        });
                        searchSublist.addMarkAllButtons();
                        // search definition
                        if (endDateSelected)
                            var columns = runSearchObj.columns;
                        else
                            var columns = {}
                        log.debug('columns', columns)
                        for (var key in columns) {
                            if (columns[key].label != 'nodisplay') {
                                if (key == 'formulacurrency') {
                                    searchSublist.addField({
                                        id: key,
                                        label: columns[key].label,
                                        type: serverWidget.FieldType.CURRENCY
                                    });
                                } else if (columns[key].label == 'BS - Toplam Bedel (KDV Hariç)') {
                                    searchSublist.addField({
                                        id: key,
                                        label: columns[key].label,
                                        type: serverWidget.FieldType.CURRENCY
                                    });
                                } else {
                                    log.debug(key, columns[key].label)

                                    if (key == 'formulatext') {

                                        var field = searchSublist.addField({
                                            id: key,
                                            label: columns[key].label,
                                            type: serverWidget.FieldType.TEXT
                                        });
                                        field.updateDisplayType({
                                            displayType: serverWidget.FieldDisplayType.HIDDEN
                                        });


                                    } else {

                                        searchSublist.addField({
                                            id: key,
                                            label: columns[key].label,
                                            type: serverWidget.FieldType.TEXT
                                        });

                                    }
                                }
                            }
                        }

                        var fieldValue;

                        runSearchObj.result
                            .forEach(function(eachRow, index) {
                                for (var key in columns) {
                                    if (columns[key].label != 'nodisplay') {
                                        fieldValue = (eachRow
                                                .getText(columns[key])) ? eachRow
                                            .getText(columns[key]) :
                                            eachRow
                                            .getValue(columns[key]);
                                        searchSublist.setSublistValue({
                                            id: key,
                                            value: assignDefaultValue(
                                                fieldValue, " - "),
                                            line: index
                                        });
                                    }
                                }
                            });
                    }
                    form.clientScriptFileId = 4516;

                    if (mode == 'download' && form_name == 2) {

                        log.debug("mutabakati");

                        returnObj = JSON.parse(returnObj);
                        // to get the each files
                        //to get PDF set
                        var XML = getPDFContents(returnObj);


                        var jsonFileDownload = file.create({
                            name: 'JsonFileDownload.txt',
                            fileType: file.Type.PLAINTEXT,
                            contents: XML,
                            folder: 1214

                        });
                        jsonFileDownload.save();

                        var renderer = render.create();
                        renderer.templateContent = XML
                        var pdfFile = renderer.renderAsPdf();




                        context.response.writeFile(pdfFile, true);

                    } else if (mode == 'send' && form_type == 2) {
                        var scheduleScrptTask = task.create({

                            taskType: task.TaskType.SCHEDULED_SCRIPT,
                            scriptId: 'customscript_mbs13_jj_ss_sendmail',
                            deploymentId: 'customdeploy_mbs13_jj_ss_sendmail',
                            params: {
                                custscript_object: returnObj,
                                custscript_form_type: form_type
                            }
                        });
                        scheduleScrptTask.submit();

                        //context.response.write("Initiated mail send ....");
                        context.response.writePage(form);
                    } else {
                        context.response.writePage(form);
                    }

                }

                // 4516
            } catch (e) {
                log.debug("Err@ FN onRequest", e);
                // log.error("Err@ onAction FN ",e.message);

            }

        }
        /****************************************************
         * Function to get XML Contents
         ****************************************************/
        function getPDFContents(returnObj) {
            log.debug("returnObj", returnObj)
            try {
                var XML = '<?xml version="1.0"?><!DOCTYPE pdf PUBLIC "-//big.faceless.org//report" "report-1.1.dtd"> <pdfset>';
                // to loop the contents

                for (var key in returnObj) {
                    returnObj[key].name = escape_for_xml((returnObj[key].name));
                    returnObj[key].stringDate = (returnObj[key].stringDate)
                    returnObj[key].amt = (returnObj[key].amt)


                    XML = XML + '<pdf>' +
                        '<head>' +
                        '   <link name="NotoSans" type="font" subtype="truetype" src="${nsfont.NotoSans_Regular}" src-bold="${nsfont.NotoSans_Bold}" src-italic="${nsfont.NotoSans_Italic}" src-bolditalic="${nsfont.NotoSans_BoldItalic}" bytes="2" />' +
                        '   <#if .locale == "zh_CN">' +
                        '       <link name="NotoSansCJKsc" type="font" subtype="opentype" src="${nsfont.NotoSansCJKsc_Regular}" src-bold="${nsfont.NotoSansCJKsc_Bold}" bytes="2" />' +
                        '   <#elseif .locale == "zh_TW">' +
                        '       <link name="NotoSansCJKtc" type="font" subtype="opentype" src="${nsfont.NotoSansCJKtc_Regular}" src-bold="${nsfont.NotoSansCJKtc_Bold}" bytes="2" />' +
                        '   <#elseif .locale == "ja_JP">' +
                        '       <link name="NotoSansCJKjp" type="font" subtype="opentype" src="${nsfont.NotoSansCJKjp_Regular}" src-bold="${nsfont.NotoSansCJKjp_Bold}" bytes="2" />' +
                        '   <#elseif .locale == "ko_KR">' +
                        '       <link name="NotoSansCJKkr" type="font" subtype="opentype" src="${nsfont.NotoSansCJKkr_Regular}" src-bold="${nsfont.NotoSansCJKkr_Bold}" bytes="2" />' +
                        '   <#elseif .locale == "th_TH">' +
                        '       <link name="NotoSansThai" type="font" subtype="opentype" src="${nsfont.NotoSansThai_Regular}" src-bold="${nsfont.NotoSansThai_Bold}" bytes="2" />' +
                        '   </#if>' +
                        '    <macrolist>' +
                        '        <macro id="nlheader">' +
                        '            <table style="width: 100%; font-size: 10pt;"><tr>' +
                        '   <td align="right" style="padding: 0;"><img src="https://system.eu2.netsuite.com/core/media/media.nl?id=21&c=4977528&h=87a60f0e3ed3171b9559" style="float: right; margin: 7px" />  </td>' +
                        '   </tr>' +
                        '   </table>' +
                        '        </macro>' +
                        '        <macro id="nlfooter">' +
                        '            <table style="width: 100%; font-size: 8pt;"><tr>' +
                        '   <td></td>' +
                        '   <td align="right" style="padding: 0;"><pagenumber/> of <totalpages/></td>' +
                        '   </tr></table>' +
                        '        </macro>' +
                        '    </macrolist>' +
                        '    <style type="text/css">* {' +
                        '       <#if .locale == "zh_CN">' +
                        '           font-family: NotoSans, NotoSansCJKsc, sans-serif;' +
                        '       <#elseif .locale == "zh_TW">' +
                        '           font-family: NotoSans, NotoSansCJKtc, sans-serif;' +
                        '       <#elseif .locale == "ja_JP">' +
                        '           font-family: NotoSans, NotoSansCJKjp, sans-serif;' +
                        '       <#elseif .locale == "ko_KR">' +
                        '           font-family: NotoSans, NotoSansCJKkr, sans-serif;' +
                        '       <#elseif .locale == "th_TH">' +
                        '           font-family: NotoSans, NotoSansThai, sans-serif;' +
                        '       <#else>' +
                        '           font-family: NotoSans, sans-serif;' +
                        '       </#if>' +
                        '       }' +
                        '       table {' +
                        '           font-size: 8pt;' +
                        '           table-layout: fixed;' +
                        '       }' +
                        '        th {' +
                        '            font-weight: bold;' +
                        '            font-size: 8pt;' +
                        '            vertical-align: middle;' +
                        '            padding: 5px 6px 3px;' +
                        '            background-color: #e3e3e3;' +
                        '            color: #333333;' +
                        '        }' +
                        '        td {' +
                        '            padding: 4px 6px;' +
                        '        }' +
                        '       td p { align:left }' +
                        '</style>' +
                        '</head>' +
                        '<body header="nlheader" header-height="10%" footer="nlfooter" footer-height="10pt" padding="1.00in 1.00in 1.00in 1.00in" size="Letter">' +
                        '  <#assign aDateTime = .now>' +
                        '  <table width="110%" style="font-family: Times New Roman, Times, serif;font-size: 11pt;"><tr><td align="left">' +
                        '    <p style="font-family: Times New Roman, Times, serif;font-size: 11pt;">  Sayın,' +
                        returnObj[key].name + '</p></td>    <td style="padding-left:170px;"><p style="font-family: Times New Roman, Times, serif;font-size: 11pt;">                 Tarih:${aDateTime?date}</p></td></tr></table><br/>' +
                        '' +
                        '' +
                        '' +
                        '  <p style="font-family: Times New Roman, Times, serif;font-size: 11pt;">Şirketimizde bulunan cari hesaplarınızda ' +
                        returnObj[key].stringDate + ' tarihi itibariyle ' + returnObj[key].amt + ' TL BORÇ / ALACAK bakiyesi vermektedir.</p><br/>' +
                        '' +
                        '  <p style="font-family: Times New Roman, Times, serif;font-size: 11pt;">Mutabık olup olmadığımızı bildirmenizi rica ederiz.</p><br/>' +
                        '' +
                        '' +
                        '  <p style="font-family: Times New Roman, Times, serif;font-size: 11pt;">NOT:<br/>1. Mutabakat veya itirazınızı 7 gün içinde bildirmediğiniz takdirde T.T.K’nın 93.maddesi gereğince mutabık sayılacağımızı hatırlatırız.<br/>2. Bakiyede mutabık olmadığımız takdirde hesap ekstrenizi göndermenizi rica ederiz.</p>' +
                        ' ' +
                        '<br/>' +
                        '' +
                        '  <p style="font-family: Times New Roman, Times, serif;font-size: 11pt;">Saygılarımızla,<br/>BAŞARAN OTOM. SAN.TİC.AŞ.</p>' +
                        '' +
                        '<br/>' +
                        '  <hr style="width:600px;color:#5d5f60;border-width:0.1px;"/>' +
                        '<br/><br/>' +
                        '  <p style="font-family: Times New Roman, Times, serif;font-size: 11pt;">Sayın BAŞARAN OTOMOTİV SAN.TİC.AŞ.</p>' +
                        '' +
                        '<br/>' +
                        '' +
                        '' +
                        '  <p style="font-family: Times New Roman, Times, serif;font-size: 11pt;">...............tarihi itibariyle...................TL BORÇ / ALACAK bakiyesinde mutabık OLDUĞUMUZU/OLMADIĞIMIZI bildiririz.</p>' +
                        '' +
                        '                                                                                ' +
                        '<br/>' +
                        '  <p style="font-family: Times New Roman, Times, serif;font-size: 11pt;"> Kaşe/İmza</p>' +
                        '' +
                        '' +
                        '' +
                        '' +
                        '</body>' +
                        '</pdf>';





                }
                XML = XML + '</pdfset>'
                return XML;

            } catch (e) {
                log.debug("Err@ FN getPDFContents", e);
                //log.error("Err@ onAction FN ",e.message);
                //console.log("Err@ FN =",e.message);
            }
        }
        /*******************************************************************
         * To Format Currency
         * 
         ******************************************************************/
        function format(n) {
            return n.toFixed(2).replace(/./g, function(c, i, a) {
                return i > 0 && c !== "." && (a.length - i) % 3 === 0 ? "," + c : c;
            });
        }
        /*******************************************************************
         * To format the search according to page Index
         ******************************************************************/
        function formatSavedSearch(savedSearchObj, pageIndexField,
            pageIndex) {
            try {
                var columns = savedSearchObj.columns;

                var columnsData = {};
                columns.forEach(function(result, counter) {
                    // columnsData['custpage_col_' + counter] = result;
                    columnsData[(columnsData[result.name]) ? (result.name +
                        '_' + counter) : (result.name)] = result;
                });
                log.debug('columnsData', columnsData)
                // Paginating Results
                var searchPageRanges, size = 15;
                if (savedSearchObj.length < 15) {
                    size = savedSearchObj.length;
                }
                try {
                    searchPageRanges = savedSearchObj.runPaged({
                        pageSize: size
                    });
                } catch (err) {
                    return {
                        status: true,
                        columns: columnsData,
                        result: []
                    };
                }

                if (searchPageRanges.pageRanges.length < 1)
                    return {
                        status: true,
                        columns: columnsData,
                        result: []
                    };

                for (var i = 0, j = searchPageRanges.pageRanges.length; i < j; i++) {
                    pageIndexField.addSelectOption({
                        value: i,
                        text: i + 1 + ' of ' + j + ' Pages'
                    });
                }
                // Fetching Row Data
                var rowData = [];
                var randomObj = {};
                searchPageRanges.fetch({
                    index: pageIndex
                }).data.forEach(function(result) {

                    var entity = result.getValue({
                        name: "entity",
                        summary: "GROUP",
                        sort: search.Sort.ASC,
                        label: "Unvan"
                    });

                              var amount = result.getValue({
                           name: "amount",
                                summary: "SUM",
                                label: "Bakiye"
                    });


                    log.debug("entity", entity)
                    if (!randomObj[entity] && entity!="") {
                        randomObj[entity] = {amount:amount};
                        rowData.push(result);

                    }

                });
                log.debug(Object.keys(randomObj).length, randomObj);

                return {
                    status: true,
                    columns: columnsData,
                    result: rowData
                };

            } catch (e) {
                log.debug("Err@ FN formatSavedSearch", e.message);
                // log.error("Err@ onAction FN ",e.message);
                // console.log("Err@ FN =",e.message);
            }

        }
        /*******************************************************************
         * To Create Search
         * 
         ******************************************************************/
        function runSearch(endDateSelected, pageIndexField, pageIndex) {
            try {
                var filterArray = [
                    ["accounttype", "anyof", "AcctRec", "AcctPay"],
                    "AND",
                    ["posting", "is", "T"],
                    "AND",
                    ["name", "noneof", "2"],
                    "AND",
                    ["type", "noneof", "Custom104"]
                ];
                var isFirstElement = 0;
                if (checkForParameter(endDateSelected)) {
                    filterArray.push("AND", ["trandate", "before",
                        endDateSelected
                    ]);
                }


                // to create search
                var transactionSearchObj = search
                    .create({
                        type: "transaction",
                        filters: filterArray,
                        columns: [
                            search.createColumn({
                                name: "entity",
                                summary: "GROUP",
                                sort: search.Sort.ASC,
                                label: "Unvan"
                            }),
                            search.createColumn({
                                name: "amount",
                                summary: "SUM",
                                label: "Bakiye"
                            }),
                            search.createColumn({
                                name: "formulatext",
                                summary: "GROUP",
                                formula: "case when {vendor.email} IS NOT NULL Then {vendor.email} ELSE case when {customermain.email} IS NOT NULL Then {customermain.email} ELSE 'Boş' END END",
                                label: "email"
                            })
                        ]
                    });
                var searchResultCount = transactionSearchObj.runPaged().count;
                log.debug('searchResultCount', searchResultCount)

                return formatSavedSearch(transactionSearchObj,
                    pageIndexField, pageIndex);
                //  }


            } catch (e) {
                log.debug("Err@ FN runSearch", e);
            }

        }

        /*******************************************************************
         * To check whether a value exists in parameter
         ******************************************************************/
        function checkForParameter(parameter, parameterName) {
            try {
                if (parameter !== null && parameter !== undefined &&
                    parameter !== false && parameter !== "null" &&
                    parameter !== "undefined" &&
                    parameter !== "false" && parameter != "" &&
                    parameter != " ") {
                    return true;
                } else {
                    if (parameterName)
                        log.debug('Empty Value found',
                            'Empty Value for parameter ' +
                            parameterName);
                    return false;
                }
            } catch (e) {
                log.debug("Err@ FN checkForParameter", e);
            }
        }

        /*******************************************************************
         * To assign a default value if the it is empty
         * 
         * @param value
         * @param defaultValue
         * @returns
         ******************************************************************/
        function assignDefaultValue(value, defaultValue) {
            try {
                if (checkForParameter(value))
                    return value;
                else
                    return defaultValue;
            } catch (e) {
                log.debug("Err@ FN assignDefaultValue", e);
            }
        }
        /*******************************************************************
         * Fix text
         * 
         * @param argument
         * @returns Created By JJ on 15-Nov-2017 4:30:21 PM
         */
        function escape_for_xml(argument, xml) {

            try {

                if (argument != "" && argument != null) {
                    //var newString = xml.escape({
                    //  xmlText : argument
                    //});

                    argument = argument.replace(/&/g, '&');
                    argument = argument.replace(/</g, '<');
                    argument = argument.replace(/>/g, '>');
                    argument = argument.replace(/"/g, '"');
                    argument = argument.replace(/'/g, ''');
                    return argument;
                } else {
                    return "";
                }

            } catch (e) {
                log.debug({
                    title: e.name,
                    details: e.message
                });
            }

        }


        return {
            onRequest: onRequest
            //escape_for_xml:escape_for_xml
        };

    });

Suitelete:MBS-20 JJ SL Form Selection Page

/**
 * @NApiVersion 2.x
 * @NScriptType Suitelet
 * @NModuleScope SameAccount
 */
/*******************************************************************************
 * CLIENTNAME:Moneta Business Solutions MBS -20 
 * ************************************************************************ Date :
 * 29/05/2019
 * 
 * Author: Jobin & Jismi IT Services LLP Script Description : This is to Create
 * a SL for choosing the form type Date created : 29/05/2019
 * 
 * REVISION HISTORY
 * 
 * Revision 1.0 ${29/05/2019} nd : created
 * 
 * 
 ******************************************************************************/
define(['N/ui/serverWidget'],

    function(serverWidget) {

        /**
         * Definition of the Suitelet script trigger point.
         *
         * @param {Object} context
         * @param {ServerRequest} context.request - Encapsulation of the incoming request
         * @param {ServerResponse} context.response - Encapsulation of the Suitelet response
         * @Since 2015.2
         */
        function onRequest(context) {
            try {
                if (context.request.method === 'GET') {
                    var form = serverWidget.createForm({
                        title: 'Mutabakat Formu'
                    });
                    form.clientScriptFileId = 4516;
                    var formType = form.addField({
                        id: 'custpage_type',
                        label: 'Mutabakat Tipi',
                        type: serverWidget.FieldType.SELECT
                    });
                    
                      formType.addSelectOption({
                        value: '0',
                        text: 'Select Any..'
                    });
                    formType.addSelectOption({
                        value: '1',
                        text: 'Ba-Bs Mutabakatı'
                    });
                    formType.addSelectOption({
                        value: '2',
                        text: 'Cari Mutabakatı'
                    });
                    context.response.writePage(form);
                }
            } catch (err) {
                log.debug('error @ onRequest', err)
            }

        }

        return {
            onRequest: onRequest
        };

    });

Leave a comment

Your email address will not be published. Required fields are marked *