Blog
-
Automated In-Store Foot Counter Solution
18 Feb 2013 - Posted by The BlueBox under Development.
Bluebox now integrates with the free android application, People Counter, to offer an affordable automated foot count solution for retail stores.
The android app can run on any android phone connected to the wireless network in stores. There is no need for a sim card/contract since the mobile is not required to connect to the cellular network. The phone is mounted on the wall in a bracket near the doorway. The app runs all day and uses the camera of the phone to register movement. Each movement then triggers an email to be sent to a specified email account. The Bluebox system accesses this email account and tracks these messages to determine the foot count for each store (the total divided by two).
-
Homeboxes & Viewlists
12 Apr 2012 - Posted by The BlueBox under Development.
This month's articles focus on an incredibly useful section of the system, namely 'Home boxes' and how to build a home dashboard for users that allows them to access the most relevant and important aspects of their system off one neatly organized home page, sorted into different sections or home boxes.
If you would like to learn more about this and see the specific additions we have made to our KM you can visit: Knowledge Management Update 10. -
HR, publishing & system data administration knowledge management updates
07 Mar 2012 - Posted by The BlueBox under Development.
We are happy to share with you a large number of updates to various sections of our Knowledge Base. We have added documentation for the following sections: HR - eLearning Module, Publishing - Surveys Module and Data Administration - Removing Duplicate Records in BlueBox2.0
If you would like to learn more about this and see the specific additions we have made to our KM you can visit: Knowledge Management Update 9. -
Point of Sale & Human Resources Knowledge Management Updates
02 Feb 2012 - Posted by The BlueBox under Development.
The focus of this week's update is mainly on our Point of Sale Module, as well as our Human Resources Module. All of the common actions performed as a till operator have been updated and clearly detailed in our EPOS section. On the HR side, articles detailing the exact steps to follow in order to setup your Bluebox Payroll system have now been added.
If you would like to learn more about this and see the specific additions we have made to our KM you can visit: Knowledge Management Update 8. -
New Deduplication Tool in BlueBox2.0
30 Jan 2012 - Posted by The BlueBox under Development.
BlueBox2.0 Database Module now includes a new data deduplication tool to assist in scrubbing out annoying duplicate entries.
The new tool can be found in the Database Tools list in Admin->Database.
If you would like to learn more about this you can visit: New Deduplication Tool in BlueBox2.0. -
Reading and Writing Data from an Excel File into BlueBox2.0
23 Jan 2012 - Posted by The BlueBox under Development.
In the post linked below a very simple technique for reading and writing data in Excel files (xls) for use with the BlueBox2.0 platform has been explained, this concept is generically valuable to any PHP/MySQL developer.
Basically a simple web-query is uploaded into a cell in your spreadsheet with a pre-defined query built into it. This query is set up to request a result from your BlueBox2.0 system.
If you would like to learn more about this you can visit: Reading and Writing Data from an Excel File into BlueBox2.0. -
Our latest development: Draggable and Resizable Objects
16 Jan 2012 - Posted by The BlueBox under Development.
This week I want to share a new LGPL library we have used in a few BlueBox2.0 projects, by Angus Turnbull, TwinHelix Designs, http://www.twinhelix.com.
The use of this new function is to allow certain elements in your pages to be draggable and resizeable.
You can read more about this development on our lead technology strategist's blog post: Draggable and Resizable Objects. -
BlueBox2.0 Surveys
09 Jan 2012 - Posted by The BlueBox under Development.
Tucked away in the Publishing->WebTools menu is our original BlueBox Surveys module. This has recently been upgraded and includes linking surveys to any data in the BlueBox2.0 System, control of the survey look and feel via custom CSS, a brand new dashboard and reporting.
You can read more about the upgrade on our lead technology strategist's blog post: BlueBox2.0 Surveys. -
Hiding NEW buttons with bbsettings
17 Oct 2011 - Posted by The BlueBox under Development.
Our latest bbsettings give you the ability to hide the NEW button:
bbsetting_hide_new_button_on_find_a_person: this bbsetting will hide the NEW button when searching for a person when logged into your system in the RHS "Find a Person:" field.
bbsetting_hide_new_button_on_all_lookups: this bbsetting does exactly as the name describes. It removes the NEW button on all lookups. -
The New BlueBoxOnline.com
05 Oct 2011 - Posted by The BlueBox under Development.
If you are a regular visitor to our website you will have noticed our brand new design. This website is using the latest HTML5 markup, CSS3 styles and jQuery to give this contemporary design speed and flexibility on the web of today.
Home
The BlueBox prides itself on building robust and sophisticated web-based ERP systems. We can assist you in optimising your business with our suite of ERP modules and vertical solutions either as a dedicated server solution or as Software as a Service (SaaS).
Product Tour
A guided tour of our products/modules that we offer. Featuring summaries, screenshots and key feature lists to get an informative idea of what we can offer you.
Demo
We give you three ways to demo our software with three different levels of engagement. You can either try a preconfigured one click demo, fill in a form for a full system live demo and finaly if you are a geek and keen to get your hands dirty, you can download and install BlueBox2.0 on your own web server.
Pricing
Price point is a main consideration no matter what you are looking to purchase and so we have tried to make it simple and easy to understand how much it will cost your business to run BlueBox2.0. We also offer you more than ten reasons why you should choose BlueBox2.0 and if you are interested you can fill in our quote form so that we can assess your needs and send you an accurate quote.
As for the rest of the new pages and content you will have to explore our website to see what they look like.
-
How to add a new SO to the system using a foreign currency
19 Sep 2011 - Posted by The BlueBox under Development.
Here is an example of how to add a new SO to the system, with multiple lines, using a foreign currency (i.e. not the base currency):
<?php //prepare the data $data=array(); $data[do_not_redirect]="true"; $data[this_class]="bb_sales_orders"; $data["fields"]["despatch_fromISbb_locationsID"]=1; $data["fields"]["customerISbb_usersID_IN_Debtors"]=1; $data["fields"]["categoryISbb_sales_orders_categoriesID"]=1; $data["fields"]["transaction_date"]=now(); $data["fields"]["grand_totalCUR_TYPE"]=4;//this line tells the header what currency is being used //{add row 1 $new_row["itemISbb_item_dataID"]=1; $new_row["description"]="Some Description 1"; $new_row["qtyNUM"]=1; $new_row["priceCUR"]=10; $new_row["priceCUR_TYPE"]=4; $new_row = calculate_finance_doc_line_totals($new_row);//this line prepares all the totals and currency values etc $data["fields"]["rows"][]=$new_row; //} //{add row 2 $new_row["itemISbb_item_dataID"]=1; $new_row["description"]="Some Description 2"; $new_row["qtyNUM"]=2; $new_row["priceCUR"]=11; $new_row["priceCUR_TYPE"]=4; $new_row = calculate_finance_doc_line_totals($new_row);//this line prepares all the totals and currency values etc $data["fields"]["rows"][]=$new_row; //} //{add row 3 $new_row["itemISbb_item_dataID"]=1; $new_row["description"]="Some Description 3"; $new_row["qtyNUM"]=3; $new_row["priceCUR"]=12; $new_row["priceCUR_TYPE"]=4; $new_row = calculate_finance_doc_line_totals($new_row);//this line prepares all the totals and currency values etc $data["fields"]["rows"][]=$new_row; //{prepare the doc for storage, total all the lines etc $data=calculate_finance_doc_header_totals($data); //} //{store the doc $new_so=new bb_sales_orders(); $new_so=$new_so->add($data); //} //{view the doc $view=new bb_sales_orders(); $view->view(array("_id"=>$new_so[_id])); //} ?>
-
Content Items now BU Specific
13 Sep 2011 - Posted by The BlueBox under Development.
Just a quick note to say the bb_content (The BB2.0 CMS) is now BU specific, which means that news/content added to each BU stays in each BU
All the usual BU related views apply, so content added at Global will be visible to all BU's, but 2 BU's next to each other will not be able to see each other's content etc.
All previously entered content will be BU=NULL which means it is visible to all, as it was previously. -
BlueBox Timezone Management
15 Aug 2011 - Posted by The BlueBox under Development.
Our latest bbsetting controls timezone management.
For a system-wide setting, set the config (admin->config) setting system_default_timezone.
For a user-specific timezone setting there is a field in the bb_users table called timezone.
The value for either of these can be set to one of the standards described in http://www.php.net/manual/en/timezones.php. -
Pulling through a 'xtrafield'
14 Jul 2011 - Posted by The BlueBox under Development.
Pull through a 'xtrafield' from the SALES ORDER to INVOICE.
A new extension on lined variable tags:
< !-- : linkedvariable : despatch_note IS bb_sales_despatch_notes ID | sales_order IS bb_sales_orders ID | customer_order_number : -- >
This has been tested in a debtors invoice, it links to the despatch note, then to the sales order (via the despatch note) and finally returns the customer_order_number.
Please note this requires the latest code to work. -
How to show discounted price in BB2 Forms
06 Jul 2011 - Posted by The BlueBox under Development.
Below is the 'tag' or formula to show the discounted price in BB2.0 forms.
Remember that, because of rounding, this discounted unit price will not always make sense when viewed in a line, hence the fact that we do not show it in the first place. We calculate discount after the price has been multiplied by the qty for accuracy. This process will display the unit price less the discount which, due to rounding, and at very large quantities, will not add up correctly. However, it is an indication of the value.
To display the discounted unit price, simply replace the current < !--:item_display_value:priceCUR:-- > tag in the (module)_items-viewlist_print.template:<script> var pricex=''; var discountx=''; var discount_calculatedx=(pricex*1)*((discountx*1)/100); var new_price=(pricex*1)-(discount_calculatedx*1); document.write(Curr(new_price)); </script>
-
More new BBsettings
27 Jun 2011 - Posted by The BlueBox under Development.
We have another two new bbsettings for you guys:
bbsetting_unique_fields can now take an input where the filed name can be made up of 2 field names, split by a | (pipe) and then the combination of both fields is determined to be unique.
The next bbsetting, bbsetting_ajax_lookup_force_dropdown, will force ajax lookups for a certain module to always be dropdowns.
This only applies to modules where there is not already a bespoke lookup function (ie bb_users). -
Our latest BBsettings
24 Jun 2011 - Posted by The BlueBox under Development.
We have two new bbsettings to share with you:
These new bbsettings are as a result of our work here in the UK:
bbsetting_module_background_color if set this will throw a background behind all the pages/forms for the specific module.
This allows you to colour-code your various modules so that people don't get confused when working within certain modules.
Secondly to hide the NEW button which appears when doing user lookups, you can set bbsetting_hide_new_button_on_userlookups per module that requires this to be hidden. -
Required Field Combinations
10 Jun 2011 - Posted by The BlueBox under Development.
A new feature bbsetting has been added to the system as follows:
<?php var $bbsetting_required_fields_combinations=array( array("leaving_date","reason_for_leavingISbb_carers_dl_reason_for_leavingID"), array("referred_date","referred_byISbb_carers_dl_professional_typesID","referred_by_name"), ); ?>
This is similar to bbsetting_required_fields only that it is made of sub-arrays of field names and checks to see if the combination of fields has been set, so if any of the fields has been set then the others are required. -
Safely replacing the standard view in BB2
08 Jun 2011 - Posted by The BlueBox under Development.
A quick tutorial on creating a custom "view" for a bb2 module.
We will show you how to do this without replacing the "view" method which is a big no-no.
For a new module we are doing with in the UK, we developed a custom "view" method called "view_example" in the relevant module.
This worked well in the custom reports, because we could like to bb_example&method=view_example&global[fields][_id]=1 and it would work fine.
The problem arose when, in normal system use, you ended up clicking on bb_example&method=view&global[fields][_id]=1 then it swung back to the default boring bb2 view. Which is essential as a back-stop, and should never be overwritten.
The answer?
To create a new database template called bb_carers_carers-print.template, in other words a standard print "view" template and put into it a single line:
< !--:class:bb_example:view_example:-- >
This then executes the "print template" when trying to view a content item in this table, and the tag then runs the new bespoke method and renders it beautifully.
This way the standard's based output->system view method still allows us to see the "boring view" if we need to, but the user gets the enhanced view most of the time. -
New Barcode Type for BlueBox
09 May 2011 - Posted by The BlueBox under Development.
We now have a second "standard" in BB2 for Barcode Printing and Scanning.
'Out the Box' BlueBox2.0 is configured to run code39 barcodes. These are the easiest in the barcode kingdom due to the fact that they do not require and 'extra' processing, what to put in is what you get out.
Recently we have been asked to add ean13 to the supported codes.
Ean13 is a country specific, manufacturer specific coding format.
Each country has a specific prefix (in SA's case it is 600 or 601). Then each product manufacturer gets a code (4 digits). Each manufacturer then gets 5 further digits for their own product codes. Eg:
600 2072 00560
This is an example ean13 barcode string. It is then followed by a check-digit which is calculated to error-check accuracy of scanning and manual capture. eg:
6002072005604
In total the barcode string is 12 characters long and the check-digit is 1 character long.
You can send ANY 12 character digit string to the barcode generator and it will generate a barcode.
You do not need to add the check-digit at the end, the engine does that for you. If do add one, it will be ignored.
When scanning in ean13 codes, the system will only count the first 12 characters of the return string for product matching. If a 13th character is sent through it will be ignored. If the string is greater than 13 or less than 12 characters it will fail.
To switch on ean13 as the system standard, simply set the bbsetting bbsetting_barcode_use_method_2 = 1 in Module Settings.
Barcodes of various types can be generated in method_2 mode.
The 'standard' is ean13, but other options include std25, int25, ean8, ean13, code11, code39, code93, code128, codabar, msi and datamatrix.
A standard barcode tag looks like this:
< !--: class : bb_barcode : view | :-- > for dynamic (used most often) or < !--: class : bb_barcode : view | 6002072005604 :-- > for static/testing.
The full set of configurations for this tag is:
< !--: class : bb_barcode : view | , font-size, hide_borderYN, hide_numericYN, exact_width, exact_height, exact_x, exact_y, bar_width, format (std25, int25, ean8, ean13, code11, code39, code93, code128, codabar, msi, datamatrix) :-- >
or, for testing
< !--: class : bb_barcode : view | 6002072005604, font_size, hide_borderYN, hide_numericYN, exact_width, exact_height, exact_x, exact_y, bar_width, bar_height, format( std25, int25, ean8, ean13, code11, code39, code93, code128, codabar, msi, datamatrix) :-- >
Some variations of barcode tags:
< !--: class : bb_barcode : view | 6002072005604, 6, 0, 0, 140, 90, 70, 40, 1 , 60, ean13 :-- > (small)
< !--: class : bb_barcode : view | 6002072005604, 6, 0, 0, 220, 90, 110, 35, 2, 60, ean13 :-- > (medium)
< !--: class : bb_barcode : view | 6002072005604, 8, 0, 0, 220, 120, 110, 60, 2, 75, ean13 :-- > (normal)
< !--: class : bb_barcode : view | 6002072005604 :-- > (normal)
If you are running your product codes in ean13 and need to show your document codes in code39, then simply edit the document print template barcode tag to switch it to code39 for that specific document.
< !--: class: bb_barcode : view | ,,,,,,,,,, code39 :-- > (code39 example tag for use when system is in method_2 (ean13) mode). -
Easier Session Management in BB2
03 May 2011 - Posted by The BlueBox under Development.
A small "session refresh" tool into the user management module of BB2.
The highlighted icon shows if you have the latest code and are using the standard bb_secure-logoff-form.template (which 99.99% of systems are).
By clicking on this the system will rebuild the session for that user, and flush their menu cache.
Previously users had to log off and log in again. -
Is BB2.0 64 Bit compatible?
08 Apr 2011 - Posted by The BlueBox under Development.
Yes BB2.0 is 64 Bit Compatible. However when working with 64 Bit systems two third party downloads are required.
The primary is ioncube to decrypt our encrypted php code. You will need to download the relevant 64 bit loader from http://www.ioncube.com/loaders.php and the load them via your web root and php.ini.
The next is chart director we need to http://www.advsofteng.com/download.html select the required loader and then update the engine/3rdparty/chartdir/ directory with the correct loaders.
This and other frequently asked questions are asked and answered on our FAQ page. -
Adding Dynamic Lines to Documents
28 Mar 2011 - Posted by The BlueBox under Development.
If you ever need to add dynamic multi-line form items we have developed a neat javascript way of doing this, as follows:
This is pretty straightforward stuff, but the key element is letting BB2.0 auto-create the form elements for you using the $global[engine] object, shown highlighted below.row=0; function additem(){ row++; var tbody = document.getElementById('tablethatholdstheitems'); var rowobj = document.createElement('TR'); rowobj.style.background='white'; rowobj.id='row_'+row; //{ var cell = document.createElement('TD'); cell.align='center'; cell.width='12px'; var outputstring= '<span onmouseover=this.style.cursor=\'pointer\'; onclick=\"delete_row('+row+');\" ><img src=engine/images/kill.gif></span>'; cell.innerHTML=outputstring; rowobj.appendChild(cell); //} //{ var cell = document.createElement('TD'); cell.align='right'; var outputstring= '<input style=font-size:8pt; size=10 name=global[fields][notesISsmallplaintextbox] id=global[fields][notesISsmallplaintextbox]>'; outputstring=outputstring.replace(/global\[fields\]/g,'global[fields][rows]['+row+']'); cell.innerHTML=outputstring; rowobj.appendChild(cell); //} //{ var cell = document.createElement('TD'); cell.align='center'; var outputstring= '".(addslashes($global[engine]->get(array("template_contents"=>"<!--:formfield:qtyNUM||1|style=font-size:8pt;:-->"))))."'; outputstring=outputstring.replace(/global\[fields\]/g,'global[fields][rows]['+row+']'); cell.innerHTML=outputstring; rowobj.appendChild(cell); //} tbody.appendChild(rowobj); } function delete_row(id){ var this_table=document.getElementById('additems'); this_table.removeChild(document.getElementById('row_'+id)); }
-
BB2.0 item_display_value query
08 Mar 2011 - Posted by The BlueBox under Development.
Displaying Item Values
The function item_display_value() can be used the following ways:
item_display_value(array("fieldISbb_some_tableID",$value)) where $value can be a numeric ID value, or an array where the KEY is the filed name and the ID is the associated value.
For example: item_display_value(array("customerISbb_usersID
_IN_Debtors",$invoice)) will look in the $invoice variable for "customerISbb_usersID_IN_Debtors"=>33.
The tag for this is
< !--:item_display_value:customerISbb_usersID_IN_Debtors:-- > or
The above examples will show the FULL value of the item which includes a clickable link to the VIEW of that data element as well as the _id in brackets.
To run this in a trimmed view, not clickable and with no _id showing, invoke the "trimmed" extension:
item_display_value(array("customerISbb_usersID
_IN_Debtors",$invoice),"trimmed") or
< !--:item_display_value:customerISbb_usersID_IN_Debtors. -
Write your own ajax lookups for BB2.0
02 Mar 2011 - Posted by The BlueBox under Development.
An override bbsetting for your own ajaxlookups for b2 modules that require more than the "standard lookup".
The bbsetting is called:
bbsetting_ajax_lookup_jsfunction = some_string
For example set this to "testjsfunction".
If this is set you can then include your own js function to handle the lookups, as per this example:<script> function testjsfunction(){ $('div_global[fields][countryISbb_countriesID]').style.display='block'; ajax2div('div_global[fields][countryISbb_countriesID]','/?class=bb_countries&method=some_custom_ajax_search_function&global[noincludes]=rawtext'); } </script>
<!--:formfield:countryISbb_countriesID:-->
Remember that your "click back" from the ajax results needs to close the lookup box and pass the following values:
to $('viewer_global[fields][countryISbb_countriesID]').value pass the NAME of the item.
to $('global[fields][countryISbb_countriesID]').value pass the VALUE (_id) of the item.
something like:<span onclick="$('div_global[fields][countryISbb_countriesID]').style.display='none';$('viewer_global[fields][countryISbb_countriesID]').value='$country[name]';$('global[fields][countryISbb_countriesID]').value=$country[_id];">$country[name]</span>
-
The BlueBox Quality Assurance Module
28 Feb 2011 - Posted by The BlueBox under Development.
A brief overview of the Quality Assurance module set:
- Quality Assurance is the process of setting 'standards for various categorised parts of a business, and then cyclically reviewing and auditing these in a disciplined manner. If, through the QA audit process, errors or inefficiencies are detected, then actions are created which are intended to fix those.
- The Quality Assurance module consists of 'audit categories' (a 2 level tree of folders, top level is the 'department' or 'zone', the second level is the 'unit/subgroup/audit cluster').
- Into each of these 2nd tier categories you place "auditables" which is a numerically ordered list of items/processes that require auditing within that specific sub-group.
- "Auditables" have groups associated with them, one is the "owners", the department heads, and the other group is the "auditors".
- "Auditables" are given two cyclical indicators which determine how frequently they get reviewed (which the owners do) and how frequently they get audited (which the auditors do).
- The whole module runs off a calendar grid which uses colours to indicate when reviews/audits are due, and if they are overdue, or if they are done.
- A report generator allows you to pull audit summary and detail reports.
- An email engine which runs with every pull of the main dashboard triggers off reminder emails to owners and auditors when they have audits or reviews coming up within 7 days or if they are overdue.
- From these emails they have a one-click link to capture the audit/review results.
- Each time an audit/review is captured, the person capturing has the opportunity to spawn an auidtable-action, which is triggered for a 3rd party to handle, and sign off when done.
- These "action items" also have email reminders, and their own small alerting function built into the dashboard.
-
Setting a method's title tag
23 Feb 2011 - Posted by The BlueBox under Development.
Short and to the point this morning.
Have you ever wondered if it's possible to set the title for a method? Well it is possible.
You need to update the following bbsetting:
bbsetting_method_titles=array("function_name"=>"special title","etc"=>"etc") -
Monitoring sales order backorders from your home page
21 Feb 2011 - Posted by The BlueBox under Development.
We have given the sales order backorder report a facelift.
You can now select "widget mode" and have it generate a summary of the no of items on backorder in a concise table, complete with a code snippet for embedding the widget into a home page box.

-
Item data
02 Feb 2011 - Posted by The BlueBox under Development.
When referring to custom forms which require items with both bb_item_data and bb_item_data_options i.e. the top-level codes and their associated size/style sub codes.
Whenever you insert an item data lookup field into bespoke forms for example using <!--:formfield:itemISbb_item_dataID:--> or where the rows are autogeneated extending the fully qualified field id to read as global[fields][rows][1][itemISbb_item_dataID]. You need to make sure you insert the associated options fields as well. So, a sample would look like this:<tr> <td> Item: </td> <td> <!--:formfield:itemISbb_item_dataID:--> <!--:formfield:option1ISbb_item_data_options1ID:--> <!--:formfield:option2ISbb_item_data_options2ID:--> <!--:formfield:option3ISbb_item_data_options3ID:--> </td> </tr>
The reason for the extra 3 fields is to create the containers for receiving and storing the data associated with the sub-codes identifying the full product description. Your table should also include these 3 fields if you need this level of data to be stored.
The item lookup object then detects to see if the 3 fields exist and, if so, will auto pouplate the relevant fields with the selected data. -
Manipulating system data for import
31 Jan 2011 - Posted by The BlueBox under Development.
If you ever have had a problem with manipulating system data during an import you can now follow these rules below or visit our Knowledge Management section : System Administration : Importing and Exporting Data : Manipulating System Data For Import for more information.
Note that you will require an editor cable of manipulating .csv files such as excel or open office. The csv files that are generated are comma separated and you will need to set the column type "text" to prevent any built in editor functions from automatically changing the data fields (date fields are often incorrectly changed in order to display according to your machine's local regional settings). Note that the text delimiter needs to be set to double quotation marks "however a file will typically be imported without having to change any options.
Follow these rules:- Leave the _id field blank for a new row in the table.
- Leave the _id field 'as is' (ie with a number set by the system) to edit the data in the table with that id.
- Never enter a manual _id number unless you really know what you are doing and have a good reason for it.
- Use multiple linktable_ columns to link a single user to multiple groups.
If you are experiencing trouble with your file format, start from scratch:
- Export a clean file from the table.
- Reomve all rows but one.
- Test re-importing it, as is without changes.
- Then delete all the unwanted columns (except _id).
- Now add 01LINKTABLE_bb_users_groups_link, 02LINKTABLE_bb_users_groups_link, 03LINKTABLE_bb_users_groups_link etc columns.
- Remember that the 'values' in these columns can be either the _id of the group, the 'name' of the group or event the 'code' of the group is there is a 'code' field in the table.
- This logic applies to all linktable imports.
Required Fields:
The only required field in an import file a the first column named _id. The header row is required and should not contain any data other than the field names. You can delete any columns from your export file which you do not want to re-import and leave the ones you require (except for the _id field).
The _id Column:
A blank _id field indicates that the data is new and that a new _id should be automatically assigned to it. An existing _id implies that the data for that _id exists and that any changes to that row should be recorded against that id. If an _id is given and the row does not exist in the database, a new row will be created with the _id specified.
DATA/GROUP/LINK Tables:
Don't get confused between 3 types of data tables prolific in the system: data tables (bb_users), group tables (bb_users_groups) and link tables (bb_users_groups_link). To import full user data you would want to import your bb_users_groups data first, i.e. group names, and their relationship with other groups. Then you would import your bb_users data, and lastly you would import the bb_users_groups_link data to link users to groups. A shortcut in this process is adding a LINKTABLE_bb_users_groups_link column to bb_users import file, which can contain either the ID of the group or the name. For more than one LINKTABLE_ instruction per user line in the import, simply add a number before each column name: eg 1LINKTABLE_bb_users_groups_link, 2LINKTABLE_bb_users_groups_link.
Referencing ID'S from other tables:
All fields containing ID are numeric ID referenced to other tables. These can be entered as either the relevant numeric ID or the name of the entry assuming it is unique. -
How to hide ex VAT sales price in item lookups
25 Jan 2011 - Posted by The BlueBox under Development.
This is quite easy to do, you need to change the bbsetting: bb_item_data -> bbsetting_item_lookup_hide_sales_price_ex_vat.

-
The evolution of our home page
21 Jan 2011 - Posted by The BlueBox under Development.
Now for those of you who visit our website often you may have noticed some changes to our home page. We would like to formally introduce those changes to you.

We have optimized our header for your viewing pleasure by increasing the breathing room of each of the objects in it. We were able to create more space by moving our Live Help messenger to the left-hand side margin of the page and remember you can you can get live support with just a click of the button, try it out here.
We have eight brand new banners displaying some screenshots of our software that all link to relevant pages where you can find out all you need to know about that specific module.
We have some new copy in our Brilliant Web-based Business Software paragraph to make sure that you don't look any further for an all-in-one system to power your business.
We decided to introduce four points that we are really proud about our software, namely:- We offer a no obligation full free evaluation of our software.
- There is no per-user licensing.
- We are able to very rapidly provide customized best-fit mini-modules through the BlueBox 2.0 development platform.
- Your company can take over the world from anywhere and all you need is an internet connection and you can have full access to your system.
Finally the page is finished off with a stream of some of the companies we have worked with.
-
How to add no-print fields to a template
17 Jan 2011 - Posted by The BlueBox under Development.
If you need to add the user and date/time to an added/modified document for viewing on a couple of templates, but do not want to let it show on the print out, i.e. only for viewing on the screen, you need to do the following.
Set the class of the container to class=no_print. So in the instance where you are dealing with a normal BlueBox 2.0 table which shows a sales order, you would set this in the tr tag.
<tr class=no_print> <td bgcolor=#EEEEFF width=25% valign=top>Captured:</td><td bgcolor=white valign=top> By <!--:linkedvariable:_authorid:--> on </td> </tr> <tr class=no_print> <td bgcolor=#EEEEFF width=25% valign=top>Modified:</td><td bgcolor=white valign=top> By <!--:linkedvariable:_modifierid:--> on </td> </tr>
-
Ability to Re-post GL Entries from Doc View
12 Jan 2011 - Posted by The BlueBox under Development.
You don't need to run doc-map-analysis to re-post gl entries for a specific document anymore.
We have added a "re-post" link in red next to the "view gl entries" link in each document view.
This is only available to Admin.
It deletes the old entries and re-posts the whole lot based on the current document.
This is totally harmless if nothing has changed in the current document, but for checking how allocations are made it has a verbose output explaining each of the overrides and for the odd case where a document date needs to change etc, and we believe this will help you save time. -
Custom fields on generic forms
10 Jan 2011 - Posted by The BlueBox under Development.
We have coded in a "passthru" variable which embeds itself in forms and then passes through in the view/edit/delete links of standard viewlists.
The syntax is as follows:
<a href=/?class=bb_users&method=search_from&global[bb2_passthru][somevar]=someval>Special User Search</a>
You can "pass_thru" single values, arrays and sub-arrays:
&global[bb2_passthru]=someval
&global[bb2_passthru][somevar]=someval
&global[bb2_passthru][somevar][subarrayvar]=someval
This will result in a hidden field being created in the search form/s for each sub-array value.
Finally the value is appended to the "clicks" off the viewlist results. -
Our new feature - Table2XLS and Table2CSV
06 Jan 2011 - Posted by The BlueBox under Development.
Introducing our latest feature.
We have added a new feature in the codebase for BB2 which take a seres of HTML tables and exports them as XLS sheets in a spreadsheet.
The purpose of this function is to allow PHP developers on BB2 to develop table reports which are instantly exportable as XLS documents with no extra coding. This was our web-front-end and the exportable xls version of each report do not require double coding.
This is a very simple example of how it would be used:<?php resp(" ".table2xls_export("exportme")." //this will automatically output an xls icon and all the required javascript to generate the XLS <table id=exportme01 sheetName='Sheet One'> //the id must be the name used above prefixed by 01, 02, 03 up to 99 for the various sheets, the optional sheetName attribute gives the shtee a name <tr> <td cellFormat='bold'>Name</td> //the optional cellFormat attribute applies various pre-defined styles to each cell, see full list below. <td cellFormat='bold'>Email</td> <td cellFormat='bold'>Score</td> </tr> <tr> <td cellFormat='normal'>John</td> <td cellFormat='normal'>john@domain.com</td> <td cellFormat='normal_numeric'>12</td> //use numeric format so that number cells justify right </tr> <tr> <td cellFormat='normal'>Mary</td> <td cellFormat='normal'>mary@domain.com</td> <td cellFormat='normal_numeric'>15</td> </tr> <tr> <td cellFormat='bold' colspan=2>Total</td> <td cellFormat='bold_total'>15</td> //the _total format applies a thin line above and a thick line below the cell </tr> </table> <table id=exportme02 sheetName='Sheet Two'> //and this is how table 2 would be formatted etc <tr> <td cellFormat='bold'>Name</td> <td cellFormat='bold'>Email</td> <td cellFormat='bold'>Score</td> </tr> <tr> <td cellFormat='normal'>John</td> <td cellFormat='normal'>john@domain.com</td> <td cellFormat='normal_numeric'>12</td> </tr> <tr> <td cellFormat='normal'>Mary</td> <td cellFormat='normal'>mary@domain.com</td> <td cellFormat='normal_numeric'>15</td> </tr> <tr> <td cellFormat='bold' colspan=2>Total</td> <td cellFormat='bold_total'>15</td> </tr> </table> "); ?>
Pre-set XLS styles are as follows:
title
title_blue
normal
normal_numeric
normal_italic
normal_green
normal_blue
normal_blue_italic
normal_silver
normal_grey
bold
bold_underline
bold_total
bold_blue
bold_green
bold_silver
We can add more styles as required over time.
A simpler version of the above is table2csv_export("exportme") which does as above but only for one table and without any formatting. -
Editing BlueBox Menus
05 Jan 2011 - Posted by The BlueBox under Development.
So what is the easiest way to add/edit/remove menus for everyone in your system?
Well there are two steps:
Step 1:
In permissions you can deny all users permissions to all classes which end in "_menu" for example "bb_sales_menu". A neat way to do this is to filter by "_menu" in the permission screen. This will effectively strip away all permission access to any top-level menu placeholders. However, this will then result in all the freely accessible publishing menu items that everyone can see flooding the top level menu, where they are normally neatly packed away under the "bb_publishing_menu" placeholder.
Step 2:
To fix this, do not deny the "bb_publishing_menu" class in other words skip this class only, as described in step one, and rather go to "Publishing -> Menu Manager" and ADD an entry whereby the class name is "bb_publishing_menu" and "hide menu item" is set to yes. -
Google Checkout Integration
06 Dec 2010 - Posted by The BlueBox under Development.
We are proud to announce our Google Checkout integration.
The BlueBox Web Store now supports Google Checkout as one of our payment gateways. If you already have a BlueBox Webstore or even if you don't contact us today so that we can set one up for you that integrates with Google Checkout. You can learn more about Google Checkout below.
A short video tour of Google Checkout
-
The BlueBox Aged Debtors Export Facility
02 Dec 2010 - Posted by The BlueBox under Development.
This is done by exporting the Debtors Aged Cache
You should use the table bb_sales_debtors_aged_cache. This is snapshoted each time a debtor transaction is calculated. It is date specific (date being the end of the month that things are happening in).
So, if I add an invoice for debtor A in May 2010, it will instantly add a line for "debtor A" for "31 May 2010" and the current value will be the invoice value. Then if I add a new invoice for same debtor in the same month, it does not add a new line, it adds the value to the previous line.
Now move on a month:
For the same debtor I add a new invoice for June. It adds a new entry with "end of June" as the date, and the current value as the new invoice. It also moves the old value, from may to 30 days, keeping the snapshot relevant.
So you can pull debtor details by choosing the end of month (normally the previous month, as the current month is never totally finished), and selecting all entries for that date. This will bring back a list of all debtors with their 30, 60, 90 etc totals at that date or point in time. -
Beginning of PHP plugins for BB2
22 Nov 2010 - Posted by The BlueBox under Development.
The following has been requested on BlueBox2.0, the ability to "plugin" PHP functionality that will override the existing bbsetting functionality.
The requirement is to have a programmatic function that will "calculate" complex user names based on various criteria, and then display them via the standards based bbsetting_display_name_template common to all BB2.0 classes.
So, here is the syntax for doing that:
Create a file in custom_modules called bb_plugins.php that contains:
class bb_plugins extends baseclass{ function bb_sales_orders_bbsetting_field_display_names(){ global $global; return(array("xtra_field01"=>"open_ordersYN")); } }
The following overrider functions can also be placed which fully replace existing BB2.0 functions, without having to copy the "master files". The example below will ALSO run along with the current file-based bb_sales_orders-add_form method.
class bb_plugins extends baseclass{ function bb_sales_orders_post_add_form($conf){ global $global,$class,$method; resp(" <script> function dosome(){ if(\$('global[fields][delivery_methodISbb_sales_orders_delivery_methodsID]').value=='1'){//dpd \$('global[fields][xtra_field05]').value=1; } if(\$('global[fields][delivery_methodISbb_sales_orders_delivery_methodsID]').value=='2'){//pallet } if(\$('global[fields][delivery_methodISbb_sales_orders_delivery_methodsID]').value=='3'){//post \$('global[fields][xtra_field05]').value=9; } if(\$('global[fields][delivery_methodISbb_sales_orders_delivery_methodsID]').value=='4'){//post neil \$('global[fields][xtra_field05]').value=9; } } \$('global[fields][delivery_methodISbb_sales_orders_delivery_methodsID]').addEventListener('change',dosome,true) </script> "); return($conf); } }
-
7 frequently asked POS questions
25 Oct 2010 - Posted by The BlueBox under Development.
Below we have 7 POS questions that are asked frequently.
1. How customisable is the Point of Sale (POS) screen?- Completely customizable. The POS look and feel is templated to meet your needs.
2. Can a store create a new product or does head office need to complete this task?
- Whichever way you need it done. All users permissions are able to be set according to your needs. i.e. you can set it so that specific store level individuals are able to add/edit/view as much or as little as you need them to. Your key users and management team would all have their own dashboards showing them the core KPI's and functions that they use on an ongoing basis.
3. If a store can create it’s own product, can this data be shared across the other stores?
- Yes, it can be, i.e. they can add it to the item master at group level.
4. The "back office" section is quiet involved and substantial. Can this be simplified for store users?
- Completely! As part of the setup we expect that we would set up role specific dashboards (effectively their landing page). These digital dashboards are stripped to display only the functionality they require. Permissions also take care of a lot of this as they are unable to view the menu items that don't apply to them.
5. Can the system be configured so that each store can only see their own data, whist head office can see everything?
- 100% Correct. Users belong to specific locations and business units. A user can only see as far up the tree as the location and business unit they belong to allows them. Head office users, sitting at the top of the tree can see everything below them (permissions permitting of course).
6. Can customers be issued with barcoded loyalty cards which when swiped during the sale have points accrued to the customer?
- Absolutely! They can either be swiped or scanned. In fact you don't even need cards theoretically, you could use any unique identifier, mobile number, passport number, ID number etc.
7. If I connect a barcode scanner to my PC will it work or does the demo system need further configuration?
- Yes, it will work, as long as the barcode reader i.e. the hardware is set to read the type of barcode you are scanning obviously. Obviously you will need to have added a specific product with that barcode number populated in order for it to find the product. But to answer simply it will work without any further system configuration, a scanner is simply an input device as far as our system is concerned.
-
BlueBox Friendly URLs
21 Oct 2010 - Posted by The BlueBox under Development.
A friendly url can be defined as a web address that is easy for users and search engines to understand and use.
BlueBox Friendly URL's can be turned on by setting bbsetting_use_uid to 1 in the bb_content module. In order to access content items via uid's, the show_category_content method must be used instead of the normal viewlist.
So the following tag
<!--:class:bb_content_categories_link:viewlist|categoryISbb_content_categoriesID=|_id desc:-->
becomes
<!--:class:bb_content_categories_link:show_category_content||_id desc:-->
The above uses the public viewlist template. To call with a custom template, the use_template variable must be set first.
For example:
<!--:set:use_template=bb_content_categories_link-viewlist_event.template:--> <!--:class:bb_content_categories_link:show_category_content|63|_id desc:-->
The show_content method can be used to access a single content item using uid or _id. <!--:class:bb_content:show_content|uid=97-(Development)-BlueBox-Friendly-URLs&_id=97:-->
All of this has been created so that you can have friendly URLs like the one for this blog post:
http://www.blueboxonline.com/?blogs&global[uid]=97-(Development)-BlueBox-Friendly-URLs -
How to set variables before BB2 templates load
19 Oct 2010 - Posted by The BlueBox under Development.
A small but effective feature has just been added to BB2 for template-based solutions:
Up until now you have been able to set variable values for a BB2 templated page as follows:
Either pass the value through the POST or GET methods ie:- /?global[myval]=1 or
- set the value at the top of the page using the set tag <!--:set:myval=1:--> or
- relying on the BB2 engine to have harvested the data from the /?class=some_class&method=view&global[fields][_id]=1 which would then pre-populate all the variable values for the specific dataset which could then be used in the template.
These 3 methods would then make data available throughout the templates on a page, and can be called as wherever needed.
A problem with this was that <!--:set: did not allow for complex setting of multiple variable values, so now, the new <!--:set:class|method:--> tag now allows you to set unlimited global[var_name] variables before a page loads. -
New BB2.0 PHP Function for Auto Table to XLS Generation
14 Oct 2010 - Posted by The BlueBox under Development.
We have written a Javascript function into BB2 which allows a coder to instantly add "export as CSV" functionality to any HTML table in BB2.0.
<?php resp(" This is an example Table: ".table2cvs_export("my_table")." <table id=my_table> <tr> <td>Column A</td> <td>Column B</td> <td>Column C</td> </tr> <tr> <td>100</td> <td>200</td> <td>300</td> </tr> </table> "); ?>
The new code is in red above, and shows how simply the relevant javascript function and PHP helper script can be inserted into any table.
The effect of the above code would be that an XLS icon would appear at the top-right of the table and the data would then be exported as a download when the user clicks on the icon.
Obviously the example above shows a static table, but this would apply equally to a dynamically rendered table in PHP. -
Filtering Permissions Classes
12 Oct 2010 - Posted by The BlueBox under Development.
An optional text filter has been added to the list of permissions classes at http://yourdomain/?class=bb_users_groups_permissions to reduce the length of the list when you are setting permissions in the system. A simple and small but noticeable update.
-
Locking and tracking the history of documents
05 Oct 2010 - Posted by The BlueBox under Development.
Locking Certain Documents for User Access and Tracking Document History.
A solution to the problem of users editing quotes when they are not the "author" of the quote, and secondly, tracking the history of edits to the quote.
Locking the module to author:
We have added a new bbsetting called bbsetting_lock_ownership which stores a string for the field in the module that will hold the user_id to be locked to, so normally you would fill this in with _authorid, and this will mean that only the user with _authorid can edit that file. Alternatively, you may choose to set it to sales_representativeISbb_usersID_IN_Staff which would mean that, no matter who added the file, it will be the sales rep who can edit it. This is an either/or option at the moment, you cannot add two fields. Any user with admin permissions for the module will also be able to edit all documents, irrespective if he/she qualifies for that file or not.
So to lock quotes so that only authors can edit their own quotes: set the bbsetting bbsetting_lock_ownership to _authorid for bb_sales_quotes.
Tracking the history:
We have a module-history module which stores every change to a certain module. It stores the data in its raw format, to switch this on, go to admin->module history and then add the module you want to store a history on. Note: this will bloat a system very quickly so be careful when you do this. I suggest for quotes that you do the Header Module (ie bb_sales_quotes) and not the Items module (ie bb_sales_quotes_modules), as the history table will be smaller that way (but the changes to items/qty/price will not be logged in detail, only the totals changed will be logged and who changed the header file and when they did it). To view the history go to admin->module_history and click on History Log in the top menu. -
Web Based POS Issues
29 Sep 2010 - Posted by The BlueBox under Development.
Network Speed and Broadband Dependence Issues.
This is a common concern when POS is business critical.
Network Issues:
This obviously is the risk for any network dependent system. There are two possible routes forward.- As you can imagine, catering for "offline" stores is actually rather common. Broadband in SA is not so reliable that one can always function without some form of backup plan in this regard. One way this is dealt with is through slave servers sitting at each branch which then sync with the master server periodically. i.e the slave web server operates in a LAN environment for each branch. This obviously introduces an added complication in that one now has to worry about data replication and so, in our mind is not ideal.
- Our preferred approach is one of investing in connectivity redundancy rather than multiple servers. Rather have a backup form of connectivity in each store (3G connection for example) in the event that broadband is compromised for some reason. This will allow you to carry on trade until the situation is rectified.
Speed Issues:
With respect to coping with high demand times, (where the question really comes down to transaction speed), we are not, of course, a high speed retail POS suitable for a super retailer FMCG type environment. Our POS does function well as a moderate sales environment boutique type POS offering, but also manages quite capably in, for example, a fast food environment (such as it does in a few KFC's here in South Africa).
Being web based the limitation is queries being passed at the speed of the internet connection (and the processing speed of the server - which is in your control). Expect queries to take as long as say, a google query. We find that adding items for example, will take from 1 to 3 seconds at busy times. Obviously if you elect to have a slave server at each store this would maximise speeds (as you are running over a LAN), but as mentioned this does introduce the necessity for data replication between slave and master servers. -
Default FCKeditor Tags
27 Sep 2010 - Posted by The BlueBox under Development.
We have removed the defualt FCKeditor Tags.
If you have been ever been irritated by the <p> tags that FCKeditor puts around every entry you place in it, do not fear you can change the config file for FCKeditor.
The old setting:
FCKConfig.EnterMode = 'p' ; // p | div | br
FCKConfig.ShiftEnterMode = 'br' ; // p | div | br
New Setting:
FCKConfig.EnterMode = 'br' ; // p | div | br
FCKConfig.ShiftEnterMode = 'p' ; // p | div | br
So this has been made the new default setting. You can simply update the code or change the fckconfig.js file as above if you would like to change it. -
BlueBox Time Zones
20 Sep 2010 - Posted by The BlueBox under Development.
Time zone fields in BB2.0
There are 2 time zone fields in BB2.0 which set the timezone for that specific installation:
In the config file there is a SYSTEM_DEFAULT_TIMEZONE which is blank by default and therefore leaves the time zone to match the server. It takes an override string from the PHP Time zones list found at www.php.net/manual/en/timezones.php and will then set the system to use that time zone, if set.
Secondly, each user can then have their own time zone, set in their user profile as well. This overrides the system setting. -
BlueBox PDF Configuration
06 Sep 2010 - Posted by The BlueBox under Development.
A primer on configuring your PDF's
To set up the creation of PDF's in BlueBox2.0 you need to configure how the BlueBox2.0 engine connects to itself from itself. This is done via the bb_pdf -> bb_pdf_url setting. For an internally hosted server this is always the internal IP address (15.0.0.105) or host name and not the external one.
Once this is has been set, then you need to specify the full internal path to all images in all templates ie: <img src=http://15.0.0.105/some_image/location.jpg>. So, in short, the PDF engine always connects from the internal server back to itself, and therefore you need to point the PDF engine as well as each image using the LAN address. -
A small change for user permissions
26 Aug 2010 - Posted by The BlueBox under Development.
We have 3 new bb_users sub_modules for permission micro management:
- edit_debtors
- edit_creditors
- edit_staff
Essentially these permissions do what they say: if you do not have admin permission for bb_users and you do not have edit_all_users permission, then you would need one of the three new abilities to edit a user who fell into any of these 3 standard groupings. This is so that a creditors clerk cannot edit customers. This is a small change but we feel it is a helpful addition to your array of available permissions.
Tags: user permissions -
User Deduplication
23 Aug 2010 - Posted by The BlueBox under Development.
We have built some deduplication controls.
They have been built into the user->add function and are basic, but involve things like same first and last names, same company name, same telephone, same cell, same identity number, same code etc. If a duplication is detected, then the system will exit and give the user the option to go back or to force the duplication. -
New and improved permissions tools
18 Aug 2010 - Posted by The BlueBox under Development.
New "view/hide" toggle to make the screen easier to navigate.
If you click on a module name or click on [View] it will ajax-in the relevant methods for granting permissions to. Now you can [Hide] this list and it will still submit them when you push the button at the bottom of the form. Please note: if you choose to [View] the list again before submitting your changes will be lost and you will need to grant/remove perms again for that class.
New "quick links" to apply the basic permissions to a certain class, or across all classes.
This has come about for two reasons. Firstly, we get asked a lot "what methods must I tick to give a user permission to view sales orders" and secondly, it is a headache having to remember to tick very regular and mundane methods like "show" and "enable_menu" and "menu_bar". To solve this I have added 2 levels of javascript quick-links to the permissions dash, which apply [View][Add] [Edit] [Delete] or [Admin] permissions to that class automatically. Please note: you still have to push the button at the bottom of the page, it just auto-selects them for you.
A new pseudo-admin class.
A new class has been added called bb_users_pseudo_admin, if this class is granted with the method "admin" to any user group, then that group automatically get FULL admin rights across the entire system. This is powerful, so beware. but it will stop us handing out "admin" users to customers. So, you can now add a new user group to your systems, called "my pseudo admin group", link key super-users to this group and grant "bb_users_pseudo_admin" > "admin" permission to it, and all those users will be super users.

-
Demo The BlueBox for free
13 Jul 2010 - Posted by The BlueBox under Development.
You can get a full free version to test drive today.
The way you test The BlueBox is up to you, you can either set up a BlueBox2.0 Account, which will creatre a live webservices demo, by filling in a form or you can download BlueBox2.0 for a technical self-installation. All of this can be done on our demo page.
Creating the BlueBox2.0 Account is the easiest way, you will be given a url like demobb2.blueboxtwo.com to log in and test, the name in front of the first . is unique to you, you can make it your own and don't worry everything will be installed for you. On the form you can even tell us what functionality you are interested in so that we can give you specific help and support.
Or if you are technically oriented you can download and install BlueBox2.0 on your own web server. This will require a WAMP / LAMP environment installed. You can download the Quick Setup File, it's small, it will automatically download and install your BlueBox2.0 system. Here is the Quick Installation Guide. Another option is to download the Full Setup File, this is a complete set of all the code which contains encrypted and open source code. Here is the Full Installation Guide.
Now all you need to do is go and try out our system, as I said before this can be done on our demo page. If you need any help along the way feel free to contact us. -
Securing BlueBox forms
07 Jul 2010 - Posted by The BlueBox under Development.
The best way to keep spam out of your inbox is by securing your forms.
The BlueBox uses reCAPTCHA from Google.
We are sure you have all experienced some sort of spam on the internet so we thought we would share how we keep our inbox's clear of it. We have installed CAPTCHA's on all of our forms.
"A CAPTCHA is a program that can tell whether its user is a human or a computer. You've probably seen them — colorful images with distorted text at the bottom of Web registration forms. CAPTCHAs are used by many websites to prevent abuse from "bots," or automated programs usually written to generate spam. No computer program can read distorted text as well as humans can, so bots cannot navigate sites protected by CAPTCHAs."
reCAPTCHA is free, easy to use and very effective. The reCAPTCHA site is a great resource on information on how to keep you site and forms secured. -
Developing on BlueBox
30 Jun 2010 - Posted by The BlueBox under Development.
Are you interested in developing on The BlueBox?
BlueBox2.0 is a brilliant platform for rapid, web-based, business system development. Providing developers with an instant platform for not only customisation of existing modules, it is also a very quick, and simple platform for developing, and deploying new modules.
All modules are developed in open PHP code, on top of well documented, extendible, encrypted PHP classes, so that the experienced PHP programmer will have no trouble adopting BlueBox methodology, developing or modifying existing modules. We encouraged you to join our developer community, and submit your BlueBox2.0 .modules for inclusion in BB2.0 downloads area.
You can download a free copy to develop on here.
You can you browse through our Knowledge-Base here.
And finally you can get support here. -
jsFunction trigger for ajax lookups
18 Jun 2010 - Posted by The BlueBox under Development.
How to extend form elements in BB2.0 forms where you need to trigger a javascript process after an ajax lookup has been selected:
The BB2.0 forms engine will automatically trigger an ajax lookup object when the rowcount in the lookup table is greater than 30 (this is a variable in the conf file and therefore can e changed if you wish).
So, less than 30 items forms a standard select list, where the element is "named" global[fields][bomISbb_manufacturing_bill_of_materialsID], for example.
If there are greater than 30 items in the lookup table, the system reverts to the ajax lookup, and the jsFunction attribute can then be called for any post-click events.
The trick was finding an elegant way to load the correct method, and so this solution was proposed, which can be loaded into the pst_add_form php method:if(document.getElementById('viewer_global[fields][bomISbb_manufacturing_bill_of_materialsID]')){ document.getElementById('viewer_global[fields][bomISbb_manufacturing_bill_of_materialsID]').setAttribute('jsfunction', 'test_js_function()'); }else{ document.getElementById('global[fields][bomISbb_manufacturing_bill_of_materialsID]').onchange=test_js_function; }
-
Deletion of Linked Item Data Tables
08 Jun 2010 - Posted by The BlueBox under Development.
Make sure everything relevant gets deleted with one click.
The following tables are nominated specifically to delete when item_data (ie a product/sku_code item) is deleted:
bb_item_data_costs
bb_item_data_alternatives
bb_item_data_cost_calculation_log
bb_item_data_options
bb_item_data_categories_link
bb_item_data_pos_options
To ensure that this does happen, so that the setting is loaded correctly in your configuration, I would also do the following:- View the item that you are about to delete.
- Then open one of the "category links" (viewed at the bottom half of the item view screen) in a NEW window, this should show the category name and the item name in a small view screen.
- Then delete the item.
- Then refresh the "category link" view screen.
- This should now say "data not found" as it would have also been deleted.
-
The latest BB2 Update module
07 Jun 2010 - Posted by The BlueBox under Development.
The latest update developments.
- Engine is unpacked into a temporary directory first and then moved to the live engine directory to reduce downtime.
- Updates and backups are now stored under portal in "UserFiles\SysDocs\bb_update".
- Only the latest 3 archive files are kept at any point. A garbage collection action is booted every time the update module is run to insure this.
- You can now set the version check url and repository url as a bb setting, allowing for a LAN only environment.
- You can store specific updates directly in the "UserFiles\SysDocs\bb_update\updates" folder, and this will show as an option to restore on the update page. (though, it should be noted that the naming convention must be the same as the other updates. AND it must be a date newer or within the top 3 newest updates in that folder, otherwise the garbage collection action will delete it)
-
Report of all credits
03 Jun 2010 - Posted by The BlueBox under Development.
Our latest report
The Unallocated Credits/Payments Report is accessed via the debtors and creditors dashboards as follows:

and

Currently it lists, grouped by customer/date, the following:- Unallocated Payments
- Unallocated direct credit notes
- Overpaid Invoices (ie unallocated credits)
-
Over Credit Limit Switch
14 May 2010 - Posted by The BlueBox under Development.
BlueBox warns you when customers are over their credit limit.
The system has a default setting to WARN the capturer that an account is over credit limit.
To switch this to HALT the current document, you need to set the following bbsetting to 1
bb_finance::bbsetting_over_credit_stop_sales
You can find that setting under Admin > Module Settings. -
How The BlueBox handles Size, Style and Colour
13 May 2010 - Posted by The BlueBox under Development.
A fairly common, usually POS related query that we get is whether BlueBox from a stock database perspective has some form of size and colour matrix for fashion outlets.
Indeed our system does handle sizes, colours, styles etc. exceptionally well on both the inventory management and POS side. In fact, if you will allow us to boast a little, one of our customers recently told our MD that they have never seen a system that handles this element as effectively as ours does (Test it out yourself to see if we are worthy of the accolade).
At the heart of BlueBox 2.0 is the inventory module, a sophisticated stock management module which compliments and integrates seamlessly with the sales and procurement modules. Items, and the item master are a key element of all three of these modules. 'Item Options' manage the varieties on specific items.
The way this works is through linking of item options to items within the item master. ie.:- One creates an item.
- One creates an item option (assuming there isn't one already) such as size S, M, L.
- One then links the options that apply to that item in the item master.
- A specific price, cost, barcode extension etc. can be set for each item option in relation to that item.
Mass updating of prices on your item master and your item options is easily handled and the system also allows exporting and importing to and from csv to assist you with these sorts of exercises.
Tags: The BlueBox, inventory management -
Sales Orders Upgrade
05 May 2010 - Posted by The BlueBox under Development.
Sales Orders now automatically sweeping up behind themselves.
The Sales Orders module has had a slight upgrade whereby the add-edit object has been programmed to be aware of stock allocations in the case where a line is deleted from a sales order or where a sales order is manually marked as completed or cancelled. In such cases all stock allocated, either to the specific line or to the entire document is automatically released back into stock.
Tags: sales, stock -
New Features Added to Financial Documents Access Controls
28 Apr 2010 - Posted by The BlueBox under Development.
The following changes have been made to the Financial Documents Access Controls:
- The item has moved from the admin menu to the finance menu.
- It is now possible to filter documents requiring authorization by Sales Category or Purchase Category.
- The parent class method has been deprecated, essentially meaning that the system will only be checking the new doc to be added for matching features.
- Banding has been implemented as follows:
- when filtering authorization instructions, the system will group by class_name and then order by a new priority numeric field.
- thereby, for example, one is able to create 3 auth. instructions for bb_sales_orders, namely: priority=1 for so's over $10,000, priority=2 for so's over $5,000 and priority=3 for so's over $1,000.
- each seperate priority/instruction can have either one or two signatory groups specified.
-
Scanning Multiple Serialized Items to a GRN
26 Apr 2010 - Posted by The BlueBox under Development.
Recently completed is a new feature which allows the scanning of multiple serialized items to a GRN receipting list.
It's main purpose is to allow for speedy bulk capture of large quanties of items, as well as the splitting of GRN lines into individual serialized lines.
This is accessed via the purchase order view screen. Next to the older Capture GRN button, you will now see a Scan2GRN button as well.
This new screen basically lists all the items on the purchase order available for receipting, and then takes a scan-and-tab instruction to list multiple lines each with the newly added serial number applicable to it.
Once all items are scanned in quantities can be adjusted per line and then the final process populates the add GRN screen with the new serialized items. This will surely speed up your GRN capturing process. -
Archiving Data in BlueBox
09 Apr 2010 - Posted by The BlueBox under Development.
We have got a requirement for generic archiving for businesses where large table sizes are slowing down system performance. This has been written as a standard tool in the database toolbox.
Go to admin->database and click on 'simple data archive'
This tool allows you to 'dump' rows of data from a live table in the system to an _archive table so as to fee up table space when the system begins to be slowed down in certain areas.
You are able to select:- whether to archive or unarchive the data
- which table to select the data from
- which data to archive/unarchive based on date range, specifically _dateadded, _datemodified or transaction_date
- to run in test_mode which will not add or delete any data, but will simply indicate how many rows would have been affected had the script run in live mode
If a table is selected for archiving the system checks whether the table exists, and if not, it creates a shadow table with an _archive extension (ie bb_users will create a new identical table called bb_users_archive).
Data is then copied into the _archive table and deleted from the live table, preserving _id's.
The opposite is true if an unarchive method is run. -
Forced columns in viewlists
07 Apr 2010 - Posted by The BlueBox under Development.
You now have the ability to select and force which columns display in BlueBox2.0 viewlists.
Select which columns to show in viewlists:
The tradional methods for hiding or showing columns in the system list viewer were done via bbsettings, namely: bbsetting_hide_columns_in_lists=array() and bbsetting_show_columns_in_lists=array(). The drawback of these methods was that one could not determine which columns to display on a need by need basis. A new variable, force_columns, allows you to specify exactly which columns to show in your listings.
It is used as follows:<?php $users=new bb_users(); $users->viewlist(array("force_columns"=>array("name","first_name","last_name"))); ?>
or in the system_list_viewer function as follows:
<?php $users=new bb_users(); $users=$users->getlist(array("where"=>" name like '%smith%' ")); system_list_viewer(array("force_columns"=>array("_id","last_name","email"),"data"=>$users)); ?>
-
Easily find and release stock attached to a Sales Order
30 Mar 2010 - Posted by The BlueBox under Development.
We wanted to add a nice feature which will help neaten the process of moving stock off a sales order that is unwanted. The scenario is that various stock items have been assigned to a sales order through allocations and pick slips. At the end of the project some of the items are seen to be in excess and need to be returned to stock.
So what is the neatest way to handle this?
Essentially one needs to view the stock items so that you can select the various ones you wish to release from the sales order, and primarily one would go to the inventory dash and filter for stock assigned currently to the sales order.
This is a bit tedious, though, and so a quick-link to view all stock assigned to a sales order was created at the bottom of the sales order item analysis block.
By clicking on this link you will instantly be taken to the filtered green lines inventory detail report and will then be able to select and transfer the correct items away from the sales order. -
Credit settings between a quote and invoice
26 Mar 2010 - Posted by The BlueBox under Development.
Do you need control over creating documents for customers who have passed there credit limit?
If a customer is over their credit limit or is set as on-hold then no NEW sales docs can be captured in their name. If an existing sales doc is already captured and then the customer later becomes over limit or on hold, a warning pops up to alert the operator, but currently it does not stop the creation of the document.
A setting bb_finance->bbsetting_over_credit_stop_sales needs to be set to 1 to force these downstream docs from being created if you want the system to force them not to be created. -
How to create a PDF in BlueBox
24 Mar 2010 - Posted by The BlueBox under Development.
There are various methods to create PDF's in BlueBox2.0 using the DOMPdf library:
By passing HTML to it:$pdf=new pdf(); $pdf->create_from_html(array("html"=>"some <b>html</b> here....","file"=>"file_name.pdf"));
or as a tag:
<!--:class:bb_pdf:create_from_html|some <b>html</b> here...:-->
or by passing a URL to it:
<!--:class:bb_pdf:create|url:-->
$pdf=new pdf(); $pdf->create(array("url"=>"http://some_url","file"=>"output_file_name"));
-
Volume and Promotional Pricing
23 Mar 2010 - Posted by The BlueBox under Development.
Our item_data module has been extended with two new modules, for volume_pricing and promotional_pricing.
Volume pricing very simply stipulates alternative price OR discount for a sales volume over a certain quantity, whereas promotional pricing is DATE sensitive, and will apply EITHER a price/dicount OR will add a 'free item' to the items list automatically.

This info then 'pops up' in the sales price field when doing item lookups:

Finally, this data then changes the price/dicount for the specific line you are adding to a sales document, OR, in the case of promotional items, it will automatically add a new line to the sales document with the correct details (fields which have been auto-updated are bordered in red):

-
New User Access Locking for Sales Report
17 Mar 2010 - Posted by The BlueBox under Development.
We have just implemented a user access lock for the Basic Sales Report.
Essentially this means that if a Sales Rep (any one of the three types of sales rep) tries to access the report they will be locked down to only see their data.
How it works is as follows (see screenshot below):- If you access the report with 'admin' permission for the bb_sales module, you will see a 'click here to manage user access' link at the top of the page.
- Here you get to select three user groups (or any one of the three) in which you have your sales reps of that 'type' linked.
- The minute one of these groups is 'selected' then the report will challenge any new user who tries to access it as follows:
- if the rep has bb_sales->admin permission then they will be able to view all reps data
- if they do NOT have the above permission, then the report looks in each of the three specified user groups for their _id
- if their _id IS found in any of the three specified groups, then their _id is locked into the appropriate 'rep field' in the filter
- essentially locking them down to only see sales data which pertains to them

-
Adding show_values to bar graphs in BB2.0
16 Mar 2010 - Posted by The BlueBox under Development.
A quick and easy way to make the information you are sharing easier to interpret.
If you would like to display bar graphs in some of your custom dashboards, and have the need to display the 'bar values' at the top of each bar, there is a simple variable to pass through whether you are using the TAG method or the PHP method.TAG method:
<!--:class:bb_widgets:draw_widget| widget type(bar,line,table,dial etc)~ Widget Title Goes Here~ width~ height~ dial zone values eg 0,33,66,100~ dial zone colors eg green,orange,red~ Yaxis Title~ Xaxis Title~ bar line color eg green~ use trend line? 1 for yes~ use curve line? 1 for yes~ bottom buffer~ side buffer~ sql query eg: select round(sum(grand_totalCUR_BASE),-1) as data, DATE_FORMAT(transaction_date, '%Y-%b') AS labels from bb_sales_orders where transaction_date >= DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 YEAR), '%Y-%m-01') AND transaction_date <= CURDATE() group by DATE_FORMAT(transaction_date, '%Y-%b') order by DATE_FORMAT(transaction_date, '%Y-%b') asc ~ //this extra tilda is required after the sql statement show_values // you would set this to 1 if required :-->
PHP method:
<?php $chart=new bb_charts(); $chart=$chart->draw(array( "type"=>"", //bar,line,dial,pie "width"=>"", "height"=>"", "show_values"=>"", //set this to 1 if required "data"=>"", //also: data1,data2,data3 "labels"=>"", "labels_font_size"=>"", "titles"=>"", "xaxis_title"=>"", "yaxis_title"=>"", "legend"=>"", "bar_line_color"=>"", "trend_line_color"=>"", "curve_line_color"=>"", "zones"=>"", "zone_colors"=>"", "bottom_buffer"=>"", "side_buffer"=>"", )); ?>
-
The getcommalist function in BB2.0
12 Mar 2010 - Posted by The BlueBox under Development.
Short and sweet helpful post for a friday afternoon.
The getcommalist PHP function in BB2.0 is used to build a comma seperated list of a certian field within an array listing.
getcommalist(array("array"=>$rebate_types,"field"=>"_id"))
This will loop through the array $rebate_types and put all the _id values in a comma separated list.
This is useful when doing SQL IN() statements. -
Financial Document Access Controls
11 Mar 2010 - Posted by The BlueBox under Development.
If you're a Financial Director we have something that will make you smile.
We have just upgraded a very attractive feature for our financial controls. It's purpose is to allow the "signing off" of certain document types which meet certain criteria.
This translates to a massive amount of control being allowed in terms of transactional process management. Businesses can now manage approval processes in a systematic way without stepping out of workflow. Think of some of the applications: sales reps restricted from discounting products below say, 10% margin without authorisation from management; buyers limited to buying stock below a, for example $10 000 value unless signed off by the Financial Director, who has insight into the cashflow impact of such a procurement decision; or what about forcing authorisation on creation of sales orders for customers with certain debtors aging statuses? This truly allows businesses to leverage off their system to control segments of their business that put them at risk.
How does it work? In the event that a "trigger" is set off, an alert is emailed to up to two signatory user groups (each group can have unlimited users in it, but a signatory will be required from either one or both groups, depending on how the alert was set up).
The users then go to the "FinDoc Acc.Ctrl" menu (found under admin), and on the dashboard they will see all the alerts that pertain to them: either they have LOGGED the request, or they are in the primary or secondary signatories group.
They can then "preview", "approve" or "reject" requests. On Rejection or Approval, an email is sent to all parties.
Finally, the requesting party can "re-post" their original request, and this time, because it is approved, it will pass through and create the document.
All in all, this is a powerful feature and worth applying in any business where control is paramount. -
The makeclickable function in BB2.0
09 Mar 2010 - Posted by The BlueBox under Development.
A useful PHP function in BB2.0 is the makeclickable function.
It turns a table row into a rollover effect with a clickable destination.
It's syntax is makeclickable('url',[optional:flag to open in a new window])
Here is an example of pulling a data list in BB2.0, with the makeclickable function illustrated:<?php $list=$this->getlist(array("order"=>"name")); if($list){ resp(" <table align=center bgcolor=".COLOR2." cellspacing=1 cellpadding=3> <tr bgcolor=".COLOR1."> <td align=center nowrap>Row</td> <td align=center nowrap>Name</td> <td align=center nowrap>Class</td> <td align=center nowrap>Parent Class</td> <td align=center nowrap>Primary Signatory</td> <td align=center nowrap>Secondary Signatory</td> </tr> "); foreach($list as $item){ $row++; resp(" <tr bgcolor=white ".makeclickable("/?class=bb_findoc_access_controls&method=view&global[fields][_id]=$item[_id]",1)." > <td align=left nowrap>$row</td> <td align=left nowrap>$item[name]</td> <td align=left nowrap>$item[new_doc_system_class_name]</td> <td align=left nowrap>$item[parent_doc_system_class_name]</td> <td align=left nowrap>".item_display_value(array("primary_signatory_in_groupISbb_users_groupsID",$item))."</td> <td align=left nowrap>".item_display_value(array("secondary_signatory_in_groupISbb_users_groupsID",$item))."</td> </tr> "); } resp("</table>"); } else { resp("No controls exist."); } ?>
-
Important FIFO & LIFO config file settings with comments
04 Mar 2010 - Posted by The BlueBox under Development.
Setting the system transaction costing method:
$system_transaction_costing_method="LIFO"; //FIFO, LIFO, AVERAGE or STANDARD //Note on Costing Method: - this gets cost of goods for quote/sales order values and any other cost lookup when there is not actual stock being implied (ie the stock is theoretical) //On GRN: all 4 methods place the actual cost of goods into the inventory value, but STANDARD also places the variance into the StandardCostVariance GL Category //On Despatch: LIFO and FIFO use the literal stock value of goods despatched, while AVERAGE uses the current average cost of the goods and STANDARD uses the current standard cost of goods despatched
Setting the system transaction stock allocation method:
$system_transaction_stock_allocation_method="FIFO"; //FIFO,LIFO //Note on Stock Allocation Method: - this is purely used when the system tries to AUTO allocate stock to sales orders for shipping //If LIFO costing method is used with FIFO allocation menthod, you will see a discrepency in the margins on sales orders vs the final actual margins on despatch/invoice //The same is true for FIFO/LIFO combination. This scenario is most obvious when the goods shipped have a long shelf life or a rapidly changing price
-
Displaying selling price on printed documents even when its zero
03 Mar 2010 - Posted by The BlueBox under Development.
If you would like to ensure that when you print one of the following documents (Sales Orders, Despatch Notes, Invoices, Returns, and Credit Notes) even with a selling price of zero for a line item it will display.
By default this is set not to display and you will notice in the the view mode the item is grey, which is a hint that it will not print.
This is very easily changed by editing the print templates, using database templates, search for the _items table in each specific classes template.
eg: in bb_sales_orders_items-viewlist_print.template
On the first line it says:
<tr bgcolor=<!--:ifnot:priceCUR:{print:#eeeeee class=no_print}:--><!--:if:priceCUR:{print:white}:--> >
If you remove the ifnot and if statements, and change it to 'white' for the bgcolor tag it will print (and display as white) rows with zero selling price.
<tr bgcolor=<!--:ifnot:priceCUR:{print:#eeeeee class=no_print}:--><!--:if:priceCUR:{print:white}:--> >
becomes:
<tr bgcolor=white >
Now when you print documents with Selling price items at zero that will display.
-
Attaching POD's to invoices.
26 Feb 2010 - Posted by The BlueBox under Development.
All the relevant information you need in one place.
An exciting little enhancement has been made to both the debtors and creditors modules. A Proof Of Delivery sub-module has been introduced to allow multiple scanned/pdf POD's to be attached to invoices in each module. This simple addition is in line with our strategy to simplify things for our users and we trust that this ability will help streamline your activities. -
BB2.0 Bug Emailer
25 Feb 2010 - Posted by The BlueBox under Development.
Would you like to know immediately when one of your users is having a permission error on your system? BB2.0 can give you that power to solve those headaches you are having regarding permissions. Our system allows you to receive an email whenever there is a permission error, you just need to enable it.
//debug{ $debug=0; //0=off, 1=on $enable_bug_emailer=0; //0=off, 1=on //enable this to send your system bugs to bb2bugs@bluebox.co.za for quick support $debug_logging=0; //0=off, 1=on $custom_debugger=1; //0=off, 1=on //}
This will email all error messages in the system to the email address for system admin. The area where you edit the 'send to' email address is found in this section of the same file, show below.
//email settings{ $system_email_address="email@domain.com"; //this address receives system generated emails, including the contact form $system_email_name="System Administrator"; //name of the above recipient $system_smtp_server="localhost"; //address of your SMTP server $system_smtp_port=25; $system_smtp_username=""; $system_smtp_password=""; //}
Just another way the BlueBox is making your business better and easier to run with our simple, brilliant and effective solution.
-
How Business Unit and Location allow segregation of business data at General Ledger level
24 Feb 2010 - Posted by The BlueBox under Development.
The use of a Business Unit and Location combination for all financial documents created in BlueBox2.0 is a powerful way of channeling data into the General Ledger at a Business Unit/Branch/Division level.
Business Units are created in the form of a tree, starting at the highest level, namely 'Global', and working into divisions and sub-divisions from there. For example, a holding company called 'ABC Corp' would appear under Global, and then three subdivisions 'Spares Division', 'Servicing Division' and 'New Equipment Division' would appear under that.
Locations work the same way, with the 'Global' location at the top of the tree, and subdivisions working down from there. These can be as detailed as 'country'->'province'->'city'->'warehouse'->'sub-warehouse'->'bin' or as simple as 'branch a' and 'branch b', depending on your requirements. Locations should be left as is for most installations, as the standard locations tree is more than adequate for all business units to use. The system rolls out with a standardised set of locations and sub locations which comply with all the standard requirements. While locations are an important part of the unique pairing (BU/LOC) as described here, they also provide a place for stock to exist within, and this can be described as 'warehouse' or 'bin level' depending on the requirements.
Each user in the BB2.0 system logs into their secure account with a specific Business Unit (BU) and Location (LOC) combination, as defined in their user profile when they were originally created.
All documents in the BB2.0 system are created with a snapshot of the author's BU/LOC combination. So, if a sales rep was created under the BU/LOC of 'Spares Division'/'New York' then their quotes will be created under the same combination. It follows that the flow of documents coming from the original quote will therefore also be stamped with the same combination. So, Quote links to Sales Order, Sales Order links to Despatch Note, Despatch Note links to Debtors Invoice will all be stamped as owned by 'Spares Division'/'New York'.
The General Ledger comprises multiple GL Entries per transaction. GL Entries are automatically created when a document (ie Debtors Invoice) which has a link in the GL Document Map table, is created. The GL Document Map table carries within it a set of instructions for each document that is intended to 'talk to the GL' and these instructions are combinations of DR's and CR's into one of four possible GL Account Categories, namely Assets, Liabilities, Income and Expenses. GL Entries are also stamped with the same BU/LOC as their originating document (Despatch Note, Invoice, Payment etc), which ensures that the GL stores information automatically segregated into the various Business Units and Location combinations.
When a user logs into their secure account, they can only view documents/data which falls in their 'downline' for both the Business Unit and Location Trees. So a user who is set as 'Spares Division'/'New York' will not be able to see quotes which were created in 'Spares Division'/'Washinton', but a user who logs in as 'Spares Division'/'USA' would. This filtering method allows one to view the General Ledger in division slices, so the user who logs into 'Spares Division'/'New York' will only see GL Entries which were created for that division. The group accountant would log into 'Spares Division'/'USA' to see the total GL summary for both divisions.
For more information related to this post please
visit our Documents & tutorials page:- 3.System Administration > Location Management > Locations Manager
- 3.System Administration > Business Units
-
Skimming Cash from a BB2.0 POS
15 Feb 2010 - Posted by The BlueBox under Development.
"Skimming" can be defined as removing excess cash from the till during busy periods.
If you would like to enable Skimming you need to authorize it which is bb_setting bb_sales_point_of_sale::permission_skim_excess_cash this will allow a supervisor to do the skim, you set skim 'on' by setting the skim_level in the till_definition for default_till or a specific till.
There are two skim_levels... the 'warning' level is there to warn the teller that a skim is close at hand. The 'skim level' is the actual point at which a skim is required. If 'force skim' is set to on, then one has to skim to proceed, else it is optional.
All your supervisor needs to do is select the Extra button which is directly below our account and discount buttons and they can find the skim excess cash button on the menu that appears of the left hand side.
With this activated you won't have to worry about having too much cash in your till/s when your shop is at it's busiest, just another reason to have a BlueBox 2.0 powered POS.
-
Our Latest System Updates
04 Feb 2010 - Posted by The BlueBox under Development.
Just a short summary of some of our latest updates regarding the Stocking Location Reference and the Debtors and Creditors Payment Screen.
- Stocking Location Refence: this text field in the item_data table can be used to specify an 'informal bin location' which, if present, shows on pick/pack slips and stocktake sheets.
- The Debtors and Creditors Payment Screen now: has sub-totals for the amount allocated and the amount unallocated between the 'paid' column and the 'discounted' column.
- The Debtors and Creditors Payment Screen now: has a 'dynamic balance owing' for invoices. As you type into the amount paid field or the discount field it auto calculates the balance remaining.
- The Debtors and Creditors Payment Screen now: shows the name of the company being paid on the 'results page', so that when processing lots of payments you do not forget which was the last entity paid.
Would you like to hear more of our latest updates and product enhancements? Then you need to be at our first conference of the year, you can find out more details on our events page.
-
BB2.0 Graph Tag
02 Feb 2010 - Posted by The BlueBox under Development.
Need to draw a graph in BB2.0, here is a tag that will allow you to do so. It is completely customizable so you can make it look exactly how you would like it.
<!--:class:bb_widgets:draw_widget| widget type(bar,line,table,dial etc)~ Widget Title Goes Here~ width ie 600~ height ie 300~ dial zone values eg 0,33,66,100~ dial zone colors eg green,orange,red~ Yaxis Title~ Xaxis Title~ bar line color eg green~ use trend line? 1 for yes~ use curve line? 1 for yes~ bottom buffer ie 20~ side buffer ie 20~ sql query eg: select round(sum(grand_totalCUR_BASE),-1) as data, DATE_FORMAT(transaction_date, '%Y-%b') AS labels from bb_sales_orders where transaction_date >= DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 YEAR), '%Y-%m-01') AND transaction_date <= CURDATE() group by DATE_FORMAT(transaction_date, '%Y-%b') order by DATE_FORMAT(transaction_date, '%Y-%b') asc :-->
-
New Feature To Sort Financial Doc Items by SKU CODE
19 Jan 2010 - Posted by The BlueBox under Development.
This new feature sorts items by SKU_CODE in financial documents.
It will be available on the latest code from tonight, initially only on the Quote Template, but it is generically invocable using the following syntax:<!--:class:bb_sales_quotes_items:viewlist_print|sales_quoteIS bb_sales_quotesID=15 and bb_sales_quotes_items._id>= and bb_sales_quotes_items._id<=|bb_item_data.sku_code asc:-->
For any viewlist tag, when the second | (pipe) is called it allows you to specify the 'ordering' of the list. Up until now it was not possible to order by extended data from the item table. The new code automatically loads the item data as part of the record set and therefore you can sort by bb_item_data.any_field... the trigger being bb_item_data. in the string.
-
How to create quick BB2.0 tabular reports in PHP
15 Jan 2010 - Posted by The BlueBox under Development.
A quick primer on tabular reports in BB2 written in PHP:
Using a combination of the $global[database]->sqlQuery("") and system_list_viewer you can quickly produce a BB2 tabular report.
Sample code:<?php $data=$global[database]->sqlQuery(" select last_name, first_name from bb_users where last_name>" and first_name>" order by last_name asc ; "); system_list_viewer(array("show_all_columns"=>"1","data"=>$data)); ?>
-
Auto-Running Alerts and Functions in BB2.0
03 Dec 2009 - Posted by The BlueBox under Development.
Just a quick primier on the Communication->Alerts class.
This class has the ability to run a sql query, and then email or sms the results to specified recipients on an automated basis.
The class is invoked by adding the following tag to a 'frequently requestd page' in your system (probably page.template). (Note that the person requesting this page (ie a staffmember) will need permissions to run this class/method.)<!--:class:bb_alerts:check_alerts-->This then triggers a loop-through of all the registered alerts you have set up.
Each alert is checked for the following:- has it's optional interval in hours passed since the last time it ran
- is the current time between the span_from and the span_to for this alert
- lastly, does the sql query yield any results
If these three conditions are met, then it processes the alert:
- it will send an email with subject and body containing possible bb2 tags which extract results from the data
- it can optionally send a formatted CSV file with the data results in csv format as an attachement
- it can also send an sms whereby the contents can contain results from the sql query as bb2 tags
- finally it logs that the alert was sent, so that it does not re-send until applicable again
Here are the fields and descriptions for the bb_alerts class:
<?php var $name; The name of the alert var $name; The name of the alert var $alert_interval_hoursNUM; Optional hour-span between re-sending this alert var $alert_hour_span_fromNUM; Optional from_hour when this alert may send communications var $alert_hour_span_toNUM; Optional to_hour when this alert may send communications var $alert_sql_queryISplaintextbox; Required: the sql query which will populate the email/sms (for alerts which do not require a query - ie alerts which run system functions - use 'select 1;' var $from_email_detailsISsmallplaintextbox; The from email address var $to_email_detailsISsmallplaintextbox; The to email address var $cc_email_detailsISsmallplaintextbox; Self explanatory var $bcc_email_detailsISsmallplaintextbox; Self explanatory var $to_cellphone_detailsISsmallplaintextbox; The to cell number var $alert_email_subjectISsmallplaintextbox; The subject of the email var $alert_messageISplaintextbox; The email or sms message var $alert_csv_docnameISsmallplaintextbox; The attached csv file doc name var $alert_csv_layoutISplaintextbox; The layout of the attached csv file var $alert_run_class; Aclass to run when this alert is run var $alert_run_method; The method to run for the above class var $alert_run_variablesISsmallplaintextbox; Optional variables for the class/method running above var $run_silentlyYN; No output will show if this is set var $archiveYN; The alert will not run if this is set ?>
-
Livedata function update
03 Dec 2009 - Posted by The BlueBox under Development.
What happens when we run the livedata function?
The /?livedata function has recently been enhanced (latest code 1 Dec) to include a flush mechanism for the 2 system cache's which speed up system response times.
The two cache's are:- The Menu Cache (also manually flushable via the Publishing->Menu Manager)
- The Tree Cache (which auto flushes each time a node is added to a particular tree-set ie: business units or locations)
So now, /?livedata runs through all bb2 classes, confirming that the data structure matches the codebase, and it also flushes both these cache sets.
Why would I need to run the livedata function?
The function self-heals database changes that have been introduced by any new code placed into "engine" or the "custom_modules" folders.
How do I run the livedata function?
Surf to the following url of your site - http://www.yoursite.com/?livedata - after the database has been updated you will be redirected back to your previous page. -
How to draw a chart within PHP in BB2.0
13 Nov 2009 - Posted by The BlueBox under Development.
Here is a barchart example:
<?php $chart=new bb_charts(); $chart=$chart->get(array( "type"=>"bar", ⁄⁄or 'line' "data"=>"10,20,30,40,50", ⁄⁄data is provided in comma seperated format "data1"=>"5,10,15,20,25", ⁄⁄data1 and data2 are OPTIONAL extra comma seperated lists for line sets 2 & 3 "labels"=>"Mon,Tue,Wed,Thur,Fri", ⁄⁄labels are provided in comma seperated format "legend"=>"", ⁄⁄optional "titles"=>"Sales : ".date("d M",strtotime($week_start))." - ".date ("d M",strtotime($week_end)), ⁄⁄the title of the chart "xaxis_title"=>"Day", "yaxis_title"=>"R's", "width"=>192, "height"=>180, "bottom_buffer"=>15, ⁄⁄optional "side_buffer"=>0, ⁄⁄optional )); ?>
Here is a 'dial example':
<?php $chart=new bb_charts(); $chart=$chart->get(array( "type"=>"dial", "data"=>round(($tot_sales_figure_for_the_week/($last_year_week_figures ["total_sales_exvatNUM"]?$last_year_week_figures ["total_sales_exvatNUM"]:1))*100), "labels"=>"labels", "legend"=>"", "titles"=>"Sales vs Budget : ".date("d M",strtotime($week_start))." - ". date("d M",strtotime($week_end)), "xaxis_title"=>"Day", "yaxis_title"=>"R's", "width"=>192, "height"=>180, "bottom_buffer"=>15, "side_buffer"=>0, "zones"=>"0,80,100,113,200", "zone_colors"=>"red,orange,yellow,green", )); resp($chart); ?>
Here is a piechart example:
<?php $chart=new bb_charts(); $chart=$chart->get(array( "type"=>"pie", "data"=>"10,20,30,40,50,60,70", "labels"=>"Jan,Feb,Mar,Apr,May,Jun,Jul", "legend"=>"", "titles"=>"Product Mix : ".date("d M",strtotime($week_start))." - ".date("d M",strtotime($week_end)), "xaxis_title"=>"Month", "yaxis_title"=>"R's", "width"=>192, "height"=>180, "bottom_buffer"=>15, "side_buffer"=>0, )); resp($chart); ?>
-
How to use progress buffering in BB2.0
13 Nov 2009 - Posted by The BlueBox under Development.
The 'progress bar' is best run in a pop-up window, so what I often do is launch it from a form:
<form enctype='multipart/form-data' action=/?xyz&global[noincludes]=rawtext method=post target=_blank>
Then in the xyz method: run this at the start:
<?php progress_bar_start("Processing ".count($array)." entries.."); ?>
then do your loop, for a POSITIVE event in the loop, use:
<?php progress_bar_middle("Successfully added entry $count...","green",1); ?>
<- this method will create coloured o's on the buffer screen with rollover messages. For the thinner grey bars use:
<?php progress_bar_middle("Successfully added entry $count..."); ?>
for a negative event use:
<?php progress_bar_middle("Failed to add entry $count...","red",1); ?>
at the end of the process use something like:
<?php resp("Import finished."); exit; ?>
-
Inventory Snapshots in BB2.0
11 Nov 2009 - Posted by The BlueBox under Development.
We now have a 'snapshot' module in the inventory suite which allows for daily snapshots (or occasional snapshots) of the inventory table.
This is a summary snapshot, recording:- location
- item/code/options
- qty on hand
- total value
It is not storing extra details(ie serial_numbers etc) (in order to keep snapshots to as small a size as possible).
To get to the snapshot module, go to Inventory->Inventory Snapshot (remember to log in freshly to get a refreshed menu).
To capture a manual snapshot simply push the 'Take a new snapshot for today' button on the snapshots dashboard.
If a second/third snapshot for any day is requested, the system flushes the old data and creates a new snapshot.
It is possible to 'autorun' snapshots after each stock take sheet is processed (but this will slow down the completion of any stocktake sheet considerably, so needs to be done with caution).
(To do this set the bbsetting_autorun_snapshots=1 for bb_inventory_stock_take)
Another 'auto' option is to run the following php script via linux system cron-job on the last day of each month:
php.exe index.php?class=bb_inventory_snapshot&method=snap&global[silent]=1&global[user_apikey]=(insert valid apikey here)for the coders, a snapshot can be invoked silently as follows:
<?php $snap=new bb_inventory_snapshot(); $snap->snap(array("silent"=>1)); ?>
-
Easily embed images in emails
11 Nov 2009 - Posted by The BlueBox under Development.
A little improvement to the BB2 mailer:
The ability to embed images in an email, and then refer to them by their CID within the body of the mail is now available within the BlueBox.
<?php $mail[embedded_images][0]["filename"]=$_SERVER['DOCUMENT_ROOT']. "/portal/pertec/custom_modules/images/rhsalogoandtext.jpg"; $mail[embedded_images][0]["cid"]="rhsalogoandtext.jpg"; $mail[embedded_images][1]["filename"]=$_SERVER['DOCUMENT_ROOT']. "/portal/pertec/custom_modules/images/imtechlogo.jpg"; $mail[embedded_images][1]["cid"]="imtechlogo.jpg"; $mail[embedded_images][2]["filename"]=$_SERVER['DOCUMENT_ROOT']. "/portal/pertec/custom_modules/images/lloyds.jpg"; $mail[embedded_images][2]["cid"]="lloyds.jpg"; ?>
So in the body of your email the img tag would look like:
<img src="cid:rhsalogoandtext.jpg">
-
BlueBox Rolls Out Satellite / Mobile Billing System
28 Aug 2009 - Posted by The BlueBox under Development.
Working in conjunction with one of our longstanding international communications clients, we have developed an integrated aggregation billing solution for them, resulting in a dedicated portal solution suitable for the aggregated billing of either cellular or satellite customers. BlueBox Worldwide's Managing Director, Paul de Villiers, who personally project managed this solution to conclusion, views this project as further evidence of BlueBox 2.0.'s ability to provide a solid transactional foundation for vertical solutions.
What the system does:
The principal reason behind the development of the solution was to provide a means for our client, who provides a premium time billed sattelite communications network service to their customers which is capable of monitoring and verifying resource usage by terminals in the network, to import and consolidate the time usage of their various customers, by terminal, simcard and by account, and then, using that aggregated data, generate and deliver consolidated invoices for them. The BlueBox interface enables the customer to integrate with their own applications, and, using the integration tools provided audit the success, accuracy and summary data on the import before producing the consolidated invoices and thereafter send the invoices directly off the system.
The web based system features all one would expect from a comprehensive billing system with General Ledger backing and sophisticated financial reports, including of course, the usual accounts receivable functionality such as:
> Creation of Invoices
> Issuing Credit Notes
> Capturing Payments
> View Age-Analysis
> View Account Transaction Details
> Pull Statements for view/print/email
> Print Bulk Invoices
The real-world application of this solution can, of course be extended to use in any similar business or indeed any business needing to track and consolidate unit based data for billing purposes. BlueBox has a proud history of providing integrated solutions to a variety of businesses ranging from banks through to best brand manufacturers.
The Mobile Billing System provides more solid evidence that the BlueBox 2.0 platform scales nicely into providing solutions for verticals.
-
Why You Should Implement A Loyalty Kiosk
09 Nov 2009 - Posted by The BlueBox under Development.
BlueBox Worldwide's Managing Director, Paul de Villiers, will be exhibiting at London's "In Store Show" at the London Olympia from the 30th June to the 1st July, in participation with our newest UK VAR Partners, Corporate Rewards. BlueBox's Customer Loyalty solution will be on display and the team will be available for questions and discussion. In light of that we thought we would share Corporate Reward's answers to some of the questions about Customer Loyalty.
What Is A Loyalty Store Kiosk?
"A Loyalty Store Kiosk is a stand-alone internet based ‘Touch Screen’ branded unit , which can be placed in any retail environment with the aim to attract customers in-store to take advantage of offers and discounts.
Users simply have to pre-register their details, in-store, to become a loyalty club member. They will then receive a loyalty card which they ‘swipe’ at the kiosk to access the offers that are relevant to them.
The platform uses a points based system that allows customers to earn points for answering a call to action, spending in-store or online. They are then able to print coupons / vouchers at the kiosk that can be redeemed at the checkout via simply scanning the printed barcode.
On returning to the store, customers simply login to their personal loyalty account by swiping their loyalty card at the kiosk. Each time they login they can also earn points which encourages customers to frequently revisit a store. The amount of times a user can login in a 24hr period can be limited.
Each kiosk is free standing, can be branded, and is independent of in-store POS systems, no integration is required. The kiosk simply requires an internet connection by ether cable.
Why Should I Implement A Loyalty Kiosk Into My Stores?
In this ever increasing competitive marketplace customers are constantly bombarded with fragmented and irrelevant offers and too many mixed or unclear marketing messages. Time is a precious commodity and is a key factor in the purchasing decision process for consumers. Consumers want to make purchases quickly and efficiently based on informed decisions. For high value purchases consumers often go to great lengths to choose the right product for them, however for everyday low value purchases research shows that over 70% of purchasing decisions are made in-store. This is where a Loyalty Kiosk gives you the competitive advantage, over in-store TV, POS advertising, posters, flyers, signage and rafts of paper money off coupons.
By going directly to and interacting with a Loyalty Kiosk shoppers can immediately see what current offers are available to them. These offers can be tailored to individuals preferences through pre-survey, spend patterns and demographic data. Saving time and increasing per basket spend.
The kiosk does not necessarily replace traditional marketing it merely acts to enhance, streamline and simplify the offering, making the marketing more pertinent to the consumer and increasing higher return on marketing investment.
-
Time Keeper Module
04 May 2009 - Posted by The BlueBox under Development.
The latest module addition to BlueBox2.0 stable is the 'TimeKeeper Module' which can be found under "Tasks" section of the BlueBox System.
The main aim of this neat little module is to provide a useful visual 'report' on the live progress of each productive staff member who is responsible for producing 'billable hours' in an organization, allowing both staff members and their managers to track daily progress of billable, costed or productive time against daily targets over a monthly time period.
In essence this module allows for the capture of 'time stubs' against sales orders and eventually works orders which are, in turn calculated and summed up against the staff member's billable time target. As seen in the screenshot above "time stubs" can quickly be added by the staffmember who assigns the work done to the applicable Sales Order, along with the Date and the appropriate number of hours. The small plus link allows the capture of any additional notes.The manager view displays all their own staff on one dashboard and shows billable time versus the allocated target.
Any organisation needing to track the productivity of staff whose time is costed or billed for would be well advised to consider using this module to manage that time.
-
Mobile ERP Tools
16 Apr 2009 - Posted by The BlueBox under Development.
Hi All,
For a while I have wanted to introduce a standards-based 'thin' mobile module for BB2.0, and this last week had an opportunity to sink my teeth into this.
Essentially what the new bb_mobile module introduces is a simple method for developing mobile phone browser compatible 'screens' on top of the wealth of BB2.0 data.
See attached demo screenshots for your info.
As a kick-off module within this sub-set, I have developed a simple Sales Survey tool, which works like this:- Setting Up the Backoffice Functions:
- To Set up the Mobile Sales Surveys module, surf to Communication->Mobile Tools->Mobile Sales Surveys
- From here you will be asked to link your salesforce with an itinerary of customers for them each to cycle through
- You will also be able to define questions for them to answer after each sales call
- Using the Phone Browser:
- All mobile screens/modules will be found by surfing your phone to http://www.yourdomain/?mobile
- From there you will be challenged to enter a password, which is used for user lookup
- Once authenticated, you can then select the module you wish to use (in this case there is only one -> Surveys)
- Within the surveys module, the rep can then select the customer they have just visited (which comes from their pre-defined itinerary) and enter sundry info in a 'Notes' box about the visit.
- By 'logging their visit' the system then looks to see if any Survey Questions require answering. If so, these are listed and textboxes provided for each answer.
- Finally the rep can cycle back to the main page where they can start the process again for their next customer, or edit their answers from the past visit.
This module will no doubt go through the usual learning-curve of changes, and I welcome any feedback.
It is my intention to quite quickly (based on demand) expand the set of mobile sub-modules to include a powerful suite of out-of-the-box value-adds for BB2, like:- summary sales reporting
- summary debtors reporting
- summary cashflow reporting
- stock item lookup and price verification
- stock allocation
- Setting Up the Backoffice Functions:


UK - 0774 3703 574
SA - 087 8088006/7
