Category Archives: Internal

Change Log of Purchase Requisition System (PRS)

System Requirements

  1. phpMyAdmin version: 5.2.2
  2. PHP version: 7.2
  3. MySQL version: 5.7.26
  4. PHPRunner version: 10.4
  5. Hard Disk Space: 20 MB

 

Database Structure

TABLE COLUMN
purchase_requisition
uggroups
ugmembers
ugrights
users

 

Live URL

https://prs.sweetco.com.my


 

v. 1.0 2026-04-22 Modification Completed

Replace “Rich Text Box” for “Item Description” field with “Text Box with multiple rows”

BEFORE AFTER

 

Rename “vendor” column to “vendor_details” and replace “Rich Text Box” for “Vendor Details” field with “Text Box with multiple rows”

BEFORE AFTER
 


 

Rename columns and labels

  • rename “vendor_url” column to “vendor_link”
  • rename “Vendor Link” label to “Vendo’s Link”
  • rename “Vendor Email” label to “Vendor’s Email”
  • rename “Item Purpose” label to “Item is Used For”
BEFORE AFTER
 

  • vendor_url
  • vendor_email
  • item_purpose

 

Add “Show/hide fields”

BEFORE AFTER

 

Add users to Purchase Requisition System

BEFORE AFTER

 

v. 1.0 2025-02-19 Modification Completed

Move “Supplier” field after “Unit Price” in edit page

BEFORE AFTER





 

Modify the columns of “purchase_requisition” table

BEFORE AFTER
Table Structure

  1. purchase_requisition_id – int
  2. issued_date – date
  3. company_name – varchar (100)
  4. requested_by – varchar (50)
  5. item_description – longtext
  6. item_photo – mediumtext
  7. quantity_requested – int
  8. quantity_in_stock – int
  9. unit_price – double(9,2)
  10. supplier – longtext
  11. item_purpose – varchar (255)
  12. expected_arrival_date – date
  13. delivery_order_photo – mediumtext
  14. received_item_photo – mediumtext
  15. received_item_date – date
  16. issued_by – varchar(255)
  17. approved_by – varchar(255)
Table Structure

  1. purchase_requisition_id – int
  2. issued_date – date
  3. company_name – varchar (100)
  4. requested_by – varchar (50)
  5. item_description – longtext
  6. item_photo – mediumtext
  7. quantity_requested – int
  8. unit_price – double(9,2)
  9. quantity_in_stock – int
  10. vendor – longtext
  11. vendor_email – varchar(255)
  12. vendor_url – varchar(255)
  13. item_purpose – varchar (255)
  14. expected_arrival_date – date
  15. received_item_date – date
  16. received_item_photo – mediumtext
  17. delivery_order_photo – mediumtext
  18. issued_by – varchar(255)
  19. approved_by – varchar(255)

  • vendor_email
  • vendor_url

 

Rearrange the sequence of grid as per the sequence of columns in “purchase_requisition” table

BEFORE AFTER


 

Rearrange the sequence of labels and text box in edit view as per the sequence of columns in “purchase_requisition” table

BEFORE AFTER





 

Rearrange the sequence of rows in the form to follow the sequence of columns in “purchase_requisition” table

BEFORE AFTER


 

v. 1.0 2025-01-15 Modification Completed

Revise the form

  • remove the “Supplier” at top right of table and move it to the table by adding a row after “Unit Price”.
  • rename the label as “Name and Contact Details of Supplier”, set the format of text (data entry) box to “Basic Rich Text Editor” so that user can enter name, address, contact number, link in allow multiple lines.
BEFORE AFTER
 


 

v. 1.0 2025-01-02 Kaizen Completed

Create “sweetcoc_prs” database and assign “sweetcoc_phpMyBackupPro2024” and “sweetcoc_phprunner” users to the database

BEFORE AFTER

MODIFICATION in PHPRunner or cPanel or PHPMyAdmin

  1. Go to cPanel -> “Databases” -> “Manage My Databases”.
  2. Under “Create New Database”, create “sweetcoc_prs”.
  3. Under “Add User To Database”, add “sweetcoc_phpMyBackupPro2024” and “sweetcoc_phprunner” to “sweetcoc_prs” database.

 

Create “purchase_requisition” table in “sweetcoc_prs” database

BEFORE AFTER

MODIFICATION in PHPRunner or cPanel or PHPMyAdmin

  1. Go to cPanel -> “Databases” -> “phpMyAdmin.
  2. Create “purchase_requisition” table.
  3. Add below columns:-
    Name Type
    purchase_requisition_id int(11)
    company_name varchar(100)
    requested_by varchar(50)
    item_description longtext
    item_photo mediumtext
    quantity_requested int(11)
    quantity_in_stock int(11)
    unit_price double(9,2)
    supplier_name varchar(255)
    item_purpose varchar(255)
    expected_arrival_date date
    delivery_order_photo mediumtext
    received_item_photo mediumtext
    received_item_date date
    issued_by varchar(255)
    approved_by varchar(255)

 

Create “prs.sweetco.com.my” domain

BEFORE AFTER

MODIFICATION in PHPRunner or cPanel or PHPMyAdmin

  1. Go to cPanel -> “Domains” -> “Domains”.
  2. Add “prs.sweetco.com.my”.

 

Set PHP version of “Purchase Requisition System” to “PHP 7.2”

BEFORE AFTER

MODIFICATION in PHPRunner or cPanel or PHPMyAdmin

  1. Go to cPanel -> “Software” -> “MultiPHP Manager”.
  2. Check “prs.sweetco.com.my” and change the PHP Version to “PHP 7.2 (ea-php72)”.

 

Create “Purchase Requisition System” project in PRPRunner

MODIFICATION in PHPRunner or cPanel or PHPMyAdmin

  1. Go to PHPRunner and create a new project PRS.
  2. Set the database for PRS.

 

Re-arrange the “view” page of PRS

BEFORE AFTER


MODIFICATION in PHPRunner or cPanel or PHPMyAdmin

  1. Go to “Designer” tab and click “view” tab.
  2. Re-arrange all fields like below:


 

Add “Send Email” function

BEFORE AFTER

MODIFICATION in PHPRunner or cPanel or PHPMyAdmin

  1. Go to “Misc” tab and click “Email Settings…”
  2. Set as below:
  3. Go to “Designer” tab, click on “list” page, click on “Insert…” dropdown and click “Custom Button”.
  4. Click “New Button…”
  5. Name the new button as “Send_Email”. In “Client Before tab, place below code:
    var pdfParams = {},
      selectedRecords = pageObj.getSelectedRecords();
     
    if( selectedRecords.length == 0 )
      return false;
     
    params.recordCount = selectedRecords.length;
    params.filenames = [];
     
    var createOnePdf = function( idx ) {
      ajax.addPDF( 'pdf'+idx, pdfParams[idx], function() {
        delete pdfParams[idx];
        if( Object.keys( pdfParams ).length == 0 ) {
            showDialog();
         }
      });
    }
     
    var showDialog = function() {
     ctrl.dialog( {
      title: 'Email ' + params.recordCount + ' PDF files',
      fields: [
         {
            name: 'Email',
            value: 'factory@sweetco.com.my'
         },
         {
            name: 'Subject',
            value: 'Purchase Requisition No.: '
         },
         {
            name: 'Body',
            value: 'This email is generated by Runner-created application',
            type: 'textarea'
         },
         ]
      });
    }
     
    selectedRecords.forEach( function( ajaxRow, idx ) {
      pdfParams[ idx ] = {
         pageType: 'view',
         keys: ajaxRow.getKeys()
      };
      params.filenames.push( 'Purchase_Requisition#'+ajaxRow.getKeys()+'.pdf' )
      createOnePdf( idx );
     
    });
     
    return false;

  6. In “Server” tab, place below code:
    $attachments = array();
    for( $i=0; $i< $params["recordCount"]; ++$i ) {
      $attachments[] = array(
        "path" => $button->saveTempFile( $params["pdf" . $i] ),
        "name" => $params["filenames"][$i]
      );
    }
    $mail = array();
    $mail["to"] = $params["Email"];
    $mail["subject"] = $params["Subject"];
    $mail["body"] = $params["Body"];
    $mail["attachments"] = $attachments;
     
    $ret = runner_mail( $mail );
     
    if( $ret["mailed"] )
    {
      $result["success"] = true;
    }
    else
    {
      $result["message"] = $ret["message"];
        $result["success"] = false;
    }

  7. In “Client After” tab, paste below code:
    if( result.success ) {
        alert("Your email has been sent!");
    } else {
        alert("Error sending " + result.message);
    }

  8. Place the “Send Email” button at the same row as “Add new” button.

 

Add “Print” and “Save PDF” functions

BEFORE AFTER

MODIFICATION in PHPRunner or cPanel or PHPMyAdmin

  1. Go to “Designer” tab, select “view” tab, click on “Insert…” dropdown and click “Custom Buttom”.
  2. Click “New button…”.
  3. For:-
    • “Print” button
      • “Client Before” tab
        window.print();
         // Uncomment the following line to prevent execution of "Server" and "Client After" events.
        return false;

    • “Save PDF” button
      • “Server” tab
        $record = $button->getCurrentRecord();
        $result["ID"] = $record["purchase_requisition_id"];

      • “Client After” tab
        var params = {
            table: 'purchase_requisition',
            page: 'view',
            pageType: 'view',
            keys: [result["ID"]],
            scale: 120
        }
        
        Runner.PDF.download(params, 'Purchase Requisition no. ' + result["ID"] + '.pdf');

  4. Re-arrange “Print” and “Save PDF” buttons at the bottom.

Edit “Item Photo”, “Delivery Order Photo” and “Received Item Photo” to allow multiple image upload

BEFORE AFTER
  • Item Photo
  • Delivery Order Photo
  • Received Item Photo

MODIFICATION in PHPRunner or cPanel or PHPMyAdmin

  1. Go to “Designer” tab
  2. Set as below:-
    • item_photo
    • delivery_order_photo
    • received_item_photo

 

Add database security to PRS

BEFORE AFTER

MODIFICATION in PHPRunner or cPanel or PHPMyAdmin

  1. Go to “Security” tab, select “Database” and create a new table for “users”.
  2. Add a new user.
  3. Set user group permission.
  4. Add “Big-Boss” to <Admin> group.
  5. Encrypt password.
  6. Set JWT secret key: “YaaBF0qi8Wy7X9Wns2Ci”.

 

Change the title of the project to “Purchase Requisition System v.1.0”

BEFORE AFTER

MODIFICATION in PHPRunner or cPanel or PHPMyAdmin

  1. Go to “Editor” tab, double-click on “PRS” logo.
  2. Rename it to “Purchase Requisition System v.1.0”.

 

v. 1.0 2025-01-02 Beta Testing Completed

TEST OBJECTIVE: Can PRS add another user?

TESTING METHODOLGY TEST RESULT
  1. Log in to PRS using:-
    • Username = Big-Boss
    • Password = 2024$BF#Taufiq
  2. Go to “Admin Area”.
  3. Click on “Add/Edit users” -> “Add new”.
  4. Add:-
    • Username = Sweetco-Public
    • Password = #2023Sweetco
 


 

TEST OBJECTIVE: Can “Item Photo”, “Delivery Order Photo” and “Received Item Photo” fields upload multiple images?

TESTING METHODOLGY TEST RESULT
  1. Add new record in Purchase Requisition.
  2. Go to “Item Photo”, “Delivery Order Photo” and “Received Item Photo” fields and upload more than 1 image to these fields.
  • Item Photo
  • Delivery Order Photo
  • Received Item Photo

 

TEST OBJECTIVE: Can “Send Email” function email the selected record to any email?

TESTING METHODOLGY TEST RESULT
  1. Select any record in Purchase Requisition.
  2. Click “Send Email” button.
  3. Send to “t1@mobitek.my”
 

 

SOP of Resetting Windows 10 for Acer Nitro 5

Resetting also refers to reinstalling.

  1. There are few ways to reset:-
    1. via cloud
    2. using local disk
    3. using recovery media/drive which is a USB thumb drive created via Windows 10
    4. goto https://www.microsoft.com/en-au/software-download/windows10 to create Windows 10 installation media; download “MediaCreationTool21H2.exe”, run it, downlaod download a Windows 10 installer into USB thumb drive
  2. Acer Nitro 5 fail to reset using method (a), (b), (c),  so need to use method (d).
  3. After Windows 10 is installed, avoid using Microsoft account to log into Windows.
  4. Rename PC, joing “MOBITEK” workgroup.
  5. Map “U:\” to “Usefule Software” network drive.
  6. Install the 3 Acer applications:-
    1. Care Center
    2. Nitrosense
    3. Quick Access
  7. Create a restore point.
  8. Run Windows Update to update all updates.
  9. Create a restore point if necessary.
  10. Reinstall applications and drivers:-
    • AnyDesk v. 5.3;
    • Classic Shell;
    • FreeCommander;
    • Intel via Intel-Driver-Support-Assistant (create a restore point after this);
    • from Acer Support
    • NVIDIA via GeForce Experience (create a restore point after this);
  11. Run System Image to create a system image of:-
    • newly installed Windows 10;
    • drivers installed;
    • essential software installed; and
    • Windows updated.
  12. Reinstall software as per “Remove Applications.html” generatged by Geek Uninstaller.
  13. Optional:-
    • create a recovery drive/media using USB thumb drive;
    • create a password reset key using USB thumb drive;

SOP of Refreshing Windows 8.1 for Asus Zenbook UX303L

  1. Before Windows Refresh, use SyncBack to back up files to Buffalo external HDD.
  2. Run Windows Refresh , USB thumb drive “Windows Recovery” is required in order to refresh.
  3. After Windows Refresh is completed, remove Metro Apps using PowerShell command (https://news.softpedia.com/news/How-to-Remove-All-Pre-Installed-Windows-8-Metro-Apps-328110.shtml) :
    • Get-AppxPackage -AllUsers | Remove-AppxPackage
    • Get-AppXProvisionedPackage -online | Remove-AppxProvisionedPackage –online
  4. Run Windows Update to update all updates.
    • optional — install “KB 3138615” first if Windows Update stuck
  5. Reinstall drivers and anti-virus software:-
    • Windows Classic Shell;
    • Intel via Intel-Driver-Support-Assistant;
    • NVIDIA via GeForce Experience;
    • Asustek;
    • Webroot
  6. Optional:-
    • create a recovery media (Windows installer) using USB thumb drive;
    • create a password reset key using USB thumb drive;
    • create a back-up of Windows Activation Key.
  7. Run System Image to create a system image of newly refreshed Windows with drivers and anti-virus installed.
  8. Restore files using SyncBack from Buffalo external HDD to “Documents”
  9. Reinstall software as per “Remove Applications.html”

Pro and Con of Quick.Cart

E-Commerce Platform/Framework: Quick.Cart

Pro

  1. easy to build a e-commerce web site
  2. based on XHTML

Con

  1. once build on a particular folder, it cannot be moved to another folder nor renamed
  2. not based on HTML5 (but can use skin to make web site responsive)
  3. not fully supported by IIS (must use Linux web hosting), error message will appear:-
    1. PHP Notice: Undefined index: REQUEST_URI in C:\Domains\mobitek.com.my\wwwroot\Dell\Price_list\admin.php on line 8