Creating A Business Application In Data Grid
Any idea how hard and risky it can be to make an Open-Source project? Well, even we don’t expect most of the viewers to know, cause otherwise there would be no point of us.
This article is to share how Symfony2 framework has easily been our best decision to work on OroCRM. It has a user friendly interface, along with data grids, filters, grouping and sorting of data, entity manipulations through workflows. If you haven’t used it yet, get ready to change your working process.
And believe me, developing custom business applications has never been this easy. We are going to tell you how to develop a business application using ORO platform built using the Symfony2 framework.
But before that, you should probably find out a bit about Oro itself. Here is a small introduction to ORO platform and it’s Symfony2 framework.
ORO Platform
ORO Platform is an open-source Business Application Platform. It offers the developers the exact business application they have been looking for by combining the tools they need. Built in PHP5 and Symphony2 Framework, ORO is flexible and makes applications customizable.
Where To Use ORO Platform?
Both sales and marketing tools are built in Oro. Any of the following kind of applications and softwares are built using ORO Platform:
- Intranet applications
- Ticketing system
- Call-Center Management
- Order Management
Installation
Platform is a package that requires an application to run it. A platform-application is an example of such application which simplifies initial project setup and configuration. Please follow the installation instructions here.
Data Grid
A data grid is an architecture or set of services that gives individuals or groups of users the power to access, modify and transfer huge amounts of data for purposes of research. Micro Finance India(MFI), is a business tool for of developed using ORO platform.
How To Create A Datagrid In Resources
Check out the simple steps of creating data grid in the database. This can be done by following the pseudo code below.
Create datagrid.yml in Resources->config->datagrid.yml
datagrid: webmuch-memberdetail-grid: source: type: orm query: select: - g.id - g.name as MembersName - l.loanStatus as LoanStatus - m.contactNo as ContactNo - mg.groupName as GroupName from: - { table: GroupBundle:MemberDetails, alias: g } join: left: - { join: g.loan, alias: l } - { join: g.members, alias: m } - { join: m.group,alias:mg} columns: GroupName: label: Group Name MembersName: label: Name ContactNo: label: Contact No LoanStatus: label: Loan Status
First the DataGrid cells, or columns are created to display for each data record i.e. grid name which is the datagrid name, example Webmuch groups. Query is the action that we want to perform on the table or the bundle name by aliasing the Entities, and retrieving all the members. select: g – is to return the result set in vertical format, JOIN is used to retrieve data from the linked tables. Columns are the datagrid layout.
Without the frontend type datetime attribute the date will not be displayed. In each column, we are using different queries i.e. group identification, group name, frontend is used to display the date, time/render data date type. Frontend is used to render data.
What Filters And Sorters Do In Datagrid
Filters
To filter items in a Datagrid, you create a method that provides the filtering logic and then you use the PagedCollectionView. Filter property to apply the filter. To filter items in a Datagrid, create a method that provides the filtering logic. The method is used as a callback and accepts a parameter of type Object. Remove the filter by setting the PagedCollectionView. Filter property to null, the filter is used when the CheckBox is Checked, and removes it when the Checkbox is Unchecked.
Sorters
To specify how items are sorted in a DataGrid, you use the SortDescription type to sort the items in the source view.
To Sort Items In A Datagrid
Create a SortDescription and pass the name of the property to sort by to the constructor. Add additional instances of SortDescription to the PagedCollectionView.SortDescriptions collection to sort by additional properties. Here is an example which use some methods of filters and sorters:
sorters: columns: MembersName: { data_name: g.name } GroupName: { data_name: GroupName } LoanStatus: { data_name: LoanStatus } filters: columns: MembersName: type: string data_name: g.name ContactNo: type: string data_name: ContactNo GroupName: type: string data_name: GroupName LoanStatus : type : string data_name: LoanStatus options: entityHint: memberdetail export: csv: { label: oro.grid.export.csv }
Action
In action field as you can see the data below, data grid using the viewing data, editing data, deleting data, updating, etc. param id:- you have to pass parameter in every root.acl_resource: In this, a particular user can access this field. Navigate helps to add the buttons in datagrid. In action property view, update, edit and delete is performed on the icon and link of the groups or on the parameter’s id. A row action is an action performed on the current row. It’s represented by a route to a controller with the identifier of the row. Row actions are all put in the same new action column at the last position of the grid.
properties: id: ~ update_link: type: url route: memberdetails_edit params: [ id ] view_link: type: url route: memberdetails_show params: [ id ] delete_link: type: url route: memberdetails_delete params: [ id ] eligibilitydetail_link: type: url route: eligibilitydetails_new params: [ id ] loan_link: type: url route: memberloan_list params: [ id ] approval_link: type: url route: loansanctioned params: [id] disbursal_link: type: url route: loandisbursement params: [id] actions: update: type: navigate label: Update icon: edit link: update_link acl_resource: memberdetails_edit view: type: navigate label: View icon: user link: view_link rowAction: true acl_resource: memberdetails_show delete: type: navigate label: Delete icon: trash link: delete_link acl_resource: memberdetails_delete loan: type: navigate label: Loans icon: list link: loan_link acl_resource: memberdetails_loanlist approval: type: navigate label: Loan Approval icon: ok link: approval_link disbursal: type: navigate label: Loan Disbursal icon: thumbs-up link: disbursal_link
Next is how we Export File in CSV from the datagrid.
options: entityHint: member export: csv: { label: oro.grid.export.csv }
This method creates a download button through CSV report for the datagrid and provide an option for the user to download the datagrid file in an excel sheet.
Datagrid in Twig file
Twig uses a central object called the environment (of class Twig_Environment). Instances of this class are used to store the configuration and extensions, and are used to load templates from the file system or other locations.
In the code given below:
First we import and extend the ORO functionality, then you give the grid name and page title. With the help of grid name, it will map datagrid from datagrid.yml. Call and render is used to set the grid name and in “set gridname= ‘your data gridname” this is use to render.
Block navButton= to add button in the table.
{% extends 'OroUIBundle:actions:index.html.twig' %} {% import 'OroUIBundle::macros.html.twig' as UI %} {% import 'OroDataGridBundle::macros.html.twig' as dataGrid %} {% set gridName = 'your datagrid name' %} {% set pageTitle = 'Groups'|trans %} {% block navButtons %} {{ UI.addButton({ 'path' : path('groups_new'), 'entity_label': 'Group'|trans }) }} {% endblock %}
Well then, that’s about it. Let us know if you liked this tutorial. For queries, feel free to comment below.
Cheers!
FOR MORE AWESOME TUTORIALS:
1. How To Embed EAV Model In Symfony2 Collection Form
2. How To Override FOSUserBundle
3. How To Create A Multi Column Design Layout Using Wookmark jQuery.