Description générale
Il s'agit d'intégrer deux fonctionalités (features) sur un projet CakePHP 1.3.x existant.
Il faut donc maîtriser CakePHP ainsi que jQuery pour l'aspect AJAX (jQuery est imposé, puisque c'est le framework Javascript déjà en place pour d'autres parties de l'application).
L'output (views, fichiers .ctp) doit être en pur HTML bien formatté (utilisez autant que possible l'Helper HTML de Cake), vous n'avez pas besoin de vous soucier de l'habillage et du design CSS. Ne perdez / utilisez pas de temps pour l'interface, le design, etc. Créez juste du code propre (PHP, JS et vues en simple HTML valide) à l'habillage / ergonomie visuelle on appliquera nos styles déjà étudiés.
Il ne faut réaliser aucun autre élément, tout est prêt et fonctionnel, il n'y à qu'à créer ces deux features, que nous allons intégrer nous-même à l'application déjà en production.
Feature 1
Recherche avec filtre sur le nom des produits.
Voir mockup 1, annexe
Il s'agit d'un textbox en mode autocomplete: sès que l'utilisateur saisit 2-3 caractère, des suggestions lui sont faites, suggestions qui s'affinent au fur et à mesure de la saisie. Les résultats de la recherche sont automatiquement rafraichis (AJAX) sans besoin de cliquer où que ce soit. Dans l'exemple (mockup) l'utilisateur a saisit "UBS SA" et donc les 3 résultats contenant (recherche %LIKE%) s'affichent tant dans les suggestions de recherche (autocomplete) dans dans la liste des résultats. Dans les faits, il s'agit d'imiter "Google Instant" (http://www.youtube.com/watch?v=I1Zg9TkYwTM). Note => les caractères accentuées sont ignorés. Par exemple é, ë, ê, è, etc. => correspondent (pour la recherche) à "e".
Feature 2
Association Produit <=> Sous-jacent(s)
Voir mockup 2, annexe
Un produit est associé un ou plusieurs sous-jacent(s).
Chaque association a une propre barrière (valeur décimale):
la valeur barrière, n'est pas intrinsèque à un sous-jacent en tant qu'entité, mais à un sous-jacent associé à un produit.
la valeur barrière est facultative, elle peut être vide
Chaque association a une valeur initiale (valeur décimale).
la valeur initiale, n'est pas intrinsèque à un sous-jacent en tant qu'entité, mais à un sous-jacent associé à un produit.
Voir le schéma de la base de données, ci-dessous, pour mieux comprendre => raison pour laquelle "barriere" et "valeur_initiale" sot dans la table "produits_sousjacents".
Il s'agit de pouvoir ajouter / modifier / supprimer des associations Produit <=> Sous-jacent(s) sans recharger la page.
On doit pouvoir ajouter / associer autant de sous-jacents à un produits (voir mockup 3).
Il doit y avoir au minimum un sous-jacent pour que le produit soit validable.
Un sous-jacent ne peut figurer être associé qu'une seule et unique fois à un produit.
On doit pouvoir modifier n'importe quel sous-jacent associé sans recharger la page (voir mokup 4).
Structure de la base de données
CREATE TABLE IF NOT EXISTS `produits` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`created` datetime DEFAULT NULL,
`modified` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `sousjacents` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`symbole_boursier` varchar(30) DEFAULT NULL,
`prix_cloture` decimal(16,2) DEFAULT NULL,
`created` datetime DEFAULT NULL,
`modified` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `symbole_boursier` (`symbole_boursier`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `produits_sousjacents` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`produit_id` int(11) NOT NULL,
`sousjacent_id` int(11) NOT NULL,
`barriere` decimal(16,2) DEFAULT NULL,
`valeur_initiale` decimal(16,2) DEFAULT NULL,
`created` datetime DEFAULT NULL,
`modified` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Conditions pour postuler
- vous êtes un excellent développeur PHP
- vous avez une bonne expérience en programmation orientée objet avec PHP et le modèle MVC
- vous avez une solide expérience avec CakePHP (idéalement, 1.3.x)
- vous connaissez (et appliquez!) les bonnes pratiques de développement (code clair et lisible, bien documenté, testé, etc.)
- vous connaissez (et respectez!) les convention de CakePHP 1.3.x, et n'utilisez pas des fonctions obsolètes
- vous savez respecter le modèle MVC, vous ne mélangez pas tout dans vos applications...
- vous savez utiliser SVN / Subversion
- vous avez de bonnes connaissances en JavaScript / jQuery (et êtes familier avec AJAX)
- quand vous dites "oui" cela signifie vraiment OUI, et quand vous dites "non", c'est vraiment NON
- vous ne dites jamais "oui" quand vous ne savez pas ou n'êtes pas sûr
- quand vous indiquez un délai, vous le respectez toujours
- dans les rares cas où vous avez un problème, vous le communiquez promptement (le plus vite possible) et sincèrement afin d'éviter de compliquer le problème
- quand vous donnez votre parole (par exemple, un délai, un prix, vous dites que vous pouvez faire une certaine chose dans certaines conditions) vous prenez toujours suffisamment de temps pour bien penser / évaluer où vous vous engagez et ainsi vous ête 100% sûr de respectez vos promesses
- vous pouvez travailler en tant que sous-traitant, dans la plus totale discrétion et transparence, en ne mentionnant jamais les travaux réalisés avec nous, ni le noms de notre société ou de nos clients dans votre portfolio
Si vous remplissez ces conditions et que nous apprécions la qualité de votre travail, nous pourrons établir une relation sur le long terme (nous avons de nombreux mandats en cours de développement spécifique avec CakePHP et jQuery).
En vue d'évaluer vos compétences pour de futurs projets, dans votre offre, prière de spécifier l'estimation en temps pour la feature 1 et la feature 2.
Dans tous les cas, ce "projet" (qui est peu de chose, par rapport à ce qu'il reste à développer) sera rémunéré au forfait, selon votre offre.
Merci pour votre attention.
Commentaire de l'administrateur : - Ce projet a fait l'objet d'une validation par téléphone par un administrateur ProgOnline. Il est sérieux, et a de grandes chances de se concrétiser, à condition de recevoir des offres pertinentes de la part des prestataires.
- Le client est : Une société de développement informatique
- Le client affirme souhaiter concrétiser son projet Asap