Create the ''engine'' for a website that uses PHP/MySQL/Smarty

IN PROGRESS
Bids
7
Avg Bid (USD)
$710
Project Budget (USD)
$500 - $1050

Project Description:
We are looking for someone to finish the existing website located at **http://www.onder++nemers++gids.be/** (remove ++ signs)

You can have a look at that website **using the following user/pass** : rentacoder / BTC8IqEtO5L}

We are looking for someone to finish an existing website in PHP/MySQL/Smarty. We already have an HTML/CSS design.

The FRONTEND requires a search/filter feature, basic user registration/login with a "update profile" like functionality and simple PayPal IPN implementation.

The BACKEND requires simple CRUD (Create, Read, Update, Delete) actions on 4 tables.

please **read the entire bid request** for more detailed information.

## Deliverables

We are looking for someone to finish the existing website located at http://www.onder++nemers++gids.be/ (remove ++ signs)
You can have a look at that website using the following user/pass : rentacoder / BTC8IqEtO5L}

For your reference, the database scheme we have so far is attached below.

What needs to be done by you ?
**
GUEST FRONT END**

On the homepage/index page, there is a big search bar. This already has some jquery autocomplete functionality (as a sample), but your job is to make sure it uses the database to search in. The database already exists, and this search bar must search in the following fields in the database : company.name, company.city, sic_code.label and do a google-style auto-suggest combining the data from these three fields in the database. For example when someone searches for "garage London", it must output the garages found in sic_code.label that have the company.city of london only.

On the page that shows the search results, there should be a block on the right of the results that allows the visitor to set filters on: company.province (dropdown), company.city (text), [url removed, login to view] (text).
When a company name is clicked on the results page, the company details are shown (all contacts, twitter and facebook). Think eBay-like. All variables (search query and filters) should use GET parameters, so they appear in the URL.

For each company in the search results/listing, the company name should be clickable. This will redirect the visitor to the company details page, which is a separate page that contains all company info.


**COMPANY FRONT END**

Companies should be able to register and log-in in order to add their company to the database. Registration must be validated via email. Simple and secure username/password combination with "Remember Me" feature (using cookies).

We have already filled in the database with [url removed, login to view] companies. They have to enter their "ACCESS CODE" in an extra field during registration. Companies will receive letters via snailmail that contain an access code which they can enter on the website to check/edit their information (or add more detailed information). Those companies already have an entry in the "company" table. Using the access code during registration will therefor NOT insert an extra row in the tabel, it will simply fill in the username/password/email fields upon registering.
*
Side Note: This means the registration form has 5 fields: username, password, password (verify) email address and access code (optional). The login form has 3 fields: username, password, remember me (checkbox).*

Once logged in, the company can update their basic company information (name, address, zip, city, phone, fax, email, url) and select their SIC code (dropdown?).

They can also opt for a premium service (monthly payment) so they can add additional information, including: facebook, twitter, company logo, up to 10 contacts and up to 10 sic codes. After entering this additional information, a simple invoice is created. Once this invoice is marked as paid, the company.premium field will be set to Active and the premium info will be shown on the website when visitors view the company details.

Simple PayPal IPN functionality must be included. Users should be able to press a PayPal Pay Now button. There are PHP classes available that allow you to implement this quick and fast.
*
Side Note: The users also have the option to pay by bank transfer. In this case it is the administrator's responsibility to manually mark the invoice as PAID in the admin section when a payment is received. Monthly fee is unknown at the moment, make sure this is a variable we can easily set (config file).*

**ADMIN BACK END**

The following tables must have simple CRUD (Create, Read, Update, Delete) functionality: company, contacts, invoice, sic_codes.

It must be possible to set filters on all fields in the datagrid. For the company listing, per row there should also be buttons:
- Invoices: shows grid with all invoices for that client
- Contacts: shows grid with all contacts for that client

And the obvious Edit and Delete buttons.

It's not obligated but we highly recommend using ExtJS datagrids for this. Those are fancy AND easy/fast to develop. They support server-side filter/sorting functionality as well as inline editting and multi-line select for the delete feature. It would make things a lot easier for the both of us.
*Side Note: please implement admin user/pass authentication, also make sure this back-end functionality is in a separate directory so we can protect it with a .htaccess file.*

**CRON JOB**

A cron job will run once per day. Ten (10) days before the end of the billing cycle, a new invoice should be sent. It will also check for overdue invoices. If an invoice is overdue and the company premium status is still Active, it should be disabled.

**PROJECT SUMMARY**

So basically we want you to implement the following for the FRONTEND: database search/filter feature, basic user registration/login functionality, update forms for companies so they can edit their company information, simple invoice system with PayPal payments.

For the BACKEND we want you to implement: CRUD actions on some tables.
**
IMPORTANT EXTRA INFORMATION:**

- We already have a database layout. You can add extra tables and columns if you think this is required, however if you CHANGE anything (rename or remove tables/columns) please ask for permission first. The database has to stay compatible with our import script that we use to fill the database.

- Coding conventions and standards are important. We are aware that some developers have their own coding conventions. We don't mind, as long as your code is CONSISTENT, EASY TO READ, CLEAN and WELL DOCUMENTED. We only accept quality code that is professionally written.

- If ANYTHING is unclear or if you have ANY questions (or suggestions) please don't hesitate to add a comment and ask. We appreciate proper communication.

- For this project we won't hire coders with 0 ratings, sorry. If you want to bid, we also appreciate expert guarantee of 10%, but this is not obligatory.

- The deadline is 14 days for this project: we expect everything to be done within 11 days, after which we will do three days of bug testing and problem analasys, and on the last 2 days you have time for all corrections/modifications/fixing bugs. By this time everything must be in finished state. This doesn't mean that by day 11 we don't expect bug-free code. This also doesn't mean that you can keep working beyond day 11. By bidding you agree that the work must be reported COMPLETE by day 11 or you forfeit the project. The 3 extra days are JUST for bug testing and repairing ONLY.

- Worker/coder MUST create a daily status report, containing at least the following: A complete description of all the work carried out that day and all the changes that were made, an uploaded zip file containing all the latest files, AND the changes must be uploaded to our server. Coder/Worker agrees that failing to deliver a daily status report results in a complete forfeit of the entire project.

**
EXTRA REQUIRED FEATURES:**

- All search queries are logged in the "searches" table.

- When an admin logs in, it's logged in the "adminlog" table.

- Limit the amount of searches/queries per IP per minute to prevent data mining scripts from "stealing" our database (and causing server load issues).

- CSV import feature that allows an CSV file (either uploaded via browser or uploaded via FTP to the server) to be parsed and imported to the database. Each line in the CSV file contains 1 company and possibly 1 or more contacts. Each company has a SIC code (with a label/description). If that SIC code isn't added to the sic_code table yet, then the import script should create an entry. This CSV file needs to be processed in the background (using a CRON job) and you have to take into account that the CSV file can be extremely large (more than 1GB in size)
**

ADDEMDUM DATABASE SCHEME:**

--
-- Table structure for table `admin`
-- Description: Contains admin login information.
--

CREATE TABLE IF NOT EXISTS `admin` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(50) NOT NULL,
`password` varchar(50) NOT NULL,
`email` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


--
-- Table structure for table `company`
-- Description: Contains company information including
-- login info. Each company will be assigned a unique access
-- code which we will send to them via mail or email. This
-- access code allows them to access and edit their company
-- details (and purchase premium services for their company).
--

CREATE TABLE IF NOT EXISTS `company` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(50) NOT NULL,
`password` varchar(50) NOT NULL,
`accesscode` varchar(50) NOT NULL,
`name` varchar(50) NOT NULL,
`address` varchar(255) NOT NULL,
`zip` int(11) NOT NULL,
`city` varchar(50) NOT NULL,
`phone` varchar(15) NOT NULL,
`fax` varchar(15) NOT NULL,
`email` varchar(100) NOT NULL,
`url` varchar(100) NOT NULL,
`facebook` varchar(255) NOT NULL,
`twitter` varchar(20) NOT NULL,
`logo` varchar(255) NOT NULL,
`premium` enum('Active','Inactive') NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


--
-- Table structure for table `company_sic_code`
-- Description: Links company and sic_code tables
-- as a many-to-many relation.
--

CREATE TABLE IF NOT EXISTS `company_sic_code` (
`company_id` int(11) NOT NULL,
`sic_code` int(11) NOT NULL,
PRIMARY KEY (`company_id`,`sic_code`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


--
-- Table structure for table `contact`
-- Description: A company can have multiple contacts.
--

CREATE TABLE IF NOT EXISTS `contact` (
`id` int(11) NOT NULL auto_increment,
`company_id` int(11) NOT NULL,
`name` varchar(50) NOT NULL,
`function` varchar(50) NOT NULL,
`phone` varchar(20) NOT NULL,
`fax` varchar(20) NOT NULL,
`email` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


--
-- Table structure for table `invoice`
-- Description: When a company decides to opt for premium
-- services, an invoice will be created (monthly cycle).
--

CREATE TABLE IF NOT EXISTS `invoice` (
`id` int(11) NOT NULL auto_increment,
`company_id` int(11) NOT NULL,
`amount` double NOT NULL,
`invoicedate` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`duedate` timestamp NOT NULL default '0000-00-00 00:00:00',
`paid` enum('No','Yes') NOT NULL,
`transaction` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


--
-- Table structure for table `sic_code`
-- Description: Standard Industrial Classification codes
-- (and their description/label). Each company is assigned to 1
-- sic code by default. These codes are set up in the form of a
-- hierarchical tree. Leafs are normally on the 4th level.
--

CREATE TABLE IF NOT EXISTS `sic_code` (
`code` int(11) NOT NULL auto_increment,
`label` varchar(255) NOT NULL,
`parent_code` int(11) NOT NULL,
`level` int(11) NOT NULL,
PRIMARY KEY (`code`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


WHEN YOU ARE READY TO BID:

- Include a sample of code from your previous work, preferrably an admin back-end. Also include a sample of a script you wrote from scratch.

- Be ready to include an expert-guarantee of 10% in your bid

- When bidding please write a small piece on how you see this project, something that shows us that you understand the requirements, and that you have read the entire bid request. Something that shows us you understand what we require.

- bids that don't have these above three requirements will probably be ignored.

Skills required:
Amazon Web Services, Engineering, Javascript, MySQL, PHP, Project Management, Software Architecture, Software Testing, Web Hosting, Website Management, Website Testing
About the employer:
Verified
Public Clarification Board
Bids are hidden by the project creator. Log in as the employer to view bids or to bid on this project.
You will not be able to bid on this project if you are not qualified in one of the job categories. To see your qualifications click here.


$ 680
in 25 days
$ 892.5
in 25 days
Hire deltatechnologix
$ 680
in 25 days
Hire hansjin
$ 680
in 25 days
Hire pafkavw
$ 680
in 25 days
Hire kbfarooq
$ 680
in 25 days
Hire guardianpressinc
$ 680
in 25 days