Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
open-source
OSE
Commits
ebaca4a7
Commit
ebaca4a7
authored
Feb 09, 2022
by
Laurent Lécluse
Browse files
nouvelle entité Statut
parent
acaa5c5f
Changes
14
Expand all
Hide whitespace changes
Inline
Side-by-side
data/ddl/index/STATUT_ANNEE_FK.php
0 → 100644
View file @
ebaca4a7
<?php
//@formatter:off
return
[
'name'
=>
'STATUT_ANNEE_FK'
,
'unique'
=>
FALSE
,
'table'
=>
'STATUT'
,
'columns'
=>
[
'ANNEE_ID'
,
],
];
//@formatter:on
data/ddl/ref-constraint/STATUT_ANNEE_FK.php
0 → 100644
View file @
ebaca4a7
<?php
//@formatter:off
return
[
'name'
=>
'STATUT_ANNEE_FK'
,
'table'
=>
'STATUT'
,
'rtable'
=>
'ANNEE'
,
'delete_rule'
=>
NULL
,
'index'
=>
NULL
,
'columns'
=>
[
'ANNEE_ID'
=>
'ID'
,
],
];
//@formatter:on
data/ddl/table/STATUT.php
View file @
ebaca4a7
This diff is collapsed.
Click to expand it.
data/ddl_columns_pos.php
View file @
ebaca4a7
...
...
@@ -1328,11 +1328,11 @@ return [
'REFERENTIEL'
,
'REFERENTIEL_VISUALISATION'
,
'REFERENTIEL_EDITION'
,
'MOTIF_NON_PAIEMENT'
,
'CLOTURE'
,
'MODIF_SERVICE_DU'
,
'MODIF_SERVICE_DU_VISUALISATION'
,
'PAIEMENT_VISUALISATION'
,
'MOTIF_NON_PAIEMENT'
,
'FORMULE_VISUALISATION'
,
'CODES_CORRESP_1'
,
'CODES_CORRESP_2'
,
...
...
module/Application/src/Assertion/ModificationServiceDuAssertion.php
View file @
ebaca4a7
...
...
@@ -52,6 +52,6 @@ class ModificationServiceDuAssertion extends AbstractAssertion
protected
function
assertIntervenant
(
Intervenant
$intervenant
)
{
return
$intervenant
->
getStatut
()
->
hasPrivilege
(
Privileges
::
MODIF_SERVICE_DU_ASSOCIATION
);
return
$intervenant
->
getStatut
()
->
getModificationServiceDu
(
);
}
}
\ No newline at end of file
module/Application/src/Assertion/ServiceAssertion.php
View file @
ebaca4a7
...
...
@@ -360,7 +360,7 @@ class ServiceAssertion extends AbstractAssertion
protected
function
assertCloture
(
Role
$role
,
Intervenant
$intervenant
)
{
if
(
$intervenant
->
getStatut
()
->
get
Peut
Cloture
rSaisie
())
{
if
(
$intervenant
->
getStatut
()
->
getCloture
())
{
$softPassCloture
=
$role
->
hasPrivilege
(
Privileges
::
CLOTURE_EDITION_SERVICES
);
$hardPassCloture
=
$role
->
hasPrivilege
(
Privileges
::
CLOTURE_EDITION_SERVICES_AVEC_MEP
);
...
...
@@ -477,7 +477,7 @@ class ServiceAssertion extends AbstractAssertion
{
// filtrer pour la structure ? ?
return
$this
->
asserts
([
$intervenant
->
getStatut
()
->
get
PeutSaisir
MotifNonPaiement
(),
$intervenant
->
getStatut
()
->
getMotifNonPaiement
(),
$this
->
assertIntervenant
(
$role
,
$intervenant
),
]);
}
...
...
module/Application/src/Controller/IntervenantController.php
View file @
ebaca4a7
...
...
@@ -209,7 +209,7 @@ class IntervenantController extends AbstractController
$this
->
getServiceLocalContext
()
->
setIntervenant
(
$intervenant
);
// passage au contexte pour le présaisir dans le formulaire de saisie
$recherche
=
new
Recherche
(
$typeVolumeHoraire
,
$etatVolumeHoraire
);
if
(
$intervenant
->
getStatut
()
->
get
PeutSaisir
Service
()
&&
$this
->
isAllowed
(
$intervenant
,
Privileges
::
ENSEIGNEMENT_VISUALISATION
))
{
if
(
$intervenant
->
getStatut
()
->
getService
()
&&
$this
->
isAllowed
(
$intervenant
,
Privileges
::
ENSEIGNEMENT_VISUALISATION
))
{
$services
=
$this
->
getProcessusService
()
->
getServices
(
$intervenant
,
$recherche
);
}
else
{
$services
=
false
;
...
...
@@ -231,7 +231,7 @@ class IntervenantController extends AbstractController
if
(
$widget
)
$vm
->
addChild
(
$widget
,
'formuleTotauxHetd'
);
/* Clôture de saisie (si nécessaire) */
if
(
$typeVolumeHoraire
->
isRealise
()
&&
$intervenant
->
getStatut
()
->
get
Peut
Cloture
rSaisie
())
{
if
(
$typeVolumeHoraire
->
isRealise
()
&&
$intervenant
->
getStatut
()
->
getCloture
())
{
$cloture
=
$this
->
getServiceValidation
()
->
getValidationClotureServices
(
$intervenant
);
}
else
{
$cloture
=
null
;
...
...
module/Application/src/Controller/PieceJointeController.php
View file @
ebaca4a7
...
...
@@ -91,7 +91,7 @@ class PieceJointeController extends AbstractController
$messages
=
$this
->
makeMessages
(
$demandees
,
$fournies
);
$alertContrat
=
$role
->
getIntervenant
()
&&
$intervenant
->
getStatut
()
->
has
Contrat
();
$alertContrat
=
$role
->
getIntervenant
()
&&
$intervenant
->
getStatut
()
->
get
Contrat
();
return
compact
(
'intervenant'
,
'title'
,
'heuresPourSeuil'
,
'demandees'
,
'synthese'
,
'fournies'
,
'messages'
,
'alertContrat'
,
'annee'
);
}
...
...
module/Application/src/Controller/ServiceReferentielController.php
View file @
ebaca4a7
...
...
@@ -59,8 +59,9 @@ class ServiceReferentielController extends AbstractController
$typeVolumeHoraireCode
=
$this
->
params
()
->
fromRoute
(
'type-volume-horaire-code'
,
'PREVU'
);
$viewHelperParams
=
$this
->
params
()
->
fromPost
(
'params'
,
$this
->
params
()
->
fromQuery
(
'params'
));
$role
=
$this
->
getServiceContext
()
->
getSelectedIdentityRole
();
$intervenant
=
$this
->
params
()
->
fromRoute
(
'intervenant'
);
$viewModel
=
new
\
Laminas\View\Model\ViewModel
();
/** @var Intervenant $intervenant */
$intervenant
=
$this
->
params
()
->
fromRoute
(
'intervenant'
);
$viewModel
=
new
\
Laminas\View\Model\ViewModel
();
if
(
!
$intervenant
)
{
$action
=
$this
->
getRequest
()
->
getQuery
(
'action'
,
null
);
// ne pas afficher par défaut, sauf si demandé explicitement
...
...
module/Application/src/Form/Intervenant/Dossier/DossierStatutFieldset.php
View file @
ebaca4a7
...
...
@@ -63,7 +63,7 @@ class DossierStatutFieldset extends AbstractFieldset
}
}
//Si statut intervenant n'est pas selectionnable dans la liste alors liste en lecture seule
if
(
$statut
->
is
DossierSelectionnable
()
||
$statut
->
getCode
()
==
Statut
::
CODE_AUTRES
)
{
if
(
$statut
->
get
DossierSelectionnable
()
||
$statut
->
isAutres
()
)
{
$this
->
get
(
'statut'
)
->
setValueOptions
([
''
=>
'(Sélectionnez un statut)'
]
+
\
UnicaenApp\Util
::
collectionAsOptions
(
$statutSelectable
));
}
else
{
...
...
module/Application/src/Service/DossierService.php
View file @
ebaca4a7
...
...
@@ -123,7 +123,7 @@ class DossierService extends AbstractEntityService
$iPrec
=
$this
->
getServiceIntervenant
()
->
getPrecedent
(
$intervenant
,
-
$i
);
if
(
$iPrec
&&
$iPrec
->
getStatut
()
->
estVacataire
()
&&
$iPrec
->
getStatut
()
->
get
PeutSaisir
Service
())
{
if
(
$iPrec
&&
$iPrec
->
getStatut
()
->
estVacataire
()
&&
$iPrec
->
getStatut
()
->
getService
())
{
return
$iPrec
;
}
}
...
...
module/ExportRh/src/Hydrator/ExportRhHydrator.php
View file @
ebaca4a7
...
...
@@ -23,7 +23,7 @@ class ExportRhHydrator implements HydratorInterface
{
//On mappe automatiquement le bon statut RH selon le statut OSE
$statut
=
$object
->
getStatut
();
$statutRh
=
$statut
->
getCode
Rh
();
$statutRh
=
$statut
->
getCode
Corresp2
();
$typeEmploi
=
(
$statut
->
getTemVa
())
?
'UCNVA'
:
'UCNVCE'
;
$data
[
'connecteurForm'
]
=
[
...
...
module/Intervenant/src/Entity/Db/Mapping/Intervenant.Entity.Db.Statut.dcm.xml
View file @
ebaca4a7
...
...
@@ -6,64 +6,103 @@
<id
name=
"id"
type=
"integer"
column=
"ID"
>
<generator
strategy=
"SEQUENCE"
/>
</id>
<field
name=
"histoCreation"
type=
"datetime"
column=
"HISTO_CREATION"
nullable=
"false"
/>
<field
name=
"histoDestruction"
type=
"datetime"
column=
"HISTO_DESTRUCTION"
nullable=
"true"
/>
<field
name=
"histoModification"
type=
"datetime"
column=
"HISTO_MODIFICATION"
nullable=
"false"
/>
<unique-constraints>
<unique-constraint
name=
"STATUT_UN"
columns=
"CODE,ANNEE_ID,HISTO_DESTRUCTION"
/>
</unique-constraints>
<field
name=
"code"
type=
"string"
column=
"CODE"
length=
"50"
nullable=
"false"
/>
<field
name=
"libelle"
type=
"string"
column=
"LIBELLE"
length=
"128"
nullable=
"false"
/>
<many-to-one
field=
"typeIntervenant"
target-entity=
"Application\Entity\Db\TypeIntervenant"
>
<join-column
name=
"TYPE_INTERVENANT_ID"
referenced-column-name=
"ID"
/>
</many-to-one>
<many-to-one
field=
"annee"
target-entity=
"Application\Entity\Db\Annee"
>
<join-column
name=
"ANNEE_ID"
referenced-column-name=
"ID"
/>
</many-to-one>
<field
name=
"ordre"
type=
"integer"
column=
"ORDRE"
nullable=
"false"
/>
<field
name=
"prioritaireIndicateurs"
type=
"boolean"
column=
"PRIORITAIRE_INDICATEURS"
nullable=
"false"
/>
<field
name=
"serviceStatutaire"
type=
"float"
column=
"SERVICE_STATUTAIRE"
precision=
"126"
scale=
"0"
nullable=
"false"
/>
<field
name=
"depassementServiceDuSansHC"
type=
"boolean"
column=
"DEPASSEMENT_SERVICE_DU_SANS_HC"
nullable=
"false"
/>
<field
name=
"tauxChargesPatronales"
type=
"float"
column=
"TAUX_CHARGES_PATRONALES"
precision=
"126"
scale=
"0"
nullable=
"false"
/>
<field
name=
"code"
type=
"string"
column=
"CODE"
length=
"50"
nullable=
"false"
/>
<field
name=
"ordre"
type=
"integer"
column=
"ORDRE"
nullable=
"false"
/>
<field
name=
"peutSaisirService"
type=
"boolean"
column=
"SERVICE"
nullable=
"false"
/>
<field
name=
"referentiel"
type=
"boolean"
column=
"REFERENTIEL"
nullable=
"false"
/>
<field
name=
"dossierSelectionnable"
type=
"boolean"
column=
"DOSSIER_SELECTIONNABLE"
nullable=
"false"
/>
<field
name=
"dossier"
type=
"boolean"
column=
"DOSSIER"
nullable=
"false"
/>
<field
name=
"peutAvoirContrat"
type=
"boolean"
column=
"CONTRAT"
nullable=
"false"
/>
<field
name=
"peutCloturerSaisie"
type=
"boolean"
column=
"CLOTURE"
nullable=
"false"
/>
<field
name=
"peutSaisirMotifNonPaiement"
type=
"boolean"
column=
"MOTIF_NON_PAIEMENT"
nullable=
"false"
/>
<field
name=
"peutSaisirServiceExt"
type=
"boolean"
column=
"SERVICE_EXTERIEUR"
nullable=
"false"
/>
<field
name=
"depassementSDSHC"
type=
"boolean"
column=
"DEPASSEMENT_SERVICE_DU_SANS_HC"
nullable=
"false"
/>
<field
name=
"dossierVisualisation"
type=
"boolean"
column=
"DOSSIER_VISUALISATION"
nullable=
"false"
/>
<field
name=
"dossierEdition"
type=
"boolean"
column=
"DOSSIER_EDITION"
nullable=
"false"
/>
<field
name=
"dossierSelectionnable"
type=
"boolean"
column=
"DOSSIER_SELECTIONNABLE"
nullable=
"false"
/>
<field
name=
"dossierIdentiteComplementaire"
type=
"boolean"
column=
"DOSSIER_IDENTITE_COMP"
nullable=
"false"
/>
<field
name=
"dossierAdresse"
type=
"boolean"
column=
"DOSSIER_ADRESSE"
nullable=
"false"
/>
<field
name=
"dossierContact"
type=
"boolean"
column=
"DOSSIER_CONTACT"
nullable=
"false"
/>
<field
name=
"dossierInsee"
type=
"boolean"
column=
"DOSSIER_INSEE"
nullable=
"false"
/>
<field
name=
"dossierTelPerso"
type=
"boolean"
column=
"DOSSIER_TEL_PERSO"
nullable=
"false"
/>
<field
name=
"dossierEmailPerso"
type=
"boolean"
column=
"DOSSIER_EMAIL_PERSO"
nullable=
"false"
/>
<field
name=
"dossierAdresse"
type=
"boolean"
column=
"DOSSIER_ADRESSE"
nullable=
"false"
/>
<field
name=
"dossierBanque"
type=
"boolean"
column=
"DOSSIER_BANQUE"
nullable=
"false"
/>
<field
name=
"dossierInsee"
type=
"boolean"
column=
"DOSSIER_INSEE"
nullable=
"false"
/>
<field
name=
"dossierEmployeur"
type=
"boolean"
column=
"DOSSIER_EMPLOYEUR"
nullable=
"false"
/>
<field
name=
"dossierEmailPerso"
type=
"boolean"
column=
"DOSSIER_EMAIL_PERSO"
nullable=
"false"
/>
<field
name=
"dossierTelPerso"
type=
"boolean"
column=
"DOSSIER_TEL_PERSO"
nullable=
"false"
/>
<field
name=
"prioritaireIndicateurs"
type=
"boolean"
column=
"PRIORITAIRE_INDICATEURS"
nullable=
"false"
/>
<many-to-many
field=
"champsAutres"
target-entity=
"Application\Entity\Db\DossierAutre"
fetch=
"EXTRA_LAZY"
>
<join-table
name=
"DOSSIER_CHAMP_AUTRE_PAR_STATUT"
>
<join-columns>
<join-column
name=
"STATUT_ID"
referenced-column-name=
"ID"
/>
</join-columns>
<inverse-join-columns>
<join-column
name=
"DOSSIER_CHAMP_AUTRE_ID"
referenced-column-name=
"ID"
/>
</inverse-join-columns>
</join-table>
</many-to-many>
<many-to-one
field=
"typeIntervenant"
target-entity=
"Application\Entity\Db\TypeIntervenant"
>
<join-columns>
<join-column
name=
"TYPE_INTERVENANT_ID"
referenced-column-name=
"ID"
/>
</join-columns>
<field
name=
"dossierAutre1"
type=
"boolean"
column=
"DOSSIER_AUTRE_1"
nullable=
"false"
/>
<field
name=
"dossierAutre1Visualisation"
type=
"boolean"
column=
"DOSSIER_AUTRE_1_VISUALISATION"
nullable=
"false"
/>
<field
name=
"dossierAutre1Edition"
type=
"boolean"
column=
"DOSSIER_AUTRE_1_EDITION"
nullable=
"false"
/>
<field
name=
"dossierAutre2"
type=
"boolean"
column=
"DOSSIER_AUTRE_2"
nullable=
"false"
/>
<field
name=
"dossierAutre2Visualisation"
type=
"boolean"
column=
"DOSSIER_AUTRE_2_VISUALISATION"
nullable=
"false"
/>
<field
name=
"dossierAutre2Edition"
type=
"boolean"
column=
"DOSSIER_AUTRE_2_EDITION"
nullable=
"false"
/>
<field
name=
"dossierAutre3"
type=
"boolean"
column=
"DOSSIER_AUTRE_3"
nullable=
"false"
/>
<field
name=
"dossierAutre3Visualisation"
type=
"boolean"
column=
"DOSSIER_AUTRE_3_VISUALISATION"
nullable=
"false"
/>
<field
name=
"dossierAutre3Edition"
type=
"boolean"
column=
"DOSSIER_AUTRE_3_EDITION"
nullable=
"false"
/>
<field
name=
"dossierAutre4"
type=
"boolean"
column=
"DOSSIER_AUTRE_4"
nullable=
"false"
/>
<field
name=
"dossierAutre4Visualisation"
type=
"boolean"
column=
"DOSSIER_AUTRE_4_VISUALISATION"
nullable=
"false"
/>
<field
name=
"dossierAutre4Edition"
type=
"boolean"
column=
"DOSSIER_AUTRE_4_EDITION"
nullable=
"false"
/>
<field
name=
"dossierAutre5"
type=
"boolean"
column=
"DOSSIER_AUTRE_5"
nullable=
"false"
/>
<field
name=
"dossierAutre5Visualisation"
type=
"boolean"
column=
"DOSSIER_AUTRE_5_VISUALISATION"
nullable=
"false"
/>
<field
name=
"dossierAutre5Edition"
type=
"boolean"
column=
"DOSSIER_AUTRE_5_EDITION"
nullable=
"false"
/>
<field
name=
"pieceJustificativeVisualisation"
type=
"boolean"
column=
"PJ_VISUALISATION"
nullable=
"false"
/>
<field
name=
"pieceJustificativeTelechargement"
type=
"boolean"
column=
"PJ_TELECHARGEMENT"
nullable=
"false"
/>
<field
name=
"pieceJustificativeEdition"
type=
"boolean"
column=
"PJ_EDITION"
nullable=
"false"
/>
<field
name=
"pieceJustificativeArchivage"
type=
"boolean"
column=
"PJ_ARCHIVAGE"
nullable=
"false"
/>
<field
name=
"conseilRestreint"
type=
"boolean"
column=
"CONSEIL_RESTREINT"
nullable=
"false"
/>
<field
name=
"conseilRestreintVisualisation"
type=
"boolean"
column=
"CONSEIL_RESTREINT_VISUALISATION"
nullable=
"false"
/>
<field
name=
"conseilRestreintDureeVie"
type=
"boolean"
column=
"CONSEIL_RESTREINT_DUREE_VIE"
nullable=
"false"
/>
<field
name=
"conseilAcademique"
type=
"boolean"
column=
"CONSEIL_ACA"
nullable=
"false"
/>
<field
name=
"conseilAcademiqueVisualisation"
type=
"boolean"
column=
"CONSEIL_ACA_VISUALISATION"
nullable=
"false"
/>
<field
name=
"conseilAcademiqueDureeVie"
type=
"boolean"
column=
"CONSEIL_ACA_DUREE_VIE"
nullable=
"false"
/>
<field
name=
"contrat"
type=
"boolean"
column=
"CONTRAT"
nullable=
"false"
/>
<field
name=
"contratVisualisation"
type=
"boolean"
column=
"CONTRAT_VISUALISATION"
nullable=
"false"
/>
<field
name=
"contratDepot"
type=
"boolean"
column=
"CONTRAT_DEPOT"
nullable=
"false"
/>
<field
name=
"service"
type=
"boolean"
column=
"SERVICE"
nullable=
"false"
/>
<field
name=
"serviceVisualisation"
type=
"boolean"
column=
"SERVICE_VISUALISATION"
nullable=
"false"
/>
<field
name=
"serviceEdition"
type=
"boolean"
column=
"SERVICE_EDITION"
nullable=
"false"
/>
<field
name=
"serviceExterieur"
type=
"boolean"
column=
"SERVICE_EXTERIEUR"
nullable=
"false"
/>
<field
name=
"referentiel"
type=
"boolean"
column=
"REFERENTIEL"
nullable=
"false"
/>
<field
name=
"referentielVisualisation"
type=
"boolean"
column=
"REFERENTIEL_VISUALISATION"
nullable=
"false"
/>
<field
name=
"referentielEdition"
type=
"boolean"
column=
"REFERENTIEL_EDITION"
nullable=
"false"
/>
<field
name=
"cloture"
type=
"boolean"
column=
"CLOTURE"
nullable=
"false"
/>
<field
name=
"modificationServiceDu"
type=
"boolean"
column=
"MODIF_SERVICE_DU"
nullable=
"false"
/>
<field
name=
"modificationServiceDuVisualisation"
type=
"boolean"
column=
"MODIF_SERVICE_DU_VISUALISATION"
nullable=
"false"
/>
<field
name=
"paiementVisualisation"
type=
"boolean"
column=
"PAIEMENT_VISUALISATION"
nullable=
"false"
/>
<field
name=
"motifNonPaiement"
type=
"boolean"
column=
"MOTIF_NON_PAIEMENT"
nullable=
"false"
/>
<field
name=
"formuleVisualisation"
type=
"boolean"
column=
"FORMULE_VISUALISATION"
nullable=
"false"
/>
<field
name=
"codesCorresp1"
type=
"string"
column=
"CODES_CORRESP_1"
length=
"1000"
nullable=
"true"
/>
<field
name=
"codesCorresp2"
type=
"string"
column=
"CODES_CORRESP_2"
length=
"1000"
nullable=
"true"
/>
<field
name=
"codesCorresp3"
type=
"string"
column=
"CODES_CORRESP_3"
length=
"1000"
nullable=
"true"
/>
<field
name=
"codesCorresp4"
type=
"string"
column=
"CODES_CORRESP_4"
length=
"1000"
nullable=
"true"
/>
<field
name=
"histoCreation"
type=
"datetime"
column=
"HISTO_CREATION"
nullable=
"false"
/>
<many-to-one
field=
"histoCreateur"
target-entity=
"Application\Entity\Db\Utilisateur"
>
<join-column
name=
"HISTO_CREATEUR_ID"
referenced-column-name=
"ID"
/>
</many-to-one>
<field
name=
"histoModification"
type=
"datetime"
column=
"HISTO_MODIFICATION"
nullable=
"false"
/>
<many-to-one
field=
"histoModificateur"
target-entity=
"Application\Entity\Db\Utilisateur"
>
<join-columns>
<join-column
name=
"HISTO_MODIFICATEUR_ID"
referenced-column-name=
"ID"
/>
</join-columns>
<join-column
name=
"HISTO_MODIFICATEUR_ID"
referenced-column-name=
"ID"
/>
</many-to-one>
<field
name=
"histoDestruction"
type=
"datetime"
column=
"HISTO_DESTRUCTION"
nullable=
"true"
/>
<many-to-one
field=
"histoDestructeur"
target-entity=
"Application\Entity\Db\Utilisateur"
>
<join-columns>
<join-column
name=
"HISTO_DESTRUCTEUR_ID"
referenced-column-name=
"ID"
/>
</join-columns>
</many-to-one>
<many-to-one
field=
"histoCreateur"
target-entity=
"Application\Entity\Db\Utilisateur"
>
<join-columns>
<join-column
name=
"HISTO_CREATEUR_ID"
referenced-column-name=
"ID"
/>
</join-columns>
</many-to-one>
<one-to-many
field=
"typePieceJointeStatut"
target-entity=
"Application\Entity\Db\TypePieceJointeStatut"
mapped-by=
"statut"
fetch=
"EXTRA_LAZY"
/>
</entity>
</doctrine-mapping>
module/Intervenant/src/Entity/Db/Statut.php
View file @
ebaca4a7
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment