Finish a website that uses PHP/MySQL/Smarty

CANCELLED
Bids
17
Avg Bid (USD)
$405
Project Budget (USD)
$100 - $500

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

**Finish a website that uses PHP/MySQL/Smarty**

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), company.zip (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 900.000 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: For now, you don't have to implement admin user/pass authentication, just 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 7 days for this project: we expect everything to be done within 5 days, after which we will do one day of bug testing and problem analasys, and on the 7th day you have time for all corrections/modifications/fixing bugs. By this time everything must be in finished state.
**
EXTRA NON-REQUIRED FEATURES:**

These are small features that are optional. The timeframe is limited so we want you to focus on everything above first. However if you implement (some of) these features, it might result in a nice bonus if we're satisfied with your overall work.

- 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).
**
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 ;

Skills required:
Amazon Web Services, CSS, Engineering, Javascript, MySQL, PHP, Project Management, Software Architecture, Software Testing, Web Hosting, Website Management, Website Testing, XML
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.