Script to create custom record as a table in View context.

/**
 * @NApiVersion 2.x
 * @NScriptType UserEventScript
 * @NModuleScope SameAccount
 */
define( [ 'N/record', 'N/search', 'N/ui/serverWidget' ],
    function ( record, search, serverWidget )
    {

        /**
         * Function definition to be triggered before record is loaded.
         * @param {Object} context
         * @param {Record} context.newRecord - New record
         * @param {Record} context.oldRecord - Old record
         * @param {string} context.type - Trigger type
         * @Since 2015.2
         */

        function beforeLoad ( context )
        {
            try
            {
                //if(context.type == 'print' || context.type == 'view'){
                var rec = record.load( {
                    type: context.newRecord.type,
                    id: context.newRecord.id
                } );

                var form = context.form;

                if ( context.type == 'view' )
                {
                    //
                    //Hide "Pharmacy Rx View" Sublist in view mode
                    var taxRate = form.getSublist( { id: 'recmachcustrecord_vv_customer' } )
                    taxRate.displayType = serverWidget.SublistDisplayType.HIDDEN;
                }

                var custPres = getPresciptions( context.newRecord.id );

                createTable( form, custPres, context.newRecord.id );
            } catch ( e )
            {
                log.error( 'ERROR', e.message );
            }
        }

        function createTable ( form, data, custId )
        {
            var LOGTITLE = "CREATE_TABLE";

            var rxSublist = form.addSublist( {
                id: 'custpage_presc_table',
                type: serverWidget.SublistType.LIST,
                label: 'Prescriptions',
                tab: 'custom103'
            } );

            try
            {
                form.insertSublist( {
                    sublist: rxSublist,
                    nextsublist: 'recmachcustrecord_vv_customer'
                } );
            } catch ( e )
            {
                log.error( 'WARNING', e.message );
            }

            var prescriptionLinkField = rxSublist.addField( {
                id: 'custpage_prescrptnlink',
                type: serverWidget.FieldType.TEXT,
                label: 'View Link'
            } );

            var petField = rxSublist.addField( {
                id: 'custpage_petfield',
                type: serverWidget.FieldType.TEXT,
                label: 'Pet'
            } );
            var speciesField = rxSublist.addField( {
                id: 'custpage_speciesfield',
                type: serverWidget.FieldType.TEXT,
                label: 'Species'
            } );
            var vetClinicField = rxSublist.addField( {
                id: 'custpage_vetclinicnamefield',
                type: serverWidget.FieldType.TEXT,
                label: 'Vet'
            } );

            var itemNumCol = rxSublist.addField( {
                id: 'custpage_itemnum',
                type: serverWidget.FieldType.TEXT,
                label: 'Item #'
            } );

            var itemNameCol = rxSublist.addField( {
                id: 'custpage_itemname',
                type: serverWidget.FieldType.TEXT,
                label: 'Item Name'
            } );
            itemNameCol.updateDisplayType( { displayType: serverWidget.FieldDisplayType.HIDDEN } );

            var itemDescCol = rxSublist.addField( {
                id: 'custpage_itemdescription',
                type: serverWidget.FieldType.TEXT,
                label: 'Item Description'
            } );

            var qtyCol = rxSublist.addField( {
                id: 'custpage_quantity',
                type: serverWidget.FieldType.INTEGER,
                label: 'QTY'
            } );

            var qtyUsedCol = rxSublist.addField( {
                id: 'custpage_qtyused',
                type: serverWidget.FieldType.INTEGER,
                label: 'USED'
            } );

            var qtyOpenCol = rxSublist.addField( {
                id: 'custpage_qtyopen',
                type: serverWidget.FieldType.INTEGER,
                label: 'REMAINING'
            } );

            var expirationDate = rxSublist.addField( {
                id: 'custpage_expirationdate',
                type: serverWidget.FieldType.DATE,
                label: 'Expires'
            } )

            var rxCol = rxSublist.addField( {
                id: 'custpage_rxnum',
                type: serverWidget.FieldType.TEXT,
                label: 'RX #'
            } );

            var asWrittenCol = rxSublist.addField( {
                id: 'custpage_aswritten',
                type: serverWidget.FieldType.TEXT,
                label: 'As Written'
            } );
            asWrittenCol.updateDisplayType( { displayType: serverWidget.FieldDisplayType.HIDDEN } );

            var openRxCol = rxSublist.addField( {
                id: 'custpage_openrx',
                type: serverWidget.FieldType.TEXT,
                label: 'Open RX'
            } );
            openRxCol.updateDisplayType( { displayType: serverWidget.FieldDisplayType.HIDDEN } );

            var directionsCol = rxSublist.addField( {
                id: 'custpage_directions',
                type: serverWidget.FieldType.TEXT,
                label: 'Directions'
            } );
            directionsCol.updateDisplayType( { displayType: serverWidget.FieldDisplayType.HIDDEN } );

            var commentsCol = rxSublist.addField( {
                id: 'custpage_comments',
                type: serverWidget.FieldType.TEXT,
                label: 'Comments'
            } );
            commentsCol.updateDisplayType( { displayType: serverWidget.FieldDisplayType.HIDDEN } );

            var statusCol = rxSublist.addField( {
                id: 'custpage_status',
                type: serverWidget.FieldType.TEXT,
                label: 'Status'
            } );
            statusCol.updateDisplayType( { displayType: serverWidget.FieldDisplayType.HIDDEN } );

            for ( var i = 0; i < data.length; i++ )
            {
                if ( data[ i ].itemId != '' )
                {
                    var lineQty = ( data[ i ].qty == '' ) ? 0 : data[ i ].qty;
                    var usedQty = getUsedQty( data[ i ].itemId, custId, data[ i ].rxId )
                    var openQty = data[ i ].qty - usedQty < 0 ? "0" : data[ i ].qty - usedQty;


                    if ( data[ i ].rxNum != '' )
                    {
                        rxSublist.setSublistValue( {
                            id: 'custpage_prescrptnlink',
                            line: i,
                            value: data[ i ].viewLink
                        } );
                    }

                    if ( data[ i ].expDate != '' )
                    {
                        rxSublist.setSublistValue( {
                            id: 'custpage_expirationdate',
                            line: i,
                            value: data[ i ].expDate
                        } );
                    }

                    if ( data[ i ].pet != '' )
                    {
                        rxSublist.setSublistValue( {
                            id: 'custpage_petfield',
                            line: i,
                            value: data[ i ].pet
                        } );
                    }

                    if ( data[ i ].species != '' )
                    {
                        rxSublist.setSublistValue( {
                            id: 'custpage_speciesfield',
                            line: i,
                            value: data[ i ].species
                        } );
                    }
                    if ( data[ i ].vet != '' )
                    {
                        rxSublist.setSublistValue( {
                            id: 'custpage_vetclinicnamefield',
                            line: i,
                            value: data[ i ].vet + ' ,</br>' + data[ i ].clinic
                        } );
                    }

                    if ( data[ i ].rxNum != '' )
                    {
                        rxSublist.setSublistValue( {
                            id: 'custpage_rxnum',
                            line: i,
                            value: data[ i ].rxId
                        } );
                    }

                    if ( data[ i ].itemName != '' )
                    {
                        rxSublist.setSublistValue( {
                            id: 'custpage_itemname',
                            line: i,
                            value: data[ i ].itemName
                        } );
                    }

                    if ( data[ i ].itemNum != '' )
                    {
                        rxSublist.setSublistValue( {
                            id: 'custpage_itemnum',
                            line: i,
                            value: data[ i ].itemNum
                        } );
                    }

                    if ( data[ i ].desc != '' )
                    {
                        rxSublist.setSublistValue( {
                            id: 'custpage_itemdescription',
                            line: i,
                            value: data[ i ].desc
                        } );
                    }

                    //if(lineQty != ''){
                    rxSublist.setSublistValue( {
                        id: 'custpage_quantity',
                        line: i,
                        value: lineQty.toString()
                    } );
                    //}

                    //if(usedQty != ''){
                    rxSublist.setSublistValue( {
                        id: 'custpage_qtyused',
                        line: i,
                        value: usedQty.toString()
                    } );
                    //}

                    //if(openQty != ''){
                    openQty = ( openQty.toString().indexOf( '-' ) == -1 ) ? openQty : 0;

                    rxSublist.setSublistValue( {
                        id: 'custpage_qtyopen',
                        line: i,
                        value: openQty.toString()
                    } );
                    //}

                    if ( data[ i ].asWritten != '' )
                    {
                        rxSublist.setSublistValue( {
                            id: 'custpage_aswritten',
                            line: i,
                            value: 'True'
                        } );
                    } else
                    {
                        rxSublist.setSublistValue( {
                            id: 'custpage_aswritten',
                            line: i,
                            value: 'False'
                        } );
                    }

                    if ( data[ i ].openRx != '' )
                    {
                        rxSublist.setSublistValue( {
                            id: 'custpage_openrx',
                            line: i,
                            value: 'True'
                        } );
                    } else
                    {
                        rxSublist.setSublistValue( {
                            id: 'custpage_openrx',
                            line: i,
                            value: 'False'
                        } );
                    }

                    if ( data[ i ].directions != '' )
                    {
                        rxSublist.setSublistValue( {
                            id: 'custpage_directions',
                            line: i,
                            value: data[ i ].directions
                        } );
                    }

                    if ( data[ i ].comments != '' )
                    {
                        rxSublist.setSublistValue( {
                            id: 'custpage_comments',
                            line: i,
                            value: data[ i ].comments
                        } );
                    }

                    if ( data[ i ].status != '' )
                    {
                        rxSublist.setSublistValue( {
                            id: 'custpage_status',
                            line: i,
                            value: data[ i ].status
                        } );
                    }
                }
            }
        }

        function getPresciptions ( custId )
        {
            var returnValue = [];
            var customrecord_vv_prescriptionSearchObj = search.create( {
                type: "customrecord_vv_prescription",
                filters: [
                    [ "custrecord_vv_customer", "anyof", custId ]
                ],
                columns: [
                    "internalid",
                    "name",
                    search.createColumn( {
                        name: "custrecord_vv_rx_number",
                        join: "CUSTRECORD_VV_PRESCRIPTION_ID"
                    } ),
                    search.createColumn( {
                        name: "custrecord_vv_item_name",
                        join: "CUSTRECORD_VV_PRESCRIPTION_ID"
                    } ),
                    search.createColumn( {
                        name: "custrecord_vv_item_number",
                        join: "CUSTRECORD_VV_PRESCRIPTION_ID"
                    } ),
                    search.createColumn( {
                        name: "custrecord_vv_description",
                        join: "CUSTRECORD_VV_PRESCRIPTION_ID"
                    } ),
                    search.createColumn( {
                        name: "custrecord_vv_refill_quantity",
                        join: "CUSTRECORD_VV_PRESCRIPTION_ID"
                    } ),
                    search.createColumn( {
                        name: "custrecord_vv_quantity_open",
                        join: "CUSTRECORD_VV_PRESCRIPTION_ID"
                    } ),
                    search.createColumn( {
                        name: "custrecord_vv_as_written",
                        join: "CUSTRECORD_VV_PRESCRIPTION_ID"
                    } ),
                    search.createColumn( {
                        name: "custrecord_vv_open_rx",
                        join: "CUSTRECORD_VV_PRESCRIPTION_ID"
                    } ),
                    search.createColumn( {
                        name: "custrecord_vv_directions",
                        join: "CUSTRECORD_VV_PRESCRIPTION_ID"
                    } ),
                    search.createColumn( {
                        name: "custrecord_vv_comments",
                        join: "CUSTRECORD_VV_PRESCRIPTION_ID"
                    } ),
                    search.createColumn( {
                        name: "custrecord_vv_status",
                        join: "CUSTRECORD_VV_PRESCRIPTION_ID"
                    } ),
                    search.createColumn( {
                        name: "formulatext",
                        formula: "'<a href=https://386782-sb2.app.netsuite.com/app/common/custom/custrecordentry.nl?rectype=725&id=' || {internalid} || ' target=_blank>View</a>'",
                        label: "Formula (Text)"
                    } ),
                    search.createColumn( { name: "custrecord_vv_pet", label: "Pet" } ),
                    search.createColumn( { name: "custrecord_vv_species", label: "Species" } ),
                    search.createColumn( { name: "custrecord_vv_vet", label: "Vet" } ),
                    search.createColumn( { name: "custrecord_vet_altname", label: "Vet Name" } ),
                    search.createColumn( { name: "custrecord_vv_clinic_name", label: "Clinic Name" } ),
                    search.createColumn( { name: "custrecord_vv_expiration_date", label: "Expiration Date" } )
                ]
            } );

            var myPagedData = customrecord_vv_prescriptionSearchObj.runPaged();

            myPagedData.pageRanges.forEach( function ( pageRange )
            {
                var myPage = myPagedData.fetch( {
                    index: pageRange.index
                } );
                myPage.data.forEach( function ( result )
                {
                    returnValue.push( {
                        recId: result.getValue( 'internalid' ),
                        rxId: result.getValue( 'name' ),
                        rxNum: result.getValue( {
                            name: 'custrecord_vv_rx_number',
                            join: 'CUSTRECORD_VV_PRESCRIPTION_ID'
                        } ),
                        itemId: result.getValue( {
                            name: 'custrecord_vv_item_name',
                            join: 'CUSTRECORD_VV_PRESCRIPTION_ID'
                        } ),
                        itemName: result.getText( {
                            name: 'custrecord_vv_item_name',
                            join: 'CUSTRECORD_VV_PRESCRIPTION_ID'
                        } ),
                        itemNum: result.getValue( {
                            name: 'custrecord_vv_item_number',
                            join: 'CUSTRECORD_VV_PRESCRIPTION_ID'
                        } ),
                        desc: result.getValue( {
                            name: 'custrecord_vv_description',
                            join: 'CUSTRECORD_VV_PRESCRIPTION_ID'
                        } ),
                        qty: result.getValue( {
                            name: 'custrecord_vv_refill_quantity',
                            join: 'CUSTRECORD_VV_PRESCRIPTION_ID'
                        } ),
                        qtyOpen: result.getValue( {
                            name: 'custrecord_vv_quantity_open',
                            join: 'CUSTRECORD_VV_PRESCRIPTION_ID'
                        } ),
                        asWritten: result.getValue( {
                            name: 'custrecord_vv_as_written',
                            join: 'CUSTRECORD_VV_PRESCRIPTION_ID'
                        } ),
                        openRx: result.getValue( {
                            name: 'custrecord_vv_open_rx',
                            join: 'CUSTRECORD_VV_PRESCRIPTION_ID'
                        } ),
                        directions: result.getValue( {
                            name: 'custrecord_vv_directions',
                            join: 'CUSTRECORD_VV_PRESCRIPTION_ID'
                        } ),
                        comments: result.getValue( {
                            name: 'custrecord_vv_comments',
                            join: 'CUSTRECORD_VV_PRESCRIPTION_ID'
                        } ),
                        status: result.getValue( {
                            name: 'custrecord_vv_status',
                            join: 'CUSTRECORD_VV_PRESCRIPTION_ID'
                        } ),
                        viewLink: result.getValue( {
                            name: "formulatext",
                            formula: "'<a href=https://386782-sb2.app.netsuite.com/app/common/custom/custrecordentry.nl?rectype=725&id=' || {internalid} || ' target=_blank>View</a>'",
                            label: "Formula (Text)"
                        } ),
                        pet: result.getText( result.columns[ 14 ] ),
                        species: result.getValue( result.columns[ 15 ] ),
                        vet: result.getValue( result.columns[ 17 ] ),
                        clinic: result.getValue( result.columns[ 18 ] ),
                        expDate: result.getValue( result.columns[ 19 ] )
                    } )
                } );
            } );

            //alert(returnValue);
            return returnValue;
        }

        function getUsedQty ( itemId, custId, prescId )
        {
            var qty = 0;
            var customrecord_vv_autoship_recordSearchObj = search.create( {
                type: "customrecord_vv_autoship_record",
                filters: [
                    [ "custrecord_vv_autoship_item", "anyof", itemId ],
                    "AND",
                    [ "custrecord_vv_autoship_customer_src", "anyof", custId ],
                    "AND",
                    [ "custrecord_vv_autoship_prescription", "anyof", prescId ]
                ],
                columns: [
                    search.createColumn( {
                        name: "custrecord_vv_autoship_quantity",
                        summary: "SUM"
                    } )
                ]
            } );

            var myPagedData = customrecord_vv_autoship_recordSearchObj.runPaged();

            myPagedData.pageRanges.forEach( function ( pageRange )
            {
                var myPage = myPagedData.fetch( {
                    index: pageRange.index
                } );
                myPage.data.forEach( function ( result )
                {
                    qty = result.getValue( {
                        name: 'custrecord_vv_autoship_quantity',
                        summary: 'SUM'
                    } );
                } );
            } );

            qty = ( qty == '' ) ? 0 : qty;
            return qty;
        }

        return {
            beforeLoad: beforeLoad,
        }
    }
);

Leave a comment

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