What is an ERP?

I was recently asked by a software developer What is an ERP? At its heart, an ERP (Enterprise Resource Planning) software application or system deals with four basic components of a company’s operation, and the inter-relationships between them. Different terms may be used where you are, but the concepts will be the same.

  1. Items. You create an Item in the ERP to identify a physical things or service that you buy or sell, or a child or sub-assembly of an item. An item can also be virtual, such as hours of labor.
  2. Stock. Stock is the quantity on hand of an item available to be “used” (consumed or sold). Stock may be considered “inventory” for financial reporting, but not necessarily. Stock may be grouped into a “lot”. If some items, for example, were made from the same jug of epoxy resin, and you wanted to associate the resin batch number with the items made from the resin). The smallest lot size is one, at which point the lot identifier is effectively a unique serial number. Stock can be increased by creating a Goods Receipt (GR) Note, and decreased through a sales order or a manufacturing order. 
  3. Orders. Orders create demand in the system and indicate work needing to be performed. Common types of orders are  sales orders, purchase orders, and work orders. A sales order creates demand to ship something and a purchase order creates demand to receive something. A work order creates demand for some “output” item, created from a defined set of “input” items. For example, a work order to create one wagon from 20 wheels, 2 axle, one handle and a steel pan (or 10 wagons from 40 wheels, 20 axles…).
  4. Invoices. Invoices record financial obligations between you and your customer. A customer invoice is created to indicate payment is due you from a customer, and a vendor invoice is created when a vendor sends you notice to pay for something. Bank payments or receipts are recorded to satisfy invoices.

An ERP also includes workflows, such as approving purchase orders before they can be issued, only allowing a purchase order to be printed once to limit accidental double orders, and requiring an approved purchase order exist and is matched to both a GR Note (indicating receipt of the goods) and a Vendor Invoice (indicating request for payment from the vendor), before payment can be issued. An ERP also controls who can perform a specific action and,for example, require that a different person receive the goods than the person who ordered the goods, to reduce the potential for accidental or intentional miss-use.

The User Experience (UX) and Graphical User Interface (GUI) of an ERP is also significant, and determines how effectively users will interact with it. Any significant gaps between the ERP’s screens and reports, and the culture and practices of the company implementing the ERP, will typically require modifying either the ERP, or the company’s practices, for a successful implementation.

You may find my tutorials on using webERP useful to see an ERP in operation. webERP is an open-source web-based ERP system that emphases a simplified design architecture and coding style to aid development and customization by non-developers (such as accountants), and for effective use over low-bandwidth internet connections.

Install SuiteCRM on FreeBSD

SuiteCRM is a Customer Relationship Management (CRM) web application, used by a company to store and organize information relating to customers and potential customers in a shared trusted environment. A CRM application may be stand-alone, or may integrate with other enterprise applications, such as an Enterprise Resource Planning (ERP) system (CRM may also be a module within an ERP system).

SuiteCRM was created by forking Sugar CE v6.5. The company SugarCRM provided several editions of Sugar CRM,  including the open-source Sugar CE and several proprietary-licensed commercial editions. When SugarCRM announced in 2013 that new features would no longer be included in Sugar CE, SalesAgility, a UK-based CRM consultancy with expertise developing client solutions using Sugar CE, created SuiteCRM based on the Sugar CE v6.5 codebase. The first release of SuiteCRM was v7.0 in October 2013, and since then SuiteCRM has become an award winning world leading CRM application.

Setup

I will be installing SuiteCRM v7.7.9 on FreeBSD 10.3-RELEASE, using Apache 2.4 and MariaDb 10.0.

  • Download a SuiteCRM zip distribution archive and extract to /usr/local/www/suitecrm-7.7.9
  • Change owner of the SuiteCRM directory tree to www:www
  • Create a soft link from /usr/local/www/suitecrm to /usr/local/www/suitecrm-7.7.9
  • Configure Apache virtual host suitecrm.dalescott.net
  • Create “suitecrm” database and database user with full permissions to the database.
  • Run installer (http://suitecrm.dalescott.net).

The first thing the installer does is to confirm your acceptance of the AGPL license used by SuiteCRM.

The installer then presents an overview of your system configuration, and identifies any issues preventing installation. In my case, I’m good to proceed.

Next, enter your database credentials and other configuration data.

  • Select install demo data.
  • Enter admin user password and email.
  • Accept default visible modules.
  • Enter SMTP server credentials required for SuiteCRM to send email.

The installer will setup the database and then let you login as the admin user.

The last setup item is to create a cron task used by SuiteCRM to run periodic internal tasks.

TODO show cron job

Login

Login using the admin user and password. After authentication the SuiteCRM dashboard will be displayed.

Install X2CRM on FreeBSD

X2CRM (also known as X2Engine) is a Customer Relationship Management (CRM) web application, used by a company to store and organize information relating to customers and potential customers in a shared trusted environment. A CRM application may be stand-alone, or may integrate with other enterprise applications, such as an Enterprise Resource Planning (ERP) system (CRM may also be a module within an ERP system).

I became aware of X2CRM after discovering erpBooks “Online Inventory Management” , reportedly forked from webERP and including CRM functionality based on X2Engine (aka X2CRM).

X2CRM was founded by John Roberts, who had previously co-founded SugarCRM. His goal was to develop a superior user interface using a new data model, and to use current web technologies, compared to the first generation of open-source web CRMs. Coincidently, X2CRM was developed using the PHP Yii OO RAD framework, which I had used for my Maestro project.

X2CRM also affirmed John’s faith in an open-source development and business model. X2Engine initially used a “Freemium” business model to support itself, and provided commercial Professional and Platinum versions. However, in April 2016, X2Engine announced it had achieved revenue self-sufficiency as a company, and it was now appropriate to release all premium features of the Platinum version as open-source in the then upcoming v6.0 release (fyi, I will be installing v6.5.2).

Setup

I will be installing X2CRM on FreeBSD 10.3-RELEASE, using Apache 2.4 and MariaDb 10.0.

  • Download a X2CRM zip distribution archive and extract to e.g. /usr/local/www/x2crm-6.5.2.
  • Create a soft link from /usr/local/www/crm to /usr/local/www/x2crm-6.5.2
  • Configure Apache virtual host crm.dalescott.net (the server directory root will be /usr/local/www/crm/x2engine)
  • Run installer (http://crm.dalescott.net/x2engine)

  • Set owner of X2CRM directory tree to www:www
  • Install package pecl-ssh2
  • Install package php56-filter
  • Set session.save_path in /usr/local/etc/php.ini to /tmp
  • Add path to mysql executables to the path used by the Apache daemon.
  • # mkdir -p /usr/local/etc/apache24/envvars.d/
    # echo 'export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:' > /usr/local/etc/apache24/envvars.d/path.env
    # chmod 755 /usr/local/etc/apache24/envvars.d/path.env
    # service apache24 restart
  • Run installer again. Hurray! Requirements met! 

  • Create “x2engine” database and database user with full permissions to the database. Use these credentials in the install screen.
  • Check “Create sample data”.
  • Enter admin user password and email.
  • Accept default visible modules.
  • Create cron task. I selected “Create a cron task for X2CRM”, after which I was given the opportunity to select when to run the task, or simply hourly. I selected hourly, which resulted in creating a crontab file for user www (/var/cron/tabs/www). 
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/usr/local/www/x2crm-6.5.2/x2engine/.crontab.tmp installed on Sun Mar 26 20:44:57 2017)
# (Cron version -- $FreeBSD: releng/10.3/usr.sbin/cron/crontab/crontab.c 293132 2016-01-04 03:20:41Z pfg $)

#<X2CRM>
@hourly curl http://crm.dalescott.net/index.php/api/x2cron &>/dev/null #@X2CRM@default#@X2CRM@Run delayed or recurring tasks within X2CRM
#</X2CRM>
  • Install!

Login

Login using the admin user and password. I have already logged in as admin and created a new user for myself.

Once authenticated, the X2CRM dashboard is presented. There’s a lot of information, and the bottom of the dashboard is the message feed.

Manufacturing using webERP

This post is #4 in a series on using webERP. Search for “webERP” to find other posts in the series and please visit the demo on dalescott.net.

Features of using webERP for manufacturing include:

  • Efficiency. Items, Vendors, Work Orders, etc. are managed within one controlled system. Fix a problem once and it’s fixed everywhere.
  • Visibility. A visible, trusted, change management process and a chain of truth.
  • Scalable. Readily scales with users, items, vendors and orders, and adapts as your processes change over time.

In this tutorial, I will explore using webERP for manufacturing using the Swift Construction Company’s development of the Aircraft Wireless as an example.

Goals

The goal of this exercise will be to:

  • Manufacture a sub-assembly with auto-issued child (input) items.

Manufacturing Cycle

The general manufacturing cycle in webERP is:

  • Enter a Work Order to manufacture an item according to its bill of materials (BOM).
  • Receive the finished manufactured items (the output from the work order) into stock. Input items listed on the bill of materials to auto-issue input items will be transacted to the work order at this time.
  • Issue any additional input items used in in the manufacturing process to the work order).
  • Close the work order.

I will be manufacturing quantity 10 of item 20000001-00, a custom electrical coil. The assembly tree is shown below. I covered how to configure an item as Manufactured, and how to create a BOM, in the Product Lifecycle Management using webERP tutorial.

20000001-00,"IND,830UH,AIRCRAFT WIRELESS"
|-- 90000001-00,"WIRE,MAGNET,38AWG,POLY"
|-- 90000002-00,"MAG,FERRITE ROD,1/4IN X 4IN,MATL=61"
\-- 90000003-00,"TAPE,ELECTRICAL,3/4"",BLUE,VINYL"

The manual process that will be followed is:

  • Manufacturing scheduler creates work order and assigns to assembly technician.
  • Assembly technician prints work order and kits required input materials from stock room. The technician initials each input item quantity as removed from stock.
  • Technician completes finished coils.
  • Technician initials work order as complete and returns to scheduler.
  • Scheduler receives the output items into the work order, which also causes the input items to be transferred from stock.
  • Scheduler closes work order.

TODO add swim-lane diagram(s).

TODO describe the accompanying parallel paperwork process.

Setup

If you have been following my previous tutorials,  there should be no further setup required. However, if not, it may be helpful tog review building a BOM in Product Lifecycle Management using webERP, and purchasing items in Purchasing Using webERP.

Create Work Order

A work order essentially converts the list of raw material required to manufacture an item (the Bill of Materials, or BOM) into one or more outputs. The work order can be printed and used to kit the necessary raw materials, and also used as a traveller for the Work in Process (WIP).

  • Create a new work order.
  • Enter optional Reference and Remark. TODO explain why
  • Search & select output item 20000001-00. Update.
  • Enter Qty 10 and comment for output 20000001-00. Update.

The work order can be printed and signed as record of kitting, and also as a record of additional input items to enter before closing the work order. A printed copy of the work order often travels with the WIP as identification (e.g. a traveler for a tote of material). Labels can also be printed for later attaching to the manufactured items. 

Main > Manufacturing > Transactions > Work Order Entry

If you search for work orders you will see that the new work work is in the system.

The  work order status shows demand for the raw materials needed to manufacture the inductor, which indicates they have not been issued.

You will also see that there is qty 10 of 20000001-00 on order from its item screen.

Receive Output Goods

When the output items have been manufactured they are received against the work order. For simplicity I will assume the manufacturing process was flawless, with no waste and all the manufactured items meet spec (see the manufacturing and test procedure filed in the Knowledge Base).  

Items listed on the BOM as auto-issue will issue to the work order at this time.

Process Manufactured Items Received

Close Work Order

Close the work order after all raw material has been issued to the work order and all manufactured items have been received against the work order. Review the work order costing,

Main > Manufacturing > Transactions > Select a Work Order > Select > Costing

and close the work order.

Summary

This completes the overview of manufacturing using webERP.