Commit b41355e8 authored by tguillon's avatar tguillon
Browse files

Mise en place des sous-traitants.

Possibilité de crée un sous-traitant, associer un sous-traitant à une entité, dissocier un sous-traitant à une entité, supprimer un sous-traitant.
parent 41815fcc
......@@ -463,6 +463,41 @@ CREATE TABLE crons (
modified timestamp without time zone NOT NULL
);
--
-- Création de la table fournisseurs
--
CREATE TABLE soustraitants
(
id serial NOT NULL PRIMARY KEY,
raisonsociale VARCHAR(75) NOT NULL,
siret VARCHAR(14) NOT NULL,
ape VARCHAR(5) NOT NULL,
telephone VARCHAR(15),
fax VARCHAR(15),
adresse TEXT,
email VARCHAR(75),
createdbyorganisation INT DEFAULT NULL,
created timestamp without time zone NOT NULL,
modified timestamp without time zone NOT NULL
);
CREATE UNIQUE INDEX soustraitants_siret_idx ON soustraitants (siret);
ALTER TABLE soustraitants ADD CONSTRAINT soustraitants_ape_alpha_numeric_chk CHECK ( cakephp_validate_alpha_numeric( ape ) );
ALTER TABLE soustraitants ADD CONSTRAINT soustraitants_telephone_phone_chk CHECK ( cakephp_validate_phone( telephone, NULL, 'fr' ) );
ALTER TABLE soustraitants ADD CONSTRAINT soustraitants_fax_phone_chk CHECK ( cakephp_validate_phone( fax, NULL, 'fr' ) );
ALTER TABLE soustraitants ADD CONSTRAINT soustraitants_email_email_chk CHECK ( cakephp_validate_email( email ) );
--
-- Création de la table de jointure Fournisseurs Organisations
--
CREATE TABLE soustraitants_organisations (
id SERIAL PRIMARY KEY NOT NULL,
soustraitant_id INTEGER NOT NULL REFERENCES soustraitants(id) ON DELETE CASCADE ON UPDATE CASCADE,
organisation_id INTEGER NOT NULL REFERENCES organisations(id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE UNIQUE INDEX soustraitants_organisations_soustraitant_id_organisation_id_idx ON soustraitants_organisations (soustraitant_id, organisation_id);
-- INFO: voir http://postgresql.developpez.com/sources/?page=chaines
CREATE OR REPLACE FUNCTION "public"."noaccents_upper" (text) RETURNS text AS
$body$
......
......@@ -59,7 +59,8 @@ Inflector::rules('plural', array(
'rules' => array(),
'irregular' => array(
'fiche' => 'fiches',
'organisation_user' => 'organisations_users'
'organisation_user' => 'organisations_users',
'soustraitant_organisation' => 'soustraitants_organisations'
),
'uninflected' => array()
));
......
This diff is collapsed.
......@@ -132,6 +132,15 @@ msgstr "Connecteurs"
msgid "default.sousTitreTachesAutomatiques"
msgstr "Tâches automatiques"
msgid "default.titreSousTraitant"
msgstr "Sous-traitants"
msgid "default.sousTitreLesSousTraitants"
msgstr "Les sous-traitants"
msgid "default.sousTitreMesSousTraitants"
msgstr "Mes sous-traitants"
msgid "default.popupBtnChoisir"
msgstr "Choisir"
......
# Locale fra
# soustraitant.po
#
# WebCil : https://adullact.net/projects/webcil
#
# @author Théo Guillon
# @copyright Libriciel SCOP
# @link http://adullact.org/
# @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt CeCiLL v2
#
####################### Controller/AdminsController.php #######################
msgid "soustraitant.titreGestionSoustraitantApplication"
msgstr "Liste des sous-traitants présents dans toute l'application"
msgid "soustraitant.titreGestionSoustraitantEntitee"
msgstr "Liste des sous-traitants présents dans l'entité"
msgid "soustraitant.titreAjouterSoustraitant"
msgstr "Ajouter un sous-traitant"
###############################################################################
############################## Session->setFlash ##############################
#### SUCCESS ####
msgid "soustraitant.flashsuccessDissocierSoustraitantEntite"
msgstr "La dissociation du sous-traitant de l'entité a été enregistée"
msgid "soustraitant.flashsuccessSuppressionSoustraitantEntite"
msgstr "La suppression du sous-traitant pour l'entité a été enregistée"
msgid "soustraitant.flashsuccessSousTraitantAffecterEnregistrer"
msgstr "Le sous-traitant a été associé dans l'entité"
################
#### ERREUR ####
msgid "soustraitant.flasherrorErreurDissocierSoustraitantEntite"
msgstr "Une erreur est survenue lors de la dissociation du sous-traitant de l'entité"
msgid "soustraitant.flasherrorErreurSuppressionSoustraitantEntite"
msgstr "Une erreur est survenue lors de la suppression du sous-traitant pour l'entité"
msgid "soustraitant.flasherrorErreurAssociationExistanteSoustraitantEntite"
msgstr "Certaines associations entre le sous-traitant sont existantes. Le sous-traitant ne peut donc pas être supprimé."
msgid "soustraitant.flasherrorErreurEnregistrementSousTraitantAffecter"
msgstr "Une erreur est survenue lors de l'affectation du sous-traitant à l'entité"
################
###############################################################################
######################### View/Soustraitants/index.ctp #########################
msgid "soustraitant.btnFiltrerSoustraitant"
msgstr " Filtrer les sous-traitants"
msgid "soustraitant.champFiltreEntite"
msgstr "Filtrer par entité"
msgid "soustraitant.placeholderChoisirEntite"
msgstr "Choisir une entité"
msgid "soustraitant.champFiltreNbSiret"
msgstr "Filtrer par numéro SIRET"
msgid "soustraitant.placeholderChampFiltreNbSiret"
msgstr "Choisir un numéro SIRET"
msgid "soustraitant.champFiltreCodeAPE"
msgstr "Filtrer par code APE"
msgid "soustraitant.placeholderChampFiltreCodeAPE"
msgstr "Choisir un code APE"
msgid "soustraitant.champFiltreRaisonSociale"
msgstr "Filtrer par raison sociale"
msgid "soustraitant.placeholderChampFiltreRaisonSociale"
msgstr "Choisir un sous-traitant par sa raison sociale"
msgid "soustraitant.champFiltreNbAffichageSoustraitant"
msgstr "Nombre de sous-traitant à l'affichage"
msgid "soustraitant.textAucunSoustraitant"
msgstr "Il n'existe aucun sous-traitant"
msgid "soustraitant.btnAjouterSoustraitant"
msgstr " Ajouter un sous-traitant"
msgid "soustraitant.popupTitreAffecterSousTraitant"
msgstr "Associer un ou plusieurs sous-traitant à une ou plusieurs entités"
msgid "soustraitant.champSelectOrganisation"
msgstr "Associer à une ou plusieurs entités"
msgid "soustraitant.btnAffecterEntite"
msgstr "Associer un sous-traitant"
msgid "soustraitant.titreTableauRaisonSocialeSoustraitant"
msgstr "Raison sociale"
msgid "soustraitant.titreTableauEntiteSoustraitant"
msgstr "Entité"
msgid "soustraitant.titreTableauNumeroSiretSoustraitant"
msgstr "N° Siret"
msgid "soustraitant.titreTableauCodeAPESoustraitant"
msgstr "Code APE"
msgid "soustraitant.titreTableauAction"
msgstr "Actions"
msgid "soustraitant.commentaireBtnVisualiserSoustraitant"
msgstr "Visualiser le sous-traitant"
msgid "soustraitant.commentaireBtnModifierSoustraitant"
msgstr "Modifier le sous-traitant"
msgid "soustraitant.commentaireBtnSupprimerSoustraitant"
msgstr "Supprimer le sous-traitant"
msgid "soustraitant.confirmationSupprimerSoustraitant"
msgstr "Voulez vous supprimer le sous-traitant : "
###############################################################################
######################### View/Soustraitants/entite.ctp ########################
msgid "soustraitant.commentaireBtnSupprimerSoustraitantEntite"
msgstr "Dissocier le sous-traitant de l'entité"
msgid "soustraitant.confirmationSupprimerSoustraitantEntite"
msgstr "Voulez vous dissocier le sous-traitant "
msgid "soustraitant.textAucunSoustraitantEntite"
msgstr "Il n'existe aucun sous-traitant dans votre entité"
###############################################################################
########################## View/Soustraitants/add.ctp ##########################
msgid "soustraitant.champRaisonsociale"
msgstr "Raison sociale"
msgid "soustraitant.placeholderChampRaisonsociale"
msgstr "Raison sociale (requis)"
msgid "soustraitant.champSiret"
msgstr "N° Siret"
msgid "soustraitant.placeholderChampSiret"
msgstr "N° Siret (requis)"
msgid "soustraitant.champApe"
msgstr "Code APE"
msgid "soustraitant.placeholderChampApe"
msgstr "Code APE (requis)"
msgid "soustraitant.placeholderSelectOrganisation"
msgstr "Sélectionnez une ou plusieurs entités (facultatif)"
msgid "soustraitant.champTelephone"
msgstr "Téléphone"
msgid "soustraitant.placeholderChampTelephone"
msgstr "Numéro de téléphone du sous-traitant (facultatif)"
msgid "soustraitant.champFax"
msgstr "Fax"
msgid "soustraitant.placeholderChampFax"
msgstr "Numéro de fax du sous-traitant (facultatif)"
msgid "soustraitant.champAdresse"
msgstr "Adresse"
msgid "soustraitant.placeholderChampAdresse"
msgstr "Adresse du sous-traitant (facultatif)"
msgid "soustraitant.champEmail"
msgstr "E-mail"
msgid "soustraitant.placeholderChampEmail"
msgstr "E-mail du sous-traitant (facultatif)"
###############################################################################
\ No newline at end of file
......@@ -197,6 +197,20 @@ class Organisation extends AppModel {
'offset' => '',
'finderQuery' => '',
'with' => 'OrganisationUser'
],
'Soustraitant' => [
'className' => 'Soustraitant',
'joinTable' => 'soustraitants_organisations',
'foreignKey' => 'organisation_id',
'associationForeignKey' => 'soustraitant_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'with' => 'SoustraitantOrganisation'
]
];
......
<?php
/**
* Model Soustraitant
*
* web-DPO : Outil de gestion de vos traitements dans le cadre de la
* réglementation relative à la protection des données personnelles (RGPD)
*
* Copyright (c) Libriciel SCOP (https://www.libriciel.fr/)
*
* Licensed under The CeCiLL V2 License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Libriciel SCOP (https://www.libriciel.fr/)
* @link https://www.libriciel.fr/web-cil/
* @since web-DPO v1.0.0
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.html CeCiLL V2 License
* @version v1.0.0
* @package AppModel
*/
App::uses('AppModel', 'Model');
class Soustraitant extends AppModel {
public $name = 'Soustraitant';
public $actsAs = [
'Database.DatabaseFormattable' => [
'Database.DatabaseDefaultFormatter' => [
'formatTrim' => [
'NOT' => ['binary']
],
'formatNull' => true,
'formatNumeric' => [
'float',
'integer'
],
'formatSuffix' => '/_id$/',
'formatStripNotAlnum' => '/^(telephone|fax)$/'
]
]
];
/**
* validate associations
*
* @var array
*
* @access public
* @created 12/04/2018
* @version v1.0.0
*/
public $validate = [
'siret' => [
'luhn' => [
'rule' => [
'luhn',
true
],
'message' => 'Le numéro de SIRET n\'est pas valide'
]
]
];
/**
* hasMany associations
*
* @var array
*
* @access public
* @created 11/04/2018
* @version v1.0.0
*/
public $hasAndBelongsToMany = [
'Organisation' => [
'className' => 'Organisation',
'joinTable' => 'soustraitants_organisations',
'foreignKey' => 'soustraitant_id',
'associationForeignKey' => 'organisation_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'with' => 'SoustraitantOrganisation'
]
];
}
<?php
/**
* Model FournisseurOrganisation
*
* web-DPO : Outil de gestion de vos traitements dans le cadre de la
* réglementation relative à la protection des données personnelles (RGPD)
*
* Copyright (c) Libriciel SCOP (https://www.libriciel.fr/)
*
* Licensed under The CeCiLL V2 License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Libriciel SCOP (https://www.libriciel.fr/)
* @link https://www.libriciel.fr/web-cil/
* @since web-DPO v1.0.0
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.html CeCiLL V2 License
* @version v1.0.0
* @package AppModel
*/
App::uses('AppModel', 'Model');
class SoustraitantOrganisation extends AppModel {
public $name = 'SoustraitantOrganisation';
/**
* belongsTo associations
*
* @var array
*
* @access public
* @created 13/04/2015
* @version V0.9.0
*/
public $belongsTo = [
'Soustraitant' => [
'className' => 'Soustraitant',
'foreignKey' => 'soustraitant_id'
],
'Organisation' => [
'className' => 'Organisation',
'foreignKey' => 'organisation_id'
]
];
}
......@@ -421,6 +421,30 @@
], $this->Session->read('Droit.liste'))
) {
?>
<li class="dropdown-submenu">
<a href="#" >
<?php echo __d('default', 'default.titreSousTraitant'); ?>
</a>
<ul class="dropdown-menu" role="menu">
<li>
<?php
echo '<li>' . $this->Html->link('<i class="fa fa-plug fa-fw"></i>' . __d('default', 'default.sousTitreLesSousTraitants'), [
'controller' => 'soustraitants',
'action' => 'index'
], ['escape' => false]) . '</li>';
?>
</li>
<li>
<?php
echo '<li>' . $this->Html->link('<i class="fa fa-clock-o fa-fw"></i>' . __d('default', 'default.sousTitreMesSousTraitants'), [
'controller' => 'soustraitants',
'action' => 'entite',
], ['escape' => false]) . '</li>';
?>
</li>
</ul>
</li>
<li class="dropdown-submenu">
<a href="#" >
<?php echo __d('default', 'default.titreMaintenances'); ?>
......@@ -445,7 +469,7 @@
</ul>
</li>
<?php
}
}
?>
</ul>
</li>
......
......@@ -139,7 +139,7 @@
'div',
$this->Html->tag(
'div',
$this->WebcilForm->create('Registre', ['url' => 'add'])
$this->WebcilForm->create('Registre', ['action' => 'add'])
.$this->WebcilForm->input('Registre.numero', [
'id' => 'numero',
'label' => [
......
<?php
if (isset($this->validationErrors['Soustraitant']) && !empty($this->validationErrors['Soustraitant'])) {
?>
<div class="alert alert-danger" role="alert">
<span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
<span class="sr-only">Error:</span>
Ces erreurs se sont produites:
<ul>
<?php
foreach ($this->validationErrors as $donnees) {
foreach ($donnees as $champ) {
foreach ($champ as $error) {
echo '<li>' . $error . '</li>';
}
}
}
?>
</ul>
</div>
<?php
}
?>
<?php
echo $this->WebcilForm->create('Soustraitant',[
'url' => 'add',
'type' => 'file',
'autocomplete' => 'off',
'inputDefaults' => ['div' => false],
'class' => 'form-horizontal',
'novalidate' => 'novalidate'
]);
?>
<div class="users form">
<!-- Colonne de gauche -->
<div class="col-md-6">
<?php
echo $this->WebcilForm->inputs([
'raisonsociale' => [
'id' => 'raisonsociale',
'required' => true
],
'siret' => [
'id' => 'siret',
'required' => true
],
'ape' => [
'id' => 'ape',
'required' => true
],
'createdbyorganisation' => [
'id' => 'createdbyorganisation',
'type' => 'hidden',
'value' => $this->Session->read('Organisation.id')
]
]);
echo $this->WebcilForm->input('SoustraitantOrganisation.organisation_id', [
'class' => 'form-control usersDeroulant',
'options' => $mesOrganisations,
'value' => $this->Session->read('Organisation.id'),
'empty' => true,
'multiple' => true,
'data-placeholder' => __d('soustraitant','soustraitant.placeholderSelectOrganisation'),
'label' => [
'text' => __d('soustraitant','soustraitant.champSelectOrganisation'),
]
]);
?>
</div>
<!-- Colonne de droite -->
<div class="col-md-6">
<?php
echo $this->WebcilForm->inputs([
'telephone' => [
'id' => 'telephone'
],
'fax' => [
'id' => 'fax'
],
'adresse' => [
'id' => 'adresse',
'type' => 'textarea'
],
'email' => [
'id' => 'email'
]
]);
?>
</div>
</div>
<div style="clear: both">
<?php
echo $this->WebcilForm->buttons(['Cancel', 'Save']);
?>
</div>
<?php
echo $this->WebcilForm->end();
\ No newline at end of file
<?php
if (isset($this->validationErrors['Soustraitant']) && !empty($this->validationErrors['Soustraitant'])) {
?>
<div class="alert alert-danger" role="alert">
<span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
<span class="sr-only">Error:</span>
Ces erreurs se sont produites:
<ul>
<?php
foreach ($this->validationErrors as $donnees) {
foreach ($donnees as $champ) {
foreach ($champ as $error) {
echo '<li>' . $error . '</li>';
}
}
}
?>
</ul>
</div>
<?php
}
?>
<?php
echo $this->WebcilForm->create('Soustraitant', [
'autocomplete' => 'off',
'inputDefaults' => ['div' => false],
'class' => 'form-horizontal',
'novalidate' => 'novalidate'
]);
?>