From 98075c3ff737a461a67e071bf3d7908a0b42743f Mon Sep 17 00:00:00 2001 From: "vincent@cubedesigners.com" Date: Mon, 22 Jun 2020 08:55:54 +0000 Subject: [PATCH] wip #3720 @3 --- inc/commons/class.common.url.php | 8 +- .../Controlleur/class.extranet.url.php | 3328 ++++++++--------- inc/ws/Controlleur/class.ws.url.php | 4 +- inc/ws/Metier/class.ws.book.parametres.php | 4 +- 4 files changed, 1670 insertions(+), 1674 deletions(-) diff --git a/inc/commons/class.common.url.php b/inc/commons/class.common.url.php index eb829ae9d..5f2c0615c 100644 --- a/inc/commons/class.common.url.php +++ b/inc/commons/class.common.url.php @@ -64,12 +64,6 @@ class commonUrl $message = $tentative ? '


' . __('Identifiants incorrects') . '

' : ''; - if (MODE === 'ws') { - $forgot = 'https://toolbox.fluidbook.com/password/reset?redirectTo=https://workshop.fluidbook.com/'; - } else if (MODE === 'extranet') { - $forgot = 'https://dev.extranet.cubedesigners.com/password/reset?redirectTo=https://extranet.cubedesigners.com/'; - } - $res = commonPage::barre(); $res .= commonPage::tMain(); $res .= commonPage::bh('login'); @@ -80,7 +74,7 @@ class commonUrl $res .= ''; $res .= ''; $res .= ''; - $res .= ''; + $res .= ''; $res .= ''; $res .= '
' . __('Votre e-mail ou login') . ' : ' . cubeForm::email('user_email', 20, 64, '') . '
' . __('Votre mot de passe') . ' : ' . form::password('user_password', 20, 64, '') . '
' . __('Mot de passe oublié ? Cliquez ici') . '
' . __('Première connexion ?') . ' ' . __('Mot de passe oublié ? Cliquez ici') . '
' . $core->typo->BoutonOK('Cliquez-ici pour vous identifier') . '
'; $res .= ''; diff --git a/inc/extranet/Controlleur/class.extranet.url.php b/inc/extranet/Controlleur/class.extranet.url.php index 99eac0f91..b4b705331 100644 --- a/inc/extranet/Controlleur/class.extranet.url.php +++ b/inc/extranet/Controlleur/class.extranet.url.php @@ -3,1670 +3,1670 @@ class extranetUrl { - public static function clients($args) - { - global $core; - cubePage::truePopup(); - cubePage::autoComplete(); - cubePage::emptyfield(); - commonDroits::min(1); - $settings = $core->user->getSettings('clients'); - - $shortcuts = array(); - $shortcuts[] = '' . $core->typo->Ajouter('Créer un nouveau client') . ''; - $filtres = array(); - $filtres[] = new commonFiltre(__('Ayant un projet'), 'status_client_projet', $settings['filtres']); - $filtres[] = new commonFiltre(__('Ayant des impayés'), 'impaye', $settings['filtres']); - $res = commonPage::barre($filtres, 'filtreClients', 'clients', $shortcuts); - $res .= commonPage::tMain(); - $res .= commonPage::bh(); - $res .= '
'; - $res .= self::listeClients(); - $res .= '
'; - $res .= commonPage::bf(); - $res .= commonPage::bMain(); - return $res; - } - - public static function listeClients($dashboard = null, $settings = null) - { - global $core; - commonDroits::min(1); - $settings = is_null($settings) ? $core->user->getSettings('clients') : $settings; - $change = is_null($dashboard) ? 'Client' : 'Dashboard/' . $dashboard; - $dao = new commonDAOEntreprise($core->con); - if (isset($settings['search']) && !is_null($settings['search'])) { - $dao->setSearch($settings['search']); - } - $dao->setFiltres($settings['filtres']); - $liste = $dao->getListe($settings['orderby'], $settings['sens'], $settings['limit']); - - $res = ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $i = 0; - foreach ($liste as $id => $client) { - if (!is_array($client->contacts)) { - continue; - } - $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; - $res .= ''; - $res .= ''; - $res .= ''; - $contacts = array(); - - foreach ($client->contacts as $c) { - $contacts[] = '' . $c->prenom . ' ' . $c->nom . ''; - } - - $res .= ''; - $res .= ''; - $res .= ''; - if ($client->impaye) { - $res .= ''; - } else { - $res .= ''; - } - - $res .= ''; - if (is_null($client->ca)) { - $res .= ''; - } else { - $res .= ''; - } - $res .= ''; - $i++; - } - if (!isset($settings['search']) || is_null($settings['search'])) { - $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; - $res .= ''; - } - $res .= '
' . commonUrl::orderby('#', 'entreprise_id', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Raison sociale'), 'nom', $settings, 'sort' . $change) . '' . __('Contacts') . '' . __('Type') . '' . commonUrl::orderby('CA', 'ca', $settings, 'sort' . $change) . '' . commonUrl::orderby('Impayés', 'impaye', $settings, 'sort' . $change) . '
' . $client->entreprise_id . '' . $client->nom . '' . implode(', ', $contacts) . '' . $core->client_type[$client->type] . ''; - if ($client->ca) { - $res .= '' . number_format($client->ca, 0, ',', ' ') . ''; - } - - $res .= '' . number_format($client->impaye, 0, '.', ' ') . '' . cubeMedia::image(IMG . '/edit.png') . '' . cubeMedia::image(IMG . '/delete.png') . '
'; - $res .= commonPage::pager($settings['page'], $dao->count(), $settings['par_page'], 'page' . $change . '/%d'); - $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('clients')); - $res .= '
'; - return $res; - } - - public static function clientDetailCa($entreprise_id) - { - global $core; - $dao = new commonDAOEntreprise($core->con); - $annees = $dao->getCaDetails($entreprise_id); - $res = ''; - $i = 0; - foreach ($annees as $annee => $ca) { - $class = cubeMath::isOdd($i) ? ' class="odd"' : ''; - $res .= '' . $annee . '' . number_format($ca, 0, ',', ' ') . ' €'; - $i++; - } - return $res; - } - - public static function clientDetailImpaye($entreprise_id) - { - global $core; - $dao = new extranetDAOFacture($core->con); - $daoClient = new commonDAOEntreprise($core->con); - $factures = $dao->getImpayesOfClient($entreprise_id); - $client = $daoClient->selectById($entreprise_id); - $res = ''; - $i = 0; - foreach ($factures as $facture) { - $class = cubeMath::isOdd($i) ? ' class="odd"' : ''; - $res .= ''; - $res .= '' . $facture->facture_id . ''; - $res .= ''; - if ($facture->facture_id > 0) { - $res .= '' . $facture->nom . ''; - } else { - $res .= $facture->nom; - } - $res .= ''; - $tva = cubeTaxes::tva($client->pays); - $res .= '' . number_format($facture->total_ht, 0, ',', '') . ' €'; - if ($tva > 0 && $tva != 'UE') { - $res .= ' HT ' . number_format(cubePrices::HTtoTTC($facture->total_ht, $tva), 2, ',', '') . ' € TTC'; - } else { - $res .= ''; - } - $res .= ''; - $i++; - } - return $res; - } - - public static function formClient($entreprise_id = 'new') - { - global $core; - commonDroits::min(1); - $dao = new commonDAOEntreprise($core->con); - $daoUtilisateur = new commonDAOUtilisateur($core->con); - if ($entreprise_id == 'new') { - $client = $dao->cree(); - } else { - $client = $dao->selectById($entreprise_id); - } - - $res = '' . __('Numéro de client') . '' . form::hidden('entreprise_id', $client->entreprise_id) . '' . $client->entreprise_id . ''; - $res .= '' . __('Raison sociale') . '' . form::field('nom', 30, 128, $client->nom) . ''; - $res .= '' . __('Adresse') . '' . form::textarea('adresse', 40, 3, $client->adresse) . ''; - $res .= '' . __('Code postal') . '' . form::field('code_postal', 10, 20, $client->code_postal) . ''; - $res .= '' . __('Ville') . '' . form::field('ville', 30, 128, $client->ville) . ''; - $res .= '' . __('Pays') . '' . form::combo('pays', cubeCountry::getList(), $client->pays) . ''; - $res .= '' . __('Adresse de facturaton') . '' . form::textarea('adresse_facturation', 40, 3, $client->adresse_facturation) . ''; - $res .= '' . __('Site internet') . '' . form::field('site', 30, 128, $client->site) . ''; - $res .= '' . __('Numéro de TVA intracommunautaire') . '' . form::field('tva_intra', 15, 64, $client->tva_intra) . ''; - $res .= '' . __('Type de société') . '' . form::combo('type', array_flip($core->client_type), $client->type) . ''; - $res .= '' . __('Fluidbook Workshop') . ''; - $res .= '' . __('Grade') . '' . form::combo('ws_grade', array_flip($core->ws_grades), $client->ws_grade) . ''; - if ($entreprise_id == 'new' || !$client->ws_admin) { - $class = 'empty-field'; - $default_id = ''; - $default = __("Entrez le nom du revendeur ou de l'administrateur"); - } else { - $class = ''; - $default_id = $client->ws_admin; - $wsa = $daoUtilisateur->selectById($client->ws_admin, 'utilisateurs_entreprise'); - $default = $wsa->utilisateur_id . ' - ' . $wsa->rs . ' (' . $wsa->prenom . ' ' . $wsa->nom . ')'; - } - - $d = $dao->getWSDatas($entreprise_id); - - $res .= '' . __('Revendeur / Administrateur') . '' . form::field('ws_admin_nom', 60, 128, $default, $class) . form::hidden('ws_admin', $default_id) . ''; - if (!is_null($d)) { - $res .= '' . __('Entité facturable') . '' . $d->facturable->prenom . ' ' . $d->facturable->nom . ' (' . $d->facturable->rs . ')'; - $res .= '' . __('Administrateur responsable') . '' . $d->administrateur->prenom . ' ' . $d->administrateur->nom . ' (' . $d->administrateur->rs . ')'; - } - if ($entreprise_id == 'new') { - $daoContact = new commonDAOClient($core->con); - $contact = $daoContact->cree(); - $res .= '' . __('Contact') . ''; - $res .= '' . __('Adresse e-mail') . '' . form::field(array('contact[email]'), 30, 128, $contact->email) . ''; - $res .= '' . __('Mot de passe') . '' . form::field(array('contact[password]'), 30, 128, $contact->password) . ''; - $res .= '' . __('Prénom') . '' . form::field(array('contact[prenom]'), 30, 128, $contact->prenom) . ''; - $res .= '' . __('Nom') . '' . form::field(array('contact[nom]'), 30, 128, $contact->nom) . ''; - $res .= '' . __('Téléphone') . '' . form::field(array('contact[telephone]'), 20, 128, $contact->telephone) . ''; - $res .= '' . __('Mobile') . '' . form::field(array('contact[mobile]'), 20, 128, $contact->mobile) . ''; - $res .= '' . __('Fax') . '' . form::field(array('contact[fax]'), 20, 128, $contact->fax) . ''; - $res .= '' . __('Langue') . '' . form::combo(array('contact[lang]'), cubeLang::getAvailableLangs(true), $contact->lang) . ''; - } - return $res; - } - - public static function listeContacts($entreprise_id) - { - global $core; - commonDroits::min(1); - $dao = new commonDAOEntreprise($core->con); - $contacts = $dao->getContacts($entreprise_id); - - $res = ''; - $res .= ''; - $i = 0; - foreach ($contacts as $contact) { - $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; - $res .= ''; - $res .= ''; - $res .= ''; - //$res .= ''; - $res .= ''; - $i++; - } - $res .= '
' . $core->typo->Contact('Ajouter un contact') . '
' . trim($contact->prenom . ' ' . $contact->nom) . '' . $contact->email . 'FTPSe connecter comme ...' . cubeMedia::image(IMG . '/edit.png') . '
'; - return $res; - } - - public static function formContact($client_id = 'new', $entreprise_id = null) - { - global $core; - commonDroits::min(1); - - $dao = new commonDAOClient($core->con); - if ($client_id == 'new') { - $client = $dao->creeFromEntreprise($entreprise_id); - } else { - $client = $dao->selectById($client_id); - } - - $res = '' . __('Numéro de client') . '' . form::hidden('grade', 0) . form::hidden('entreprise', $client->entreprise) . form::hidden('utilisateur_id', $client->utilisateur_id) . '' . $client->utilisateur_id . ''; - $res .= '' . __('Login activé') . '' . form::hidden('enabled', 0) . form::checkbox('enabled', 1, $client->enabled) . ''; - $res .= '' . __('Adresse e-mail') . '' . form::field('email', 30, 128, $client->email) . ''; - $res .= '' . __('Mot de passe') . '' . form::field('password', 30, 128, $client->password) . ''; - $res .= '' . __('Prénom du contact') . '' . form::field('prenom', 30, 128, $client->prenom) . ''; - $res .= '' . __('Nom du contact') . '' . form::field('nom', 30, 128, $client->nom) . ''; - $res .= '' . __('Adresse') . '' . form::textarea('adresse', 40, 3, $client->adresse) . ''; - $res .= '' . __('Code postal') . '' . form::field('code_postal', 10, 20, $client->code_postal) . ''; - $res .= '' . __('Ville') . '' . form::field('ville', 30, 128, $client->ville) . ''; - $res .= '' . __('Pays') . '' . form::combo('pays', cubeCountry::getList(), $client->pays) . ''; - $res .= '' . __('Téléphone') . '' . form::field('telephone', 20, 128, $client->telephone) . ''; - $res .= '' . __('Mobile') . '' . form::field('mobile', 20, 128, $client->mobile) . ''; - $res .= '' . __('Fax') . '' . form::field('fax', 20, 128, $client->fax) . ''; - $res .= '' . __('Langue') . '' . form::combo('lang', cubeLang::getAvailableLangs(true), $client->lang) . ''; - if ($client_id != 'new') { - $res .= '' . cubeMedia::spacer(10, 10) . ''; - $res .= '' . __('FTP') . ''; - //$res .= '' . __('Se connecter comme ...') . ''; - $res .= '' . __("Paramètres de connexion à l'extranet") . '' . __('Adresse') . ' : https://extranet.cubedesigners.com/
' . __("Nom d'utilisateur") . ' : ' . $client->email . '
' . __('Mot de passe') . ' : ' . $client->password . ''; - $res .= '' . cubeMedia::spacer(10, 10) . ''; - // $res .= '' . __("Paramètres de connexion au FTP") . '' . __('Serveur FTP') . ' : extranet.cubedesigners.com (ftp://extranet.cubedesigners.com)
' . __("Nom d'utilisateur") . ' : ' . $client->email . '
' . __('Mot de passe') . ' : ' . $client->password . ''; - } - return $res; - } - - public static function formNotes($utilisateur_id) - { - global $core; - commonDroits::min(1); - $dao = new commonDAOUtilisateur($core->con); - $utilisateur = $dao->selectById($utilisateur_id); - $res = '' . form::hidden('utilisateur_id', $utilisateur_id) . ''; - $res .= '' . form::textarea('notes', 100, 30, $utilisateur->notes) . ''; - $res .= ''; - return $res; - } - - public static function projets($args) - { - global $core; - commonDroits::min(0.5); - - $settings = $core->user->getSettings('projets'); - - $shortcuts = array(); - if ($core->user->grade >= 1) { - $shortcuts[] = '' . $core->typo->Ajouter('Créer un projet') . ''; - } - - $filtres = array(); - $filtres[] = new commonFiltre(__('Crée par'), 'equipier', $settings['filtres']); - $filtres[] = new commonFiltre(__('Status'), 'status_projet', $settings['filtres']); - $filtres[] = new commonFiltre(__('Année'), 'annee', $settings['filtres']); - - $res = commonPage::barre($filtres, 'filtreProjet', 'projets', $shortcuts); - $res .= commonPage::tMain(); - $res .= commonPage::bh(); - $res .= '
'; - $res .= self::listeProjets(); - $res .= '
'; - $res .= commonPage::bf(); - $res .= commonPage::bMain(); - return $res; - } - - public static function listeProjets($dashboard = null, $settings = null) - { - global $core; - commonDroits::min(0.5); - $settings = is_null($settings) ? $core->user->getSettings('projets') : $settings; - $change = is_null($dashboard) ? 'Projet' : 'Dashboard/' . $dashboard; - - $res = ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - if ($core->user->grade >= 1) { - $res .= ''; - $res .= ''; - $res .= ''; - } - $res .= ''; - $res .= ''; - - $dao = new extranetDAOProjet($core->con); - $dao->setFiltres($settings['filtres']); - if (isset($settings['search']) && !is_null($settings['search'])) { - $dao->setSearch($settings['search']); - } - $liste = $dao->getListe($settings['orderby'], $settings['sens'], $settings['limit']); - - $i = 0; - foreach ($liste as $projet) { - $droits = extranetDroits::projet($projet, false); - - $projet->progression = !$projet->progression ? '-' : $projet->progression . '%'; - $projet->jours_prevus = !$projet->jours_prevus ? '-' : $projet->jours_prevus; - $projet->jours_consommes = !$projet->jours_consommes ? '-' : $projet->jours_consommes; - - $projet->budget = !$projet->budget || !$droits ? '-' : $projet->budget; - $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - if ($droits) { - $res .= ''; - } else { - $res .= ''; - } - - $rf = $projet->rapport_facturation; - if ($projet->budget == '-') { - $rapport_facturation = '-'; - } elseif (!$rf) { - $rapport_facturation = __('Non'); - } elseif ($rf == 1) { - $rapport_facturation = __('Oui'); - } elseif ($rf < 1) { - $rapport_facturation = __('Partie'); - } elseif ($rf > 1) { - $rapport_facturation = __('Trop'); - } - - $rp = $projet->rapport_paiement; - if ($projet->budget == '-') { - $rapport_paiement = '-'; - } elseif (!$rp) { - $rapport_paiement = __('Non'); - } elseif ($rp == 1) { - $rapport_paiement = __('Oui'); - } elseif ($rp < 1) { - $rapport_paiement = __('Partie'); - } elseif ($rp > 1) { - $rapport_paiement = __('Trop'); - } - - if ($core->user->grade >= 1) { - $res .= ''; - $res .= ''; - - $res .= ''; - } - // $res .= ''; - // $res .= ''; - $res .= ''; - $res .= ''; - - $res .= ''; - $i++; - } - if (!isset($settings['search']) || is_null($settings['search'])) { - $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; - $res .= ''; - } - $res .= '
' . commonUrl::orderby('#', 'projet_id', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Projet'), 'nom', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Client'), 'client', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Année'), 'annee_fin', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Chef'), 'chef', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Status'), 'status', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Facturé'), 'rapport_facturation', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Payé'), 'rapport_paiement', $settings, 'sort' . $change) . '' . commonUrl::orderby('B', 'budget', $settings, 'sort' . $change) . '' . commonUrl::orderby('Pr', 'progression', $settings, 'sort' . $change) . '
' . $projet->projet_id . '' . $projet->nom . '' . $projet->client . '' . $projet->annee_fin . '' . $projet->chef . '' . $core->projets_status[$projet->status] . '' . $core->projets_status[$projet->status] . ''; - if ($projet->status == 1 && !$rf) { - $res .= '' . $rapport_facturation . ''; - } else { - $res .= $rapport_facturation; - } - $res .= '' . $rapport_paiement . '' . $projet->budget . '' . $projet->jours_prevus . '' . $projet->jours_consommes . '' . $projet->progression . '' . cubeMedia::image(IMG . '/view.png') . '
'; - $res .= commonPage::pager($settings['page'], $dao->count(), $settings['par_page'], 'page' . $change . '/%d'); - $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('projets')); - $res .= '
'; - return $res; - } - - public static function projet($args) - { - global $core; - commonDroits::min(0.5); - - $shortcuts = array(); - if ($core->user->grade >= 1) { - $shortcuts[] = '' . $core->typo->Ajouter('Créer une tâche') . ''; - $shortcuts[] = '' . $core->typo->Ajouter('Créer une tâche sous-traitée') . ''; - } - - $res = commonPage::barre(null, null, null, $shortcuts); - $res .= commonPage::tMain(); - $res .= commonPage::bh(); - $res .= '
'; - $res .= self::listeProjet($args[1]); - $res .= '
'; - $res .= commonPage::bf(); - $res .= commonPage::bMain(); - return $res; - } - - public static function listeProjet($projet_id) - { - global $core; - commonDroits::min(0.5); - - $res = ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - if ($core->user->grade >= 1) { - $res .= ''; - } - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - - $dao = new extranetDAOProjet($core->con); - $projet = $dao->selectById($projet_id); - - $hasFacture = $dao->hasFacture($projet_id); - - $droits = extranetDroits::projet($projet, false); - - $projet->progression = !$projet->progression ? '-' : $projet->progression . '%'; - $projet->jours_prevus = !$projet->jours_prevus ? '-' : $projet->jours_prevus; - $projet->jours_consommes = !$projet->jours_consommes ? '-' : $projet->jours_consommes; - - $projet->budget = !$projet->budget || !$droits ? '-' : $projet->budget; - - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - if ($droits) { - $res .= ''; - } else { - $res .= ''; - } - if ($core->user->grade >= 1) { - $res .= ''; - } - $res .= ''; - $res .= ''; - $res .= ''; - if ($droits) { - $res .= ''; - if (!count($projet->taches) && !$hasFacture) { - $res .= ''; - } else { - $res .= ''; - } - } else { - $res .= ''; - } - $res .= ''; - $i = 1; - foreach ($projet->taches as $tache) { - $tache->budget = !$tache->budget || !$droits ? '-' : $tache->budget; - $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - if (count($tache->books)) { - $n = array(); - foreach ($tache->books as $b) { - $n[] = '' . $b . ''; - } - $res .= ''; - } else { - $res .= ''; - } - - if ($core->user->grade >= 1) { - $res .= ''; - } - - if ($tache instanceof extranetTacheNormale) { - $progression = !$tache->progression ? '-' : $tache->progression . '%'; - $jours_prevus = !$tache->jours_prevus ? '-' : $tache->jours_prevus; - $jours_consommes = !$tache->jours_consommes ? '-' : $tache->jours_consommes; - $res .= ''; - $res .= ''; - $res .= ''; - if ($droits) { - $res .= ''; - } else { - $res .= ''; - } - } else { - $res .= ''; - if ($droits) { - $res .= ''; - } else { - $res .= ''; - } - } - - $res .= ''; - - $res .= ''; - $i++; - } - $res .= '
#' . __('Projet') . ' / ' . __('Tâche') . '' . __('Client') . ' / ' . __('Catégorie') . '' . __('Année') . '' . __('Chef de projet') . '' . __('Status') . 'BPlCoPr
' . $projet->projet_id . '' . $projet->nom . '' . $projet->client . '' . $projet->annee_fin . '' . $projet->chef . '' . $core->projets_status[$projet->status] . '' . $core->projets_status[$projet->status] . '' . $projet->budget . '' . $projet->jours_prevus . '' . $projet->jours_consommes . '' . $projet->progression . '' . cubeMedia::image(IMG . '/edit.png') . '' . cubeMedia::image(IMG . '/delete.png') . '
T' . $i . '' . $tache->nom . '' . $core->categories[$tache->categorie] . 'Fluidbooks # ' . implode(', ', $n) . '' . $tache->budget . '' . $jours_prevus . '' . $jours_consommes . '' . $progression . '' . cubeMedia::image(IMG . '/edit.png') . '' . __('Tâche sous-traitée') . '' . cubeMedia::image(IMG . '/edit.png') . ''; - if ($core->user->grade >= 1) { - $res .= '' . cubeMedia::image(IMG . '/delete.png') . ''; - } - $res .= '
'; - return $res; - } - - public static function formProjet($projet_id = 'new') - { - global $core; - commonDroits::min(1); - - $dao = new extranetDAOProjet($core->con); - if ($projet_id == 'new') { - $projet = $dao->cree($core->user->utilisateur_id); - } else { - $projet = $dao->selectById($projet_id); - } - - $daoClient = new commonDAOClient($core->con); - $clients = $daoClient->getListe(); - - $listeClients = array(); - foreach ($clients as $client) { - if (empty($client->utilisateur_id)) { - continue; - } - $listeClients[trim($client->rs) . ' (' . $client->prenom . ' ' . $client->nom . ')'] = $client->utilisateur_id; - } - ksort($listeClients); - $listeClients = array_merge(array('--' => ''), $listeClients); - - $daoEquipier = new commonDAOEquipier($core->con); - $equipiers = $daoEquipier->getListe(); - - $listeEquipiers = array(); - foreach ($equipiers as $equipier) { - $listeEquipiers[$equipier->prenom . ' ' . $equipier->nom . ' (' . $equipier->agence . ')'] = $equipier->utilisateur_id; - } - - $daoDevis = new extranetDAODevis($core->con); - $devis = $daoDevis->getListeValidesLibres($projet_id); - $listeDevis = array('--' => 0); - foreach ($devis as $id => $dev) { - $listeDevis[$dev->nom] = $dev->devis_id; - } - - $res = '' . __('Numéro de projet') . '' . form::hidden('projet_id', $projet->projet_id) . '' . $projet->projet_id . ''; - $res .= '' . __('Nom du projet') . '' . form::textarea('nom', 50, 3, html::escapeHTML($projet->nom)) . ''; - $res .= '' . __('Chef de projet') . ''; - if ($core->user->grade > 1) { - $res .= form::combo('chef', $listeEquipiers, $projet->chef_id); - } else { - $res .= form::hidden('chef', $projet->chef_id) . ' ' . $projet->chef; - } - $res .= ''; - $res .= '' . __('Date de début') . '' . cubeForm::dateFree('date_debut', $projet->date_debut) . ''; - $res .= '' . __('Deadline') . '' . cubeForm::dateFree('deadline', $projet->deadline) . ''; - $res .= '' . __('Date de fin') . '' . cubeForm::dateFree('date_fin', $projet->date_fin) . ''; - $res .= '' . __('Client') . '' . form::combo('client', $listeClients, $projet->client_id) . ''; - $res .= '' . __('Devis') . '' . form::combo('devis', $listeDevis, $projet->devis) . ''; - return $res; - } - - public static function formTache($tache) - { - global $core; - commonDroits::min(1); - - $res = '' . __('Numéro de tâche') . '' . form::hidden('projet', $tache->projet) . form::hidden('tache_id', $tache->tache_id) . '' . $tache->tache_id . ''; - $res .= '' . __('Catégorie') . '' . form::combo('categorie', array_flip($core->categories), $tache->categorie) . ''; - $res .= '' . __('Nom') . '' . form::textarea('nom', 50, 3, html::escapeHTML($tache->nom)) . ''; - - return $res; - } - - public static function formTacheNormale($tache_id, $projet_id = null) - { - global $core; - commonDroits::min(1); - $dao = new extranetDAOTache($core->con); - if ($tache_id == 'new') { - $tache = $dao->creeNormale(); - $tache->projet = $projet_id; - } else { - $tache = $dao->selectById($tache_id); - } - $res = self::formTache($tache); - $res .= '' . __('Taux journalier') . '' . form::field('taux_journalier', 6, 6, $tache->taux_journalier) . ''; - $res .= '' . __('Budget') . '' . form::hidden('type', '0') . form::field('budget', 6, 6, $tache->budget) . ''; - return $res; - } - - public static function formTacheSousTraitee($tache_id, $projet_id = null) - { - global $core; - commonDroits::min(1); - $dao = new extranetDAOTache($core->con); - if ($tache_id == 'new') { - $tache = $dao->creeSousTraitee(); - $tache->projet = $projet_id; - } else { - $tache = $dao->selectById($tache_id); - } - $res = self::formTache($tache); - $res .= '' . __('Budget') . '' . form::hidden('type', '1') . form::field('budget', 6, 6, $tache->budget) . ''; - return $res; - } - - public static function timereport($args) - { - global $core; - commonDroits::min(0.5); - $settings = $core->user->getSettings('timereport'); - $res = ''; - if (!isset($_GET['light'])) { - $filtres = array(); - $filtres[] = new commonFiltre(__('Participants'), 'equipier_participe', $settings['filtres']); - $res .= commonPage::barre($filtres, 'filtreTimereport', 'timereport', null); - $res .= commonPage::tMain(); - $res .= commonPage::bh(); - } - $res .= '
'; - $res .= self::listeTimereport(); - $res .= '
'; - if (!isset($_GET['light'])) { - $res .= commonPage::bf(); - $res .= commonPage::bMain(); - } - return $res; - } - - public static function listeTimereport($dashboard = null, $settings = null) - { - global $core; - commonDroits::min(0.5); - // Récupère la liste des projets - $settings = is_null($settings) ? $core->user->getSettings('timereport') : $settings; - $change = is_null($dashboard) ? 'Timereport' : 'Dashboard/' . $dashboard; - - $dao = new extranetDAOProjet($core->con); - if (isset($settings['search']) && !is_null($settings['search'])) { - $dao->setSearch($settings['search']); - } - $dao->setFiltres($settings['filtres']); - $liste = $dao->getProjetsForTimereport($settings['orderby'], $settings['sens'], $settings['limit'], $core->user->utilisateur_id); - // Extrait la liste des tâches - $taches = array(); - foreach ($liste as $id => $projet) { - foreach ($projet->taches as $tache) { - if ($tache instanceof extranetTacheNormale) { - $taches[] = $tache->tache_id; - } - } - } - // Fixe les limites des jours à afficher - $time = cubeDate::round(null, 'd'); // aujourd'hui - $avant = $time - (3600 * 24 * 15); // 15 jours avant - $apres = $time; // aujourd'hui - // Récupère la liste des timereports à afficher - $daoTimereport = new extranetDAOTimereport($core->con); - $timereports = $daoTimereport->getListe($taches, $core->user->utilisateur_id, array('start' => $avant, 'end' => $apres)); - // Affiche le tableau - $res = ''; - $res .= ''; - $res .= ''; - $res .= ''; - for ($date = $avant; $date <= $apres; $date += 3600 * 24) { - $res .= ''; - } - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - - foreach ($liste as $projet) { - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - for ($date = $avant; $date <= $apres; $date += 3600 * 24) { - $cc = self::getClassOfDay($date); - $class = ($cc == '') ? '' : ' class="' . $cc . '"'; - $res .= ''; - } - $projet->progression = !$projet->progression ? '-' : $projet->progression . '%'; - $projet->jours_prevus = !$projet->jours_prevus ? '-' : $projet->jours_prevus; - $projet->jours_consommes = !$projet->jours_consommes ? '-' : $projet->jours_consommes; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $i = 1; - foreach ($projet->taches as $tache) { - if ($tache instanceof extranetTacheNormale) { - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - for ($date = $avant; $date <= $apres; $date += (3600 * 24)) { - $hh = isset($timereports[$tache->tache_id][$date]) ? $timereports[$tache->tache_id][$date]->heures : ''; - $c = ($hh == '') ? '' : 'filled'; - $cc = trim(self::getClassOfDay($date) . ' ' . $c); - $class = ($cc == '') ? '' : ' class="' . $cc . '"'; - $res .= '' . form::field(array('timereport', 't_' . $date . '_' . $tache->tache_id), 1, 3, $hh, 'timereport_field') . ''; - } - $tache->progression = !$tache->progression ? '-' : $tache->progression . '%'; - $tache->jours_prevus = !$tache->jours_prevus ? '-' : $tache->jours_prevus; - $tache->jours_consommes = !$tache->jours_consommes ? '-' : $tache->jours_consommes; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $i++; - } - } - } - - if (!isset($settings['search']) || is_null($settings['search'])) { - $res .= ''; - } - $res .= '
' . commonUrl::orderby('#', 'projet_id', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Projet'), 'nom', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Client'), 'client', $settings, 'sort' . $change) . '' . date('d', $date) . '' . cubeMedia::spacer(16, 1, '', 'spacer') . '' . commonUrl::orderby('Pr', 'progression', $settings, 'sort' . $change) . '' . commonUrl::orderby('Co', 'jours_consommes', $settings, 'sort' . $change) . '' . commonUrl::orderby('Pl', 'jours_prevus', $settings, 'sort' . $change) . '
' . $projet->projet_id . '' . $projet->nom . '' . $projet->client . '' . $projet->progression . '' . $projet->jours_consommes . '' . $projet->jours_prevus . '
T' . $i . '' . $tache->nom . '' . $core->categories[$tache->categorie] . '' . $tache->progression . '' . $tache->jours_consommes . '' . $tache->jours_prevus . '
'; - $res .= commonPage::pager($settings['page'], $dao->countActifs(), $settings['par_page'], 'page' . $change . '/%d'); - $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('projets')); - $res .= '
'; - return $res; - } - - public static function getClassOfDay($date) - { - $aujourdhui = cubeDate::round(null, 'd'); - $highlight = ($date == $aujourdhui); - $we = (date('N', $date) >= 6); - if ($highlight) { - return 'highlight'; - } - if ($we) { - return 'we'; - } - return ''; - } - - public static function devis($args) - { - global $core; - cubePage::truePopup(); - cubePage::contextMenu(); - - if ($core->user->grade == 0) { - return self::devis_client($args); - } - $settings = $core->user->getSettings('devis'); - commonDroits::min(1); - - $shortcuts = array(); - $shortcuts[] = '' . $core->typo->Ajouter('Créer un devis') . ''; - - $filtres = array(); - $filtres[] = new commonFiltre(__('Créées par'), 'equipier', $settings['filtres']); - $filtres[] = new commonFiltre(__('Status'), 'status_devis', $settings['filtres']); - $filtres[] = new commonFiltre(__('Année'), 'annee_facture', $settings['filtres']); - - $res = commonPage::barre($filtres, 'filtreDevis', 'devis', $shortcuts); - $res .= commonPage::tMain(); - $res .= commonPage::bh(); - $res .= '
'; - $res .= self::listeDevis(); - $res .= '
'; - $res .= commonPage::bf(); - $res .= commonPage::bMain(); - return $res; - } - - public static function devis_client($args) - { - global $core; - - $res = commonPage::barre(); - $res .= commonPage::tMain(); - $res .= commonPage::bh(); - $res .= '
'; - $res .= self::listeDevis(); - $res .= '
'; - $res .= commonPage::bf(); - $res .= commonPage::bMain(); - return $res; - } - - public static function listeDevis($dashboard = null, $settings = null) - { - global $core; - - if ($core->user->grade == 0) { - return self::listeDevisClient($dashboard, $settings); - } else { - return self::listeDevisEquipier($dashboard, $settings); - } - } - - public static function contextDevis($id) - { - global $core; - $res = '
'; - $res .= '
'; - return $res; - } - - public static function listeDevisEquipier($dashboard = null, $settings = null) - { - global $core; - commonDroits::min(1); - $settings = is_null($settings) ? $core->user->getSettings('devis') : $settings; - $change = is_null($dashboard) ? 'Devis' : 'Dashboard/' . $dashboard; - $context_id = is_null($dashboard) ? 'contextDevis' : 'contextDashboard_' . $dashboard; - - $dao = new extranetDAODevis($core->con); - if (isset($settings['search']) && !is_null($settings['search'])) { - $dao->setSearch($settings['search']); - } - $dao->setFiltres($settings['filtres']); - $liste = $dao->getListe($settings['orderby'], $settings['sens'], $settings['limit']); - $res = self::contextDevis($context_id); - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $i = 0; - foreach ($liste as $devis) { - $droits = extranetDroits::devis($devis, 'w', false); - $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - - if ($devis->status == 0) { - $res .= ''; - } else { - if ($droits) { - $res .= ''; - } else { - $res .= ''; - } - } - - if (in_array($devis->status, array(0, 1)) && $droits) { - $res .= ''; - } else { - $res .= ''; - } - $res .= ''; - if ($devis->status == 0) { - if ($droits) { - $res .= ''; - } else { - $res .= ''; - } - } elseif ($devis->status >= 1) { - $res .= ''; - } - - $res .= ''; - $i++; - } - if (!isset($settings['search']) || is_null($settings['search'])) { - $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; - $res .= ''; - } - $res .= '
' . commonUrl::orderby('#', 'devis_id', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Nom'), 'nom', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Client'), 'client', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Crée par'), 'createur', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Date'), 'date_creation', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Montant HT'), 'total_ht', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Status'), 'status', $settings, 'sort' . $change) . '
' . $devis->devis_id . '' . $devis->nom . '' . $devis->client . '' . $devis->createur . '' . date(__('d/m/Y'), $devis->date_creation) . '' . $devis->total_ht . '' . $core->devis_status[$devis->status] . '' . $core->devis_status[$devis->status] . '' . $core->devis_status[$devis->status] . '' . cubeMedia::image(IMG . '/edit.png') . '' . cubeMedia::image(IMG . '/view.png') . '' . cubeMedia::image(IMG . '/delete.png') . '' . cubeMedia::image(IMG . '/duplicate.png') . '
'; - $res .= commonPage::pager($settings['page'], $dao->count(), $settings['par_page'], 'page' . $change . '/%d'); - $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('devis')); - $res .= '
'; - return $res; - } - - public static function listeDevisClient($dashboard = null, $settings = null) - { - global $core; - cubePage::truePopup(); - - $dao = new extranetDAODevis($core->con); - $settings = $core->user->getSettings('devis'); - $liste = $dao->getListeForEntreprise($core->user->entreprise, $settings['orderby'], $settings['sens']); - $res = ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $i = 0; - foreach ($liste as $devis) { - $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $i++; - } - if (!count($liste)) { - $res .= ''; - } - $res .= '
' . commonUrl::orderby(__('Nom'), 'nom', $settings, 'sortDevis') . '' . commonUrl::orderby(__('Date'), 'date_creation', $settings, 'sortDevis') . '' . commonUrl::orderby(__('Montant HT'), 'total_ht', $settings, 'sortDevis') . '' . commonUrl::orderby(__('Status'), 'status', $settings, 'sortDevis') . '
' . $devis->nom . '' . date(__('d/m/Y'), $devis->date_creation) . '' . $devis->total_ht . '' . $core->devis_status[$devis->status] . '' . cubeMedia::image(IMG . '/view.png') . '
' . __("Vous n'avez pour le moment aucun devis associé à votre compte") . '
'; - return $res; - } - - public static function voirdevis($args) - { - global $core; - // Charge le devis - $dao = new extranetDAODevis($core->con); - $devis = $dao->selectById($args[1]); - - $forceDownload = isset($args[2]) && $args[2]; - - // Vérification des droits en lecture de l'utilisateur - extranetDroits::devis($devis, 'r'); - - if ($forceDownload) { - cubeHTTP::forceDownload('Devis_' . $args[1] . '.pdf'); - } - cubeHTTP::relayNoCache(ROOT . '/docs/devis/' . $args[1] . '.pdf'); - } - - public static function editedevis($args) - { - global $core; - commonDroits::min(1); - $res = commonPage::barre(); - $res .= commonPage::tMain(); - $res .= commonPage::bh(); - $res .= self::formDevis($args[1]); - $res .= commonPage::bf(); - $res .= commonPage::bMain(); - return $res; - } - - public static function formDevis($devis_id = 'new') - { - global $core; - cubePage::autocomplete(); - cubePage::emptyField(); - cubePage::ui('Sortable'); - commonDroits::min(1); - $dao = new extranetDAODevis($core->con); - if ($devis_id == 'new') { - $devis = $dao->cree(); - } else { - $devis = $dao->selectById($devis_id); - } - - $res = '
'; - $res .= '
'; - - $res .= '
'; - // Adresse - $res .= '
'; - if ($devis->devis_id == 'new') { - $default = __('Entrez le nom du client'); - $default_id = ''; - $class = 'empty-field'; - } else { - $default = $devis->client; - $default_id = $devis->client_id; - $class = ''; - } - - $res .= form::field('client_nom', 40, 128, $default, $class); - $res .= form::hidden('client', $default_id); - $res .= '
'; - if ($devis->client_id) { - $res .= commonUrl::adresse($devis->client_id, null, 'devis', $devis->adresse); - } - $res .= '
'; - $res .= '
'; - // Titre - $res .= '
'; - $res .= form::hidden('devis_id', $devis->devis_id); - $res .= form::textarea('nom', 40, 4, $devis->nom); - $res .= '
'; - $res .= '
'; - - $res .= '
'; - $res .= '
'; - // Lignes du devis - $nb_lignes = max(4, count($devis->lignes) + 2); - - for ($i = 0; $i < $nb_lignes; $i++) { - if (isset($devis->lignes[$i])) { - $titre = $devis->lignes[$i]['titre']; - $description = $devis->lignes[$i]['description']; - $montant = $devis->lignes[$i]['montant']; - } else { - $titre = $description = $montant = ''; - } - $res .= '
'; - $res .= '
'; - $res .= form::field(array('montant[]'), 6, 15, $montant) . " €"; - $res .= '
'; - $res .= '
'; - $res .= form::field(array('titre[]'), 105, 256, htmlspecialchars($titre, ENT_QUOTES)) . '

'; - $res .= form::textarea(array('description[]'), 110, 4, $description); - $res .= '
'; - - $res .= '
'; - } - - $res .= '
'; - $res .= '
'; - // $res .= '
' . cubeMedia::spacer(10, 10) . '
'; - // $res .= '
'; - // $res .= ''; - // $res .= ''; - // $res .= ''; - // $res .= ''; - // $res .= '
' . __('De') . '' . $core->user->prenom . ' ' . $core->user->nom . ' <' . $core->user->email . '>
' . __('Sujet') . '' . form::field(array('email[sujet]'), 80, 128, htmlspecialchars($devis->email['sujet'], ENT_QUOTES)) . '
' . __('Corps') . '' . form::textarea(array('email[corps]'), 80, 20, $devis->email['corps']) . '
'; - // $res .= '
'; - $res .= ''; - $res .= '
'; - $res .= '
'; - - return $res; - } - - public static function previewDevis($args) - { - global $core; - - $dao = new extranetDAODevis($core->con); - $devis = $dao->selectById($args[1]); - - $daoUtilisateur = new commonDAOUtilisateur($core->con); - $createur = $devis->createur = $daoUtilisateur->selectById($devis->createur_id); - $client = $devis->client = $daoUtilisateur->selectById($devis->client_id); - - $res = commonPage::barre(); - $res .= commonPage::tMain(); - $res .= commonPage::bh(); - $res .= ''; - $res .= commonPage::bf(); - $res .= commonPage::bh(); - $res .= '
'; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= '
' . __('De') . '' . $createur->prenom . ' ' . $createur->nom . '<' . $createur->email . '>
' . __('A') . '' . $client->prenom . ' ' . $client->nom . '<' . $client->email . '>
' . __('Sujet') . '' . $devis->email['sujet'] . '
' . __('Message') . '' . nl2br($devis->email['corps'] . "\n\n" . $createur->getSignature()) . '
'; - $res .= cubeMedia::spacer(40, 40) . '' . $core->typo->BoutonOK(__('Editer le devis')) . ' '; - $res .= '' . $core->typo->BoutonOK(__('Valider')) . ' '; - //$res .= '' . $core->typo->BoutonOK(__('Valider et envoyer le devis')) . '
'; - $res .= '
'; - $res .= commonPage::bf(); - $res .= commonPage::bMain(); - return $res; - } - - public static function factures($args) - { - global $core; - - if ($core->user->grade == 0) { - return self::factures_client($args); - } - $settings = $core->user->getSettings('factures'); - - commonDroits::min(1); - $shortcuts = array(); - if ($core->user->grade != 3) { - $shortcuts[] = '' . $core->typo->Ajouter('Créer une facture') . ''; - } - $shortcuts[] = '' . cubeMedia::image(IMG . '/print.png') . ''; - $filtres = array(); - $filtres[] = new commonFiltre(__('Créées par'), 'equipier', $settings['filtres']); - $filtres[] = new commonFiltre(__('Status'), 'status_facture', $settings['filtres']); - $filtres[] = new commonFiltre(__('Année'), 'annee_facture', $settings['filtres']); - $res = commonPage::barre($filtres, 'filtreFactures', 'factures', $shortcuts); - $res .= commonPage::tMain(); - $res .= commonPage::bh(); - $res .= '
'; - $res .= self::listeFactures(); - $res .= '
'; - $res .= commonPage::bf(); - $res .= commonPage::bMain(); - return $res; - } - - public static function factures_client($args) - { - global $core; - $res = commonPage::barre(); - $res .= commonPage::tMain(); - $res .= commonPage::bh(); - $res .= '
'; - $res .= self::listeFactures(); - $res .= '
'; - $res .= commonPage::bf(); - $res .= commonPage::bMain(); - return $res; - } - - public static function contextFacture($id) - { - global $core; - $res = '
'; - $res .= '
    '; - $res .= '
  • ' . __("Changer le status de la facture") . '
  • '; - foreach ($core->factures_status as $k => $v) { - if (in_array($k, array(0, 4))) { - continue; - } - if ($k == 2) { - $res .= '
  • ' . $v . '
  • '; - } else { - if ($k == 3) { - $title = ' title="' . __("Êtes-vous certain de vouloir annuler cette facture ? Cette action est irreversible et provoquera la création d'un avoir correpondant.") . '"'; - } else { - $title = ''; - } - $res .= '
  • ' . $v . '
  • '; - } - } - $res .= '
'; - return $res; - } - - public static function listeFactures($dashboard = null, $settings = null) - { - global $core; - if ($core->user->grade == 0) { - return self::listeFacturesClient($dashboard, $settings); - } else { - return self::listeFacturesEquipier($dashboard, $settings); - } - } - - public static function listeFacturesEquipier($dashboard = null, $settings = null) - { - global $core; - cubePage::truePopup(); - cubePage::contextMenu(); - - $settings = is_null($settings) ? $core->user->getSettings('factures') : $settings; - $change = is_null($dashboard) ? 'Facture' : 'Dashboard/' . $dashboard; - $context_id = is_null($dashboard) ? 'contextFacture' : 'contextDashboard_' . $dashboard; - $dao = new extranetDAOFacture($core->con); - if (isset($settings['search']) && !is_null($settings['search'])) { - $dao->setSearch($settings['search']); - } else { - $dao->setFiltres($settings['filtres']); - } - - if ($core->user->grade != 3) { - $liste = $dao->getListe($settings['orderby'], $settings['sens'], $settings['limit']); - } else { - $liste = $dao->getListeCompta($settings['orderby'], $settings['sens'], $settings['limit']); - } - - $res = self::contextFacture($context_id); - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $i = 0; - foreach ($liste as $facture) { - $droits = extranetDroits::facture($facture, 'w', false); - $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - if ($facture->status == 0) { - $res .= ''; - if ($droits) { - $res .= ''; - $res .= ''; - $res .= ''; - } else { - $res .= ''; - } - } elseif ($facture->status >= 1) { - if ($facture->status < 3 || $facture->status == 5) { - if ($droits) { - $res .= ''; - } else { - $res .= ''; - } - } else { - $title = $facture->status == 3 ? __("Voir l'avoir correspondant") : __("Voir la facture annulée correspondante"); - $res .= ''; - } - if ($facture->facture_id > 0) { - if ($droits && $facture->status == 1) { - $res .= ''; - } else { - $res .= ''; - } - $res .= ''; - if ($facture->status != 4 && $core->user->grade != 3) { - $res .= ''; - } else { - $res .= ''; - } - } else { - $res .= ''; - } - } - - $res .= ''; - $i++; - } - if (!isset($settings['search']) || is_null($settings['search'])) { - $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; - $res .= ''; - } - $res .= '
' . commonUrl::orderby('#', 'facture_id', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Nom'), 'nom', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Client'), 'client', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Crée par'), 'createur', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Date'), 'date_creation', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Montant HT'), 'total_ht', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Status'), 'status', $settings, 'sort' . $change) . '
' . $facture->facture_id . '' . $facture->nom . '' . $facture->client . '' . $facture->createur . '' . date(__('d/m/Y'), $facture->date_creation) . '' . $facture->total_ht . '' . $core->factures_status[$facture->status] . '' . cubeMedia::image(IMG . '/edit.png') . '' . cubeMedia::image(IMG . '/delete.png') . '' . $core->factures_status[$facture->status] . '' . $core->factures_status[$facture->status] . '' . $core->factures_status[$facture->status] . '' . '' . cubeMedia::image(IMG . '/edit.png') . '' . cubeMedia::image(IMG . '/view.png') . '' . cubeMedia::image(IMG . '/duplicate.png') . '
'; - if ($core->user->grade != 3) { - $res .= commonPage::pager($settings['page'], $dao->count(), $settings['par_page'], 'page' . $change . '/%d'); - } else { - $res .= commonPage::pager($settings['page'], $dao->countCompta(), $settings['par_page'], 'page' . $change . '/%d'); - } - $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('factures')); - $res .= '
'; - return $res; - } - - public static function listeFacturesClient($dashboard = null, $settings = null) - { - global $core; - cubePage::truePopup(); - $settings = $core->user->getSettings('factures'); - $dao = new extranetDAOFacture($core->con); - $liste = $dao->getListeForEntreprise($core->user->entreprise, $settings['orderby'], $settings['sens'], true); - - $res = ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $i = 0; - foreach ($liste as $facture) { - $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $i++; - } - if (!count($liste)) { - $res .= ''; - } - - $res .= '
' . commonUrl::orderby('#', 'facture_id', $settings, 'sortFacture') . '' . commonUrl::orderby(__('Nom'), 'nom', $settings, 'sortFacture') . '' . commonUrl::orderby(__('Date'), 'date_creation', $settings, 'sortFacture') . '' . commonUrl::orderby(__('Montant HT'), 'total_ht', $settings, 'sortFacture') . '' . commonUrl::orderby(__('Status'), 'status', $settings, 'sortFacture') . '
' . $facture->numeroFacture() . '' . $facture->nom . '' . date(__('d/m/Y'), $facture->date_creation) . '' . $facture->total_ht . '' . $core->factures_status[$facture->status] . '' . cubeMedia::image(IMG . '/view.png') . '
' . __("Vous n'avez pour le moment aucune facture associée à votre compte") . '
'; - return $res; - } - - public static function formFacturePaiement($facture_id) - { - global $core; - $dao = new extranetDAOFacture($core->con); - $facture = $dao->selectById($facture_id); - $date = !$facture->date_paiement ? null : $facture->date_paiement; - - $res = '' . form::hidden('facture_id', $facture_id) . __('Date de paiement') . '' . cubeForm::date('date_paiement', $date) . ''; - $res .= '' . __('Informations de paiement') . '' . form::textarea('informations_paiement', 40, 3, $facture->informations_paiement) . ''; - - return $res; - } - - public static function voirfacture($args) - { - global $core; - // Charge la facture - $dao = new extranetDAOFacture($core->con); - $facture = $dao->selectById($args[1]); - // Vérification des droits de l'utilisateur - extranetDroits::facture($facture, 'r', true); - - cubeHTTP::relayNoCache(ROOT . '/docs/factures/' . $args[1] . '.pdf'); - } - - public static function editefacture($args) - { - global $core; - commonDroits::min(1); - $res = commonPage::barre(); - $res .= commonPage::tMain(); - $res .= commonPage::bh(); - if (isset($args[2])) { - $res .= self::formFacture($args[1], $args[2]); - } else { - $res .= self::formFacture($args[1]); - } - $res .= commonPage::bf(); - $res .= commonPage::bMain(); - return $res; - } - - public static function formFacture($facture_id = 'new', $projet_id = null) - { - global $core; - commonDroits::min(1); - cubePage::autoComplete(); - cubePage::emptyField(); - cubePage::ui('Sortable'); - - $daoProjet = new extranetDAOProjet($core->con); - $dao = new extranetDAOFacture($core->con); - - $projet_id = isset($_POST['projet_id']) && $_POST['projet_id'] > 0 ? $_POST['projet_id'] : $projet_id; - - if ($facture_id == 'new') { - $facture = $dao->cree(); - } elseif ($facture_id == 'ws') { - $facture = $dao->cree(); - $facture->facture_id = 'ws'; - } else { - $facture = $dao->selectById($facture_id); - } - - if (!is_null($projet_id) && $facture_id == 'new') { - $projet = $daoProjet->selectById($projet_id); - $facture->projet_id = $projet->projet_id; - $facture->client = $projet->client; - $facture->projet = $facture->nom = $projet->nom; - $lignes = array(); - foreach ($projet->taches as $tache) { - $lignes[] = array('montant' => $tache->budget, 'titre' => $tache->nom, 'description' => ''); - } - $facture->lignes = $lignes; - } elseif ($facture_id == 'ws') { - if (is_null($projet_id)) { - $daoClient = new commonDAOClient($core->con); - $client = $daoClient->selectById($_POST['client_id']); - $facture->projet_id = 'new'; - $facture->client = $client->rs; - $facture->client_id = $client->utilisateur_id; - $facture->projet = __('Nouveau projet'); - $facture->nom = 'Fluidbook'; - } else { - $projet = $daoProjet->selectById($projet_id); - $facture->projet_id = $projet->projet_id; - $facture->client = $projet->client; - $facture->projet = $facture->nom = $projet->nom; - } - $lignes = array(); - $b = $core->con->select('SELECT * FROM ws.book WHERE bid IN(' . implode(',', array_keys($_POST['book_facture'])) . ')'); - while ($b->fetch()) { - $lignes[] = array('book' => $b->bid, 'montant' => 0, 'titre' => 'Fluidbook « ' . $b->titre . ' »', 'description' => ''); - } - $facture->lignes = $lignes; - } - - $res = '
'; - $res .= '
'; - $res .= '
'; - // Adresse - if ($facture->facture_id == 'new' && is_null($projet_id)) { - $class = 'empty-field'; - $default_id = ''; - $default = __('Entrez le nom du projet ou du client'); - } else { - $class = ''; - $default_id = $facture->projet_id; - $default = $facture->projet_id . ' - ' . $facture->projet . ' (' . $facture->client . ')'; - } - - $res .= '
'; - $res .= form::field('projet_nom', 40, 128, $default, $class); - $res .= form::hidden('projet', $default_id); - $res .= '
'; - if ($facture->projet_id != 'new') { - $res .= commonUrl::adresse(null, $facture->projet_id, 'facture', $facture->adresse); - } else { - $res .= commonUrl::adresse($facture->client_id, null, 'facture', $facture->adresse); - $res .= form::hidden('client', $facture->client_id); - } - - $res .= '
'; - $res .= form::textarea('texte_complementaire', 50, 2, $facture->texte_complementaire); - $res .= '
'; - // Titre - $res .= '
'; - $res .= 'Date : ' . cubeForm::date('date_creation', $facture->date_creation) . '

'; - $res .= form::hidden('facture_id', $facture->facture_id); - $res .= form::textarea('nom', 40, 4, $facture->nom); - $res .= '
'; - $res .= '
'; - - $res .= '
'; - $res .= '
'; - // Lignes du devis - $nb_lignes = max(4, count($facture->lignes) + 2); - - for ($i = 0; $i < $nb_lignes; $i++) { - if (isset($facture->lignes[$i])) { - $titre = $facture->lignes[$i]['titre']; - $description = $facture->lignes[$i]['description']; - $montant = $facture->lignes[$i]['montant']; - $book = isset($facture->lignes[$i]['book']) ? $facture->lignes[$i]['book'] : null; - } else { - $titre = $description = $montant = ''; - } - - $res .= '
'; - - $res .= '
'; - $res .= form::field(array('montant[]'), 6, 15, $montant) . " €"; - if (isset($book) && !is_null($book)) { - $res .= form::hidden(array('book[]'), $book); - } - $res .= '
'; - $res .= '
'; - $res .= form::field(array('titre[]'), 80, 256, htmlspecialchars($titre, ENT_QUOTES)) . '

'; - $res .= form::textarea(array('description[]'), 80, 2, $description); - $res .= '
'; - - $res .= '
'; - } - - $res .= '
'; - $res .= '
'; - $res .= '
' . cubeMedia::spacer(10, 10) . '
'; - $res .= ''; - $res .= '
'; - $res .= '
'; - return $res; - } - - public static function previewFacture($args) - { - global $core; - commonDroits::min(1); - $dao = new extranetDAOFacture($core->con); - $facture = $dao->selectById($args[1]); - - $res = commonPage::barre(); - $res .= commonPage::tMain(); - $res .= commonPage::bh(); - $res .= ''; - - $res .= ''; - $res .= commonPage::bf(); - $res .= commonPage::bMain(); - return $res; - } - - public static function formPrintFactures() - { - global $core; - $last = $core->user->getLastPrint(); - $res = ''; - if ($last['date']) { - $res .= '' . __('Dernière factures imprimées') . ' : ' . __('Factures') . ' ' . $last['pages'] . ' (' . date('Y-m-d', $last['date']) . ')'; - } - $res .= '' . __('Factures à imprimer') . '' . form::field('factures', 20, 64) . ''; - $res .= '' . __('Ex') . ' : 1;3-5;7;9 ' . __('signifie factures') . ' 1,3,4,5,7,9'; - return $res; - } - - public static function chiffres($args) - { - global $core; - commonDroits::min(2); - // $res = commonPage::barre(null, null, null, array('' . $core->typo->Favoris(__('Gérer les charges sur Google Agenda')) . '')); - $res = commonPage::barre(null, null, null, null); - $res .= commonPage::tMain(); - $res .= extranetPageChiffres::listeChiffres(); - $res .= commonPage::bMain(); - return $res; - } - - public static function traduction($args) - { - global $core; - commonDroits::min(1); - $res = commonPage::barre(); - $res .= commonPage::tMain("traduction"); - $res .= commonPage::bh(); - $res .= '
'; - $res .= ''; - $res .= ''; - $res .= '
' . __("Traduction de l'application en anglais") . '
'; - $res .= cubeLang::translationForm(array(ROOT . '/inc/commons', ROOT . '/inc/extranet', ROOT . '/inc/ws', COMPOSER_SOURCES), 'en', ROOT . '/l10n', '', array(), '' . $core->typo->BoutonOK('Enregistrer') . ''); - $res .= '
'; - $res .= commonPage::bf(); - $res .= commonPage::bMain(); - return $res; - } - - public static function cleanTimereport($args) - { - global $core; - - $r = $core->con->select('SELECT * FROM timereport'); - $t = array(); - while ($r->fetch()) { - if (!isset($t[date('Y', $r->date)][$r->utilisateur_id][$r->tache_id])) { - $t[date('Y', $r->date)][$r->utilisateur_id][$r->tache_id] = 0; - } - $t[date('Y', $r->date)][$r->utilisateur_id][$r->tache_id] += $r->heures; - } - - foreach ($t as $annee => $t1) { - if ($annee == date('Y')) { - continue; - } - $limit = cubeDate::limitYear($annee); - $core->con->execute('DELETE FROM timereport WHERE date BETWEEN ' . $limit['start'] . ' AND ' . $limit['end']); - $c = $core->con->openCursor('timereport'); - $c->date = mktime(1, 1, 1, 1, 1, $annee); - foreach ($t1 as $uid => $t2) { - $c->utilisateur_id = $uid; - foreach ($t2 as $tache_id => $heures) { - $c->tache_id = $tache_id; - $c->heures = $heures; - $c->insert(); - } - } - } - } - - public static function rh($args) - { - global $core; - commonDroits::min(2); - $res = commonPage::barre(); - $res .= commonPage::tMain("rh"); - $res .= commonPage::bh(); - $res .= '
'; - $res .= extranetUrl::listeRh(null, null); - $res .= '
'; - $res .= commonPage::bf(); - $res .= commonPage::bMain(); - return $res; - } - - public static function listeRh($dashboard = null, $settings = null) - { - global $core; - commonDroits::min(2); - $settings = is_null($settings) ? $core->user->getSettings('equipiers') : $settings; - $change = is_null($dashboard) ? 'Equipier' : 'Dashboard/' . $dashboard; - $dao = new commonDAOEquipier($core->con); - $liste = $dao->getListe(null, $settings['orderby'], $settings['sens'], $settings['limit']); - - $res = ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - // $res .= ''; - $i = 0; - foreach ($liste as $id => $equipier) { - $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - - $email = strlen($equipier->email) > 20 ? substr($equipier->email, 0, 17) . '...' : $equipier->email; - - $res .= ''; - $res .= ''; - $res .= ''; - // $res .= ''; - // $res .= ''; - $res .= ''; - $i++; - } - /* if (!isset($settings['search']) || is_null($settings['search'])) { - $odd = cubeMath::isOdd($i)?' class="odd"':''; - $res .= ''; - } */ - $res .= '
' . commonUrl::orderby('#', 'utilisateur_id', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Agence'), 'agence', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Nom'), 'nom', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('E-mail'), 'email', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Grade'), 'grade', $settings, 'sort' . $change) . 'Notes
' . $equipier->utilisateur_id . '' . $equipier->agence . '' . $equipier->prenom . ' ' . $equipier->nom . '' . $email . '' . $core->grades[$equipier->grade] . '' . cubeMedia::image(IMG . '/postit.png') . '' . cubeMedia::image(IMG . '/edit.png') . '' . cubeMedia::image(IMG . '/delete.png') . '
'; - $res .= commonPage::pager($settings['page'], $dao->count() , $settings['par_page'], 'page' . $change . '/%d'); - $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('clients')); - $res .= '
'; - return $res; - } + public static function clients($args) + { + global $core; + cubePage::truePopup(); + cubePage::autoComplete(); + cubePage::emptyfield(); + commonDroits::min(1); + $settings = $core->user->getSettings('clients'); + + $shortcuts = array(); + $shortcuts[] = '' . $core->typo->Ajouter('Créer un nouveau client') . ''; + $filtres = array(); + $filtres[] = new commonFiltre(__('Ayant un projet'), 'status_client_projet', $settings['filtres']); + $filtres[] = new commonFiltre(__('Ayant des impayés'), 'impaye', $settings['filtres']); + $res = commonPage::barre($filtres, 'filtreClients', 'clients', $shortcuts); + $res .= commonPage::tMain(); + $res .= commonPage::bh(); + $res .= '
'; + $res .= self::listeClients(); + $res .= '
'; + $res .= commonPage::bf(); + $res .= commonPage::bMain(); + return $res; + } + + public static function listeClients($dashboard = null, $settings = null) + { + global $core; + commonDroits::min(1); + $settings = is_null($settings) ? $core->user->getSettings('clients') : $settings; + $change = is_null($dashboard) ? 'Client' : 'Dashboard/' . $dashboard; + $dao = new commonDAOEntreprise($core->con); + if (isset($settings['search']) && !is_null($settings['search'])) { + $dao->setSearch($settings['search']); + } + $dao->setFiltres($settings['filtres']); + $liste = $dao->getListe($settings['orderby'], $settings['sens'], $settings['limit']); + + $res = ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $i = 0; + foreach ($liste as $id => $client) { + if (!is_array($client->contacts)) { + continue; + } + $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; + $res .= ''; + $res .= ''; + $res .= ''; + $contacts = array(); + + foreach ($client->contacts as $c) { + $contacts[] = '' . $c->prenom . ' ' . $c->nom . ''; + } + + $res .= ''; + $res .= ''; + $res .= ''; + if ($client->impaye) { + $res .= ''; + } else { + $res .= ''; + } + + $res .= ''; + if (is_null($client->ca)) { + $res .= ''; + } else { + $res .= ''; + } + $res .= ''; + $i++; + } + if (!isset($settings['search']) || is_null($settings['search'])) { + $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; + $res .= ''; + } + $res .= '
' . commonUrl::orderby('#', 'entreprise_id', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Raison sociale'), 'nom', $settings, 'sort' . $change) . '' . __('Contacts') . '' . __('Type') . '' . commonUrl::orderby('CA', 'ca', $settings, 'sort' . $change) . '' . commonUrl::orderby('Impayés', 'impaye', $settings, 'sort' . $change) . '
' . $client->entreprise_id . '' . $client->nom . '' . implode(', ', $contacts) . '' . $core->client_type[$client->type] . ''; + if ($client->ca) { + $res .= '' . number_format($client->ca, 0, ',', ' ') . ''; + } + + $res .= '' . number_format($client->impaye, 0, '.', ' ') . '' . cubeMedia::image(IMG . '/edit.png') . '' . cubeMedia::image(IMG . '/delete.png') . '
'; + $res .= commonPage::pager($settings['page'], $dao->count(), $settings['par_page'], 'page' . $change . '/%d'); + $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('clients')); + $res .= '
'; + return $res; + } + + public static function clientDetailCa($entreprise_id) + { + global $core; + $dao = new commonDAOEntreprise($core->con); + $annees = $dao->getCaDetails($entreprise_id); + $res = ''; + $i = 0; + foreach ($annees as $annee => $ca) { + $class = cubeMath::isOdd($i) ? ' class="odd"' : ''; + $res .= '' . $annee . '' . number_format($ca, 0, ',', ' ') . ' €'; + $i++; + } + return $res; + } + + public static function clientDetailImpaye($entreprise_id) + { + global $core; + $dao = new extranetDAOFacture($core->con); + $daoClient = new commonDAOEntreprise($core->con); + $factures = $dao->getImpayesOfClient($entreprise_id); + $client = $daoClient->selectById($entreprise_id); + $res = ''; + $i = 0; + foreach ($factures as $facture) { + $class = cubeMath::isOdd($i) ? ' class="odd"' : ''; + $res .= ''; + $res .= '' . $facture->facture_id . ''; + $res .= ''; + if ($facture->facture_id > 0) { + $res .= '' . $facture->nom . ''; + } else { + $res .= $facture->nom; + } + $res .= ''; + $tva = cubeTaxes::tva($client->pays); + $res .= '' . number_format($facture->total_ht, 0, ',', '') . ' €'; + if ($tva > 0 && $tva != 'UE') { + $res .= ' HT ' . number_format(cubePrices::HTtoTTC($facture->total_ht, $tva), 2, ',', '') . ' € TTC'; + } else { + $res .= ''; + } + $res .= ''; + $i++; + } + return $res; + } + + public static function formClient($entreprise_id = 'new') + { + global $core; + commonDroits::min(1); + $dao = new commonDAOEntreprise($core->con); + $daoUtilisateur = new commonDAOUtilisateur($core->con); + if ($entreprise_id == 'new') { + $client = $dao->cree(); + } else { + $client = $dao->selectById($entreprise_id); + } + + $res = '' . __('Numéro de client') . '' . form::hidden('entreprise_id', $client->entreprise_id) . '' . $client->entreprise_id . ''; + $res .= '' . __('Raison sociale') . '' . form::field('nom', 30, 128, $client->nom) . ''; + $res .= '' . __('Adresse') . '' . form::textarea('adresse', 40, 3, $client->adresse) . ''; + $res .= '' . __('Code postal') . '' . form::field('code_postal', 10, 20, $client->code_postal) . ''; + $res .= '' . __('Ville') . '' . form::field('ville', 30, 128, $client->ville) . ''; + $res .= '' . __('Pays') . '' . form::combo('pays', cubeCountry::getList(), $client->pays) . ''; + $res .= '' . __('Adresse de facturaton') . '' . form::textarea('adresse_facturation', 40, 3, $client->adresse_facturation) . ''; + $res .= '' . __('Site internet') . '' . form::field('site', 30, 128, $client->site) . ''; + $res .= '' . __('Numéro de TVA intracommunautaire') . '' . form::field('tva_intra', 15, 64, $client->tva_intra) . ''; + $res .= '' . __('Type de société') . '' . form::combo('type', array_flip($core->client_type), $client->type) . ''; + $res .= '' . __('Fluidbook Workshop') . ''; + $res .= '' . __('Grade') . '' . form::combo('ws_grade', array_flip($core->ws_grades), $client->ws_grade) . ''; + if ($entreprise_id == 'new' || !$client->ws_admin) { + $class = 'empty-field'; + $default_id = ''; + $default = __("Entrez le nom du revendeur ou de l'administrateur"); + } else { + $class = ''; + $default_id = $client->ws_admin; + $wsa = $daoUtilisateur->selectById($client->ws_admin, 'utilisateurs_entreprise'); + $default = $wsa->utilisateur_id . ' - ' . $wsa->rs . ' (' . $wsa->prenom . ' ' . $wsa->nom . ')'; + } + + $d = $dao->getWSDatas($entreprise_id); + + $res .= '' . __('Revendeur / Administrateur') . '' . form::field('ws_admin_nom', 60, 128, $default, $class) . form::hidden('ws_admin', $default_id) . ''; + if (!is_null($d)) { + $res .= '' . __('Entité facturable') . '' . $d->facturable->prenom . ' ' . $d->facturable->nom . ' (' . $d->facturable->rs . ')'; + $res .= '' . __('Administrateur responsable') . '' . $d->administrateur->prenom . ' ' . $d->administrateur->nom . ' (' . $d->administrateur->rs . ')'; + } + if ($entreprise_id == 'new') { + $daoContact = new commonDAOClient($core->con); + $contact = $daoContact->cree(); + $res .= '' . __('Contact') . ''; + $res .= '' . __('Adresse e-mail') . '' . form::field(array('contact[email]'), 30, 128, $contact->email) . ''; + $res .= '' . __('Mot de passe') . '' . form::field(array('contact[password]'), 30, 128, $contact->password) . ''; + $res .= '' . __('Prénom') . '' . form::field(array('contact[prenom]'), 30, 128, $contact->prenom) . ''; + $res .= '' . __('Nom') . '' . form::field(array('contact[nom]'), 30, 128, $contact->nom) . ''; + $res .= '' . __('Téléphone') . '' . form::field(array('contact[telephone]'), 20, 128, $contact->telephone) . ''; + $res .= '' . __('Mobile') . '' . form::field(array('contact[mobile]'), 20, 128, $contact->mobile) . ''; + $res .= '' . __('Fax') . '' . form::field(array('contact[fax]'), 20, 128, $contact->fax) . ''; + $res .= '' . __('Langue') . '' . form::combo(array('contact[lang]'), cubeLang::getAvailableLangs(true), $contact->lang) . ''; + } + return $res; + } + + public static function listeContacts($entreprise_id) + { + global $core; + commonDroits::min(1); + $dao = new commonDAOEntreprise($core->con); + $contacts = $dao->getContacts($entreprise_id); + + $res = ''; + $res .= ''; + $i = 0; + foreach ($contacts as $contact) { + $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; + $res .= ''; + $res .= ''; + $res .= ''; + //$res .= ''; + $res .= ''; + $i++; + } + $res .= '
' . $core->typo->Contact('Ajouter un contact') . '
' . trim($contact->prenom . ' ' . $contact->nom) . '' . $contact->email . 'FTPSe connecter comme ...' . cubeMedia::image(IMG . '/edit.png') . '
'; + return $res; + } + + public static function formContact($client_id = 'new', $entreprise_id = null) + { + global $core; + commonDroits::min(1); + + $dao = new commonDAOClient($core->con); + if ($client_id == 'new') { + $client = $dao->creeFromEntreprise($entreprise_id); + } else { + $client = $dao->selectById($client_id); + } + + $res = '' . __('Numéro de client') . '' . form::hidden('grade', 0) . form::hidden('entreprise', $client->entreprise) . form::hidden('utilisateur_id', $client->utilisateur_id) . '' . $client->utilisateur_id . ''; + $res .= '' . __('Login activé') . '' . form::hidden('enabled', 0) . form::checkbox('enabled', 1, $client->enabled) . ''; + $res .= '' . __('Adresse e-mail') . '' . form::field('email', 30, 128, $client->email) . ''; + //$res .= '' . __('Mot de passe') . '' . form::field('password', 30, 128, $client->password) . ''; + $res .= '' . __('Prénom du contact') . '' . form::field('prenom', 30, 128, $client->prenom) . ''; + $res .= '' . __('Nom du contact') . '' . form::field('nom', 30, 128, $client->nom) . ''; + $res .= '' . __('Adresse') . '' . form::textarea('adresse', 40, 3, $client->adresse) . ''; + $res .= '' . __('Code postal') . '' . form::field('code_postal', 10, 20, $client->code_postal) . ''; + $res .= '' . __('Ville') . '' . form::field('ville', 30, 128, $client->ville) . ''; + $res .= '' . __('Pays') . '' . form::combo('pays', cubeCountry::getList(), $client->pays) . ''; + $res .= '' . __('Téléphone') . '' . form::field('telephone', 20, 128, $client->telephone) . ''; + $res .= '' . __('Mobile') . '' . form::field('mobile', 20, 128, $client->mobile) . ''; + $res .= '' . __('Fax') . '' . form::field('fax', 20, 128, $client->fax) . ''; + $res .= '' . __('Langue') . '' . form::combo('lang', cubeLang::getAvailableLangs(true), $client->lang) . ''; + if ($client_id != 'new') { + $res .= '' . cubeMedia::spacer(10, 10) . ''; + $res .= '' . __('FTP') . ''; + //$res .= '' . __('Se connecter comme ...') . ''; + $res .= '' . __("Paramètres de connexion à l'extranet") . '' . __('Adresse') . ' : https://extranet.cubedesigners.com/
' . __("Nom d'utilisateur") . ' : ' . $client->email . '
' . __('Mot de passe') . ' : ' . __('Utiliser la fonction "Mot de passe oublié" pour le créer ou le réinitialiser') . ''; + $res .= '' . cubeMedia::spacer(10, 10) . ''; + // $res .= '' . __("Paramètres de connexion au FTP") . '' . __('Serveur FTP') . ' : extranet.cubedesigners.com (ftp://extranet.cubedesigners.com)
' . __("Nom d'utilisateur") . ' : ' . $client->email . '
' . __('Mot de passe') . ' : ' . $client->password . ''; + } + return $res; + } + + public static function formNotes($utilisateur_id) + { + global $core; + commonDroits::min(1); + $dao = new commonDAOUtilisateur($core->con); + $utilisateur = $dao->selectById($utilisateur_id); + $res = '' . form::hidden('utilisateur_id', $utilisateur_id) . ''; + $res .= '' . form::textarea('notes', 100, 30, $utilisateur->notes) . ''; + $res .= ''; + return $res; + } + + public static function projets($args) + { + global $core; + commonDroits::min(0.5); + + $settings = $core->user->getSettings('projets'); + + $shortcuts = array(); + if ($core->user->grade >= 1) { + $shortcuts[] = '' . $core->typo->Ajouter('Créer un projet') . ''; + } + + $filtres = array(); + $filtres[] = new commonFiltre(__('Crée par'), 'equipier', $settings['filtres']); + $filtres[] = new commonFiltre(__('Status'), 'status_projet', $settings['filtres']); + $filtres[] = new commonFiltre(__('Année'), 'annee', $settings['filtres']); + + $res = commonPage::barre($filtres, 'filtreProjet', 'projets', $shortcuts); + $res .= commonPage::tMain(); + $res .= commonPage::bh(); + $res .= '
'; + $res .= self::listeProjets(); + $res .= '
'; + $res .= commonPage::bf(); + $res .= commonPage::bMain(); + return $res; + } + + public static function listeProjets($dashboard = null, $settings = null) + { + global $core; + commonDroits::min(0.5); + $settings = is_null($settings) ? $core->user->getSettings('projets') : $settings; + $change = is_null($dashboard) ? 'Projet' : 'Dashboard/' . $dashboard; + + $res = ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + if ($core->user->grade >= 1) { + $res .= ''; + $res .= ''; + $res .= ''; + } + $res .= ''; + $res .= ''; + + $dao = new extranetDAOProjet($core->con); + $dao->setFiltres($settings['filtres']); + if (isset($settings['search']) && !is_null($settings['search'])) { + $dao->setSearch($settings['search']); + } + $liste = $dao->getListe($settings['orderby'], $settings['sens'], $settings['limit']); + + $i = 0; + foreach ($liste as $projet) { + $droits = extranetDroits::projet($projet, false); + + $projet->progression = !$projet->progression ? '-' : $projet->progression . '%'; + $projet->jours_prevus = !$projet->jours_prevus ? '-' : $projet->jours_prevus; + $projet->jours_consommes = !$projet->jours_consommes ? '-' : $projet->jours_consommes; + + $projet->budget = !$projet->budget || !$droits ? '-' : $projet->budget; + $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + if ($droits) { + $res .= ''; + } else { + $res .= ''; + } + + $rf = $projet->rapport_facturation; + if ($projet->budget == '-') { + $rapport_facturation = '-'; + } elseif (!$rf) { + $rapport_facturation = __('Non'); + } elseif ($rf == 1) { + $rapport_facturation = __('Oui'); + } elseif ($rf < 1) { + $rapport_facturation = __('Partie'); + } elseif ($rf > 1) { + $rapport_facturation = __('Trop'); + } + + $rp = $projet->rapport_paiement; + if ($projet->budget == '-') { + $rapport_paiement = '-'; + } elseif (!$rp) { + $rapport_paiement = __('Non'); + } elseif ($rp == 1) { + $rapport_paiement = __('Oui'); + } elseif ($rp < 1) { + $rapport_paiement = __('Partie'); + } elseif ($rp > 1) { + $rapport_paiement = __('Trop'); + } + + if ($core->user->grade >= 1) { + $res .= ''; + $res .= ''; + + $res .= ''; + } + // $res .= ''; + // $res .= ''; + $res .= ''; + $res .= ''; + + $res .= ''; + $i++; + } + if (!isset($settings['search']) || is_null($settings['search'])) { + $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; + $res .= ''; + } + $res .= '
' . commonUrl::orderby('#', 'projet_id', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Projet'), 'nom', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Client'), 'client', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Année'), 'annee_fin', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Chef'), 'chef', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Status'), 'status', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Facturé'), 'rapport_facturation', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Payé'), 'rapport_paiement', $settings, 'sort' . $change) . '' . commonUrl::orderby('B', 'budget', $settings, 'sort' . $change) . '' . commonUrl::orderby('Pr', 'progression', $settings, 'sort' . $change) . '
' . $projet->projet_id . '' . $projet->nom . '' . $projet->client . '' . $projet->annee_fin . '' . $projet->chef . '' . $core->projets_status[$projet->status] . '' . $core->projets_status[$projet->status] . ''; + if ($projet->status == 1 && !$rf) { + $res .= '' . $rapport_facturation . ''; + } else { + $res .= $rapport_facturation; + } + $res .= '' . $rapport_paiement . '' . $projet->budget . '' . $projet->jours_prevus . '' . $projet->jours_consommes . '' . $projet->progression . '' . cubeMedia::image(IMG . '/view.png') . '
'; + $res .= commonPage::pager($settings['page'], $dao->count(), $settings['par_page'], 'page' . $change . '/%d'); + $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('projets')); + $res .= '
'; + return $res; + } + + public static function projet($args) + { + global $core; + commonDroits::min(0.5); + + $shortcuts = array(); + if ($core->user->grade >= 1) { + $shortcuts[] = '' . $core->typo->Ajouter('Créer une tâche') . ''; + $shortcuts[] = '' . $core->typo->Ajouter('Créer une tâche sous-traitée') . ''; + } + + $res = commonPage::barre(null, null, null, $shortcuts); + $res .= commonPage::tMain(); + $res .= commonPage::bh(); + $res .= '
'; + $res .= self::listeProjet($args[1]); + $res .= '
'; + $res .= commonPage::bf(); + $res .= commonPage::bMain(); + return $res; + } + + public static function listeProjet($projet_id) + { + global $core; + commonDroits::min(0.5); + + $res = ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + if ($core->user->grade >= 1) { + $res .= ''; + } + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + + $dao = new extranetDAOProjet($core->con); + $projet = $dao->selectById($projet_id); + + $hasFacture = $dao->hasFacture($projet_id); + + $droits = extranetDroits::projet($projet, false); + + $projet->progression = !$projet->progression ? '-' : $projet->progression . '%'; + $projet->jours_prevus = !$projet->jours_prevus ? '-' : $projet->jours_prevus; + $projet->jours_consommes = !$projet->jours_consommes ? '-' : $projet->jours_consommes; + + $projet->budget = !$projet->budget || !$droits ? '-' : $projet->budget; + + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + if ($droits) { + $res .= ''; + } else { + $res .= ''; + } + if ($core->user->grade >= 1) { + $res .= ''; + } + $res .= ''; + $res .= ''; + $res .= ''; + if ($droits) { + $res .= ''; + if (!count($projet->taches) && !$hasFacture) { + $res .= ''; + } else { + $res .= ''; + } + } else { + $res .= ''; + } + $res .= ''; + $i = 1; + foreach ($projet->taches as $tache) { + $tache->budget = !$tache->budget || !$droits ? '-' : $tache->budget; + $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + if (count($tache->books)) { + $n = array(); + foreach ($tache->books as $b) { + $n[] = '' . $b . ''; + } + $res .= ''; + } else { + $res .= ''; + } + + if ($core->user->grade >= 1) { + $res .= ''; + } + + if ($tache instanceof extranetTacheNormale) { + $progression = !$tache->progression ? '-' : $tache->progression . '%'; + $jours_prevus = !$tache->jours_prevus ? '-' : $tache->jours_prevus; + $jours_consommes = !$tache->jours_consommes ? '-' : $tache->jours_consommes; + $res .= ''; + $res .= ''; + $res .= ''; + if ($droits) { + $res .= ''; + } else { + $res .= ''; + } + } else { + $res .= ''; + if ($droits) { + $res .= ''; + } else { + $res .= ''; + } + } + + $res .= ''; + + $res .= ''; + $i++; + } + $res .= '
#' . __('Projet') . ' / ' . __('Tâche') . '' . __('Client') . ' / ' . __('Catégorie') . '' . __('Année') . '' . __('Chef de projet') . '' . __('Status') . 'BPlCoPr
' . $projet->projet_id . '' . $projet->nom . '' . $projet->client . '' . $projet->annee_fin . '' . $projet->chef . '' . $core->projets_status[$projet->status] . '' . $core->projets_status[$projet->status] . '' . $projet->budget . '' . $projet->jours_prevus . '' . $projet->jours_consommes . '' . $projet->progression . '' . cubeMedia::image(IMG . '/edit.png') . '' . cubeMedia::image(IMG . '/delete.png') . '
T' . $i . '' . $tache->nom . '' . $core->categories[$tache->categorie] . 'Fluidbooks # ' . implode(', ', $n) . '' . $tache->budget . '' . $jours_prevus . '' . $jours_consommes . '' . $progression . '' . cubeMedia::image(IMG . '/edit.png') . '' . __('Tâche sous-traitée') . '' . cubeMedia::image(IMG . '/edit.png') . ''; + if ($core->user->grade >= 1) { + $res .= '' . cubeMedia::image(IMG . '/delete.png') . ''; + } + $res .= '
'; + return $res; + } + + public static function formProjet($projet_id = 'new') + { + global $core; + commonDroits::min(1); + + $dao = new extranetDAOProjet($core->con); + if ($projet_id == 'new') { + $projet = $dao->cree($core->user->utilisateur_id); + } else { + $projet = $dao->selectById($projet_id); + } + + $daoClient = new commonDAOClient($core->con); + $clients = $daoClient->getListe(); + + $listeClients = array(); + foreach ($clients as $client) { + if (empty($client->utilisateur_id)) { + continue; + } + $listeClients[trim($client->rs) . ' (' . $client->prenom . ' ' . $client->nom . ')'] = $client->utilisateur_id; + } + ksort($listeClients); + $listeClients = array_merge(array('--' => ''), $listeClients); + + $daoEquipier = new commonDAOEquipier($core->con); + $equipiers = $daoEquipier->getListe(); + + $listeEquipiers = array(); + foreach ($equipiers as $equipier) { + $listeEquipiers[$equipier->prenom . ' ' . $equipier->nom . ' (' . $equipier->agence . ')'] = $equipier->utilisateur_id; + } + + $daoDevis = new extranetDAODevis($core->con); + $devis = $daoDevis->getListeValidesLibres($projet_id); + $listeDevis = array('--' => 0); + foreach ($devis as $id => $dev) { + $listeDevis[$dev->nom] = $dev->devis_id; + } + + $res = '' . __('Numéro de projet') . '' . form::hidden('projet_id', $projet->projet_id) . '' . $projet->projet_id . ''; + $res .= '' . __('Nom du projet') . '' . form::textarea('nom', 50, 3, html::escapeHTML($projet->nom)) . ''; + $res .= '' . __('Chef de projet') . ''; + if ($core->user->grade > 1) { + $res .= form::combo('chef', $listeEquipiers, $projet->chef_id); + } else { + $res .= form::hidden('chef', $projet->chef_id) . ' ' . $projet->chef; + } + $res .= ''; + $res .= '' . __('Date de début') . '' . cubeForm::dateFree('date_debut', $projet->date_debut) . ''; + $res .= '' . __('Deadline') . '' . cubeForm::dateFree('deadline', $projet->deadline) . ''; + $res .= '' . __('Date de fin') . '' . cubeForm::dateFree('date_fin', $projet->date_fin) . ''; + $res .= '' . __('Client') . '' . form::combo('client', $listeClients, $projet->client_id) . ''; + $res .= '' . __('Devis') . '' . form::combo('devis', $listeDevis, $projet->devis) . ''; + return $res; + } + + public static function formTache($tache) + { + global $core; + commonDroits::min(1); + + $res = '' . __('Numéro de tâche') . '' . form::hidden('projet', $tache->projet) . form::hidden('tache_id', $tache->tache_id) . '' . $tache->tache_id . ''; + $res .= '' . __('Catégorie') . '' . form::combo('categorie', array_flip($core->categories), $tache->categorie) . ''; + $res .= '' . __('Nom') . '' . form::textarea('nom', 50, 3, html::escapeHTML($tache->nom)) . ''; + + return $res; + } + + public static function formTacheNormale($tache_id, $projet_id = null) + { + global $core; + commonDroits::min(1); + $dao = new extranetDAOTache($core->con); + if ($tache_id == 'new') { + $tache = $dao->creeNormale(); + $tache->projet = $projet_id; + } else { + $tache = $dao->selectById($tache_id); + } + $res = self::formTache($tache); + $res .= '' . __('Taux journalier') . '' . form::field('taux_journalier', 6, 6, $tache->taux_journalier) . ''; + $res .= '' . __('Budget') . '' . form::hidden('type', '0') . form::field('budget', 6, 6, $tache->budget) . ''; + return $res; + } + + public static function formTacheSousTraitee($tache_id, $projet_id = null) + { + global $core; + commonDroits::min(1); + $dao = new extranetDAOTache($core->con); + if ($tache_id == 'new') { + $tache = $dao->creeSousTraitee(); + $tache->projet = $projet_id; + } else { + $tache = $dao->selectById($tache_id); + } + $res = self::formTache($tache); + $res .= '' . __('Budget') . '' . form::hidden('type', '1') . form::field('budget', 6, 6, $tache->budget) . ''; + return $res; + } + + public static function timereport($args) + { + global $core; + commonDroits::min(0.5); + $settings = $core->user->getSettings('timereport'); + $res = ''; + if (!isset($_GET['light'])) { + $filtres = array(); + $filtres[] = new commonFiltre(__('Participants'), 'equipier_participe', $settings['filtres']); + $res .= commonPage::barre($filtres, 'filtreTimereport', 'timereport', null); + $res .= commonPage::tMain(); + $res .= commonPage::bh(); + } + $res .= '
'; + $res .= self::listeTimereport(); + $res .= '
'; + if (!isset($_GET['light'])) { + $res .= commonPage::bf(); + $res .= commonPage::bMain(); + } + return $res; + } + + public static function listeTimereport($dashboard = null, $settings = null) + { + global $core; + commonDroits::min(0.5); + // Récupère la liste des projets + $settings = is_null($settings) ? $core->user->getSettings('timereport') : $settings; + $change = is_null($dashboard) ? 'Timereport' : 'Dashboard/' . $dashboard; + + $dao = new extranetDAOProjet($core->con); + if (isset($settings['search']) && !is_null($settings['search'])) { + $dao->setSearch($settings['search']); + } + $dao->setFiltres($settings['filtres']); + $liste = $dao->getProjetsForTimereport($settings['orderby'], $settings['sens'], $settings['limit'], $core->user->utilisateur_id); + // Extrait la liste des tâches + $taches = array(); + foreach ($liste as $id => $projet) { + foreach ($projet->taches as $tache) { + if ($tache instanceof extranetTacheNormale) { + $taches[] = $tache->tache_id; + } + } + } + // Fixe les limites des jours à afficher + $time = cubeDate::round(null, 'd'); // aujourd'hui + $avant = $time - (3600 * 24 * 15); // 15 jours avant + $apres = $time; // aujourd'hui + // Récupère la liste des timereports à afficher + $daoTimereport = new extranetDAOTimereport($core->con); + $timereports = $daoTimereport->getListe($taches, $core->user->utilisateur_id, array('start' => $avant, 'end' => $apres)); + // Affiche le tableau + $res = ''; + $res .= ''; + $res .= ''; + $res .= ''; + for ($date = $avant; $date <= $apres; $date += 3600 * 24) { + $res .= ''; + } + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + + foreach ($liste as $projet) { + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + for ($date = $avant; $date <= $apres; $date += 3600 * 24) { + $cc = self::getClassOfDay($date); + $class = ($cc == '') ? '' : ' class="' . $cc . '"'; + $res .= ''; + } + $projet->progression = !$projet->progression ? '-' : $projet->progression . '%'; + $projet->jours_prevus = !$projet->jours_prevus ? '-' : $projet->jours_prevus; + $projet->jours_consommes = !$projet->jours_consommes ? '-' : $projet->jours_consommes; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $i = 1; + foreach ($projet->taches as $tache) { + if ($tache instanceof extranetTacheNormale) { + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + for ($date = $avant; $date <= $apres; $date += (3600 * 24)) { + $hh = isset($timereports[$tache->tache_id][$date]) ? $timereports[$tache->tache_id][$date]->heures : ''; + $c = ($hh == '') ? '' : 'filled'; + $cc = trim(self::getClassOfDay($date) . ' ' . $c); + $class = ($cc == '') ? '' : ' class="' . $cc . '"'; + $res .= '' . form::field(array('timereport', 't_' . $date . '_' . $tache->tache_id), 1, 3, $hh, 'timereport_field') . ''; + } + $tache->progression = !$tache->progression ? '-' : $tache->progression . '%'; + $tache->jours_prevus = !$tache->jours_prevus ? '-' : $tache->jours_prevus; + $tache->jours_consommes = !$tache->jours_consommes ? '-' : $tache->jours_consommes; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $i++; + } + } + } + + if (!isset($settings['search']) || is_null($settings['search'])) { + $res .= ''; + } + $res .= '
' . commonUrl::orderby('#', 'projet_id', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Projet'), 'nom', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Client'), 'client', $settings, 'sort' . $change) . '' . date('d', $date) . '' . cubeMedia::spacer(16, 1, '', 'spacer') . '' . commonUrl::orderby('Pr', 'progression', $settings, 'sort' . $change) . '' . commonUrl::orderby('Co', 'jours_consommes', $settings, 'sort' . $change) . '' . commonUrl::orderby('Pl', 'jours_prevus', $settings, 'sort' . $change) . '
' . $projet->projet_id . '' . $projet->nom . '' . $projet->client . '' . $projet->progression . '' . $projet->jours_consommes . '' . $projet->jours_prevus . '
T' . $i . '' . $tache->nom . '' . $core->categories[$tache->categorie] . '' . $tache->progression . '' . $tache->jours_consommes . '' . $tache->jours_prevus . '
'; + $res .= commonPage::pager($settings['page'], $dao->countActifs(), $settings['par_page'], 'page' . $change . '/%d'); + $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('projets')); + $res .= '
'; + return $res; + } + + public static function getClassOfDay($date) + { + $aujourdhui = cubeDate::round(null, 'd'); + $highlight = ($date == $aujourdhui); + $we = (date('N', $date) >= 6); + if ($highlight) { + return 'highlight'; + } + if ($we) { + return 'we'; + } + return ''; + } + + public static function devis($args) + { + global $core; + cubePage::truePopup(); + cubePage::contextMenu(); + + if ($core->user->grade == 0) { + return self::devis_client($args); + } + $settings = $core->user->getSettings('devis'); + commonDroits::min(1); + + $shortcuts = array(); + $shortcuts[] = '' . $core->typo->Ajouter('Créer un devis') . ''; + + $filtres = array(); + $filtres[] = new commonFiltre(__('Créées par'), 'equipier', $settings['filtres']); + $filtres[] = new commonFiltre(__('Status'), 'status_devis', $settings['filtres']); + $filtres[] = new commonFiltre(__('Année'), 'annee_facture', $settings['filtres']); + + $res = commonPage::barre($filtres, 'filtreDevis', 'devis', $shortcuts); + $res .= commonPage::tMain(); + $res .= commonPage::bh(); + $res .= '
'; + $res .= self::listeDevis(); + $res .= '
'; + $res .= commonPage::bf(); + $res .= commonPage::bMain(); + return $res; + } + + public static function devis_client($args) + { + global $core; + + $res = commonPage::barre(); + $res .= commonPage::tMain(); + $res .= commonPage::bh(); + $res .= '
'; + $res .= self::listeDevis(); + $res .= '
'; + $res .= commonPage::bf(); + $res .= commonPage::bMain(); + return $res; + } + + public static function listeDevis($dashboard = null, $settings = null) + { + global $core; + + if ($core->user->grade == 0) { + return self::listeDevisClient($dashboard, $settings); + } else { + return self::listeDevisEquipier($dashboard, $settings); + } + } + + public static function contextDevis($id) + { + global $core; + $res = '
'; + $res .= '
'; + return $res; + } + + public static function listeDevisEquipier($dashboard = null, $settings = null) + { + global $core; + commonDroits::min(1); + $settings = is_null($settings) ? $core->user->getSettings('devis') : $settings; + $change = is_null($dashboard) ? 'Devis' : 'Dashboard/' . $dashboard; + $context_id = is_null($dashboard) ? 'contextDevis' : 'contextDashboard_' . $dashboard; + + $dao = new extranetDAODevis($core->con); + if (isset($settings['search']) && !is_null($settings['search'])) { + $dao->setSearch($settings['search']); + } + $dao->setFiltres($settings['filtres']); + $liste = $dao->getListe($settings['orderby'], $settings['sens'], $settings['limit']); + $res = self::contextDevis($context_id); + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $i = 0; + foreach ($liste as $devis) { + $droits = extranetDroits::devis($devis, 'w', false); + $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + + if ($devis->status == 0) { + $res .= ''; + } else { + if ($droits) { + $res .= ''; + } else { + $res .= ''; + } + } + + if (in_array($devis->status, array(0, 1)) && $droits) { + $res .= ''; + } else { + $res .= ''; + } + $res .= ''; + if ($devis->status == 0) { + if ($droits) { + $res .= ''; + } else { + $res .= ''; + } + } elseif ($devis->status >= 1) { + $res .= ''; + } + + $res .= ''; + $i++; + } + if (!isset($settings['search']) || is_null($settings['search'])) { + $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; + $res .= ''; + } + $res .= '
' . commonUrl::orderby('#', 'devis_id', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Nom'), 'nom', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Client'), 'client', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Crée par'), 'createur', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Date'), 'date_creation', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Montant HT'), 'total_ht', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Status'), 'status', $settings, 'sort' . $change) . '
' . $devis->devis_id . '' . $devis->nom . '' . $devis->client . '' . $devis->createur . '' . date(__('d/m/Y'), $devis->date_creation) . '' . $devis->total_ht . '' . $core->devis_status[$devis->status] . '' . $core->devis_status[$devis->status] . '' . $core->devis_status[$devis->status] . '' . cubeMedia::image(IMG . '/edit.png') . '' . cubeMedia::image(IMG . '/view.png') . '' . cubeMedia::image(IMG . '/delete.png') . '' . cubeMedia::image(IMG . '/duplicate.png') . '
'; + $res .= commonPage::pager($settings['page'], $dao->count(), $settings['par_page'], 'page' . $change . '/%d'); + $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('devis')); + $res .= '
'; + return $res; + } + + public static function listeDevisClient($dashboard = null, $settings = null) + { + global $core; + cubePage::truePopup(); + + $dao = new extranetDAODevis($core->con); + $settings = $core->user->getSettings('devis'); + $liste = $dao->getListeForEntreprise($core->user->entreprise, $settings['orderby'], $settings['sens']); + $res = ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $i = 0; + foreach ($liste as $devis) { + $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $i++; + } + if (!count($liste)) { + $res .= ''; + } + $res .= '
' . commonUrl::orderby(__('Nom'), 'nom', $settings, 'sortDevis') . '' . commonUrl::orderby(__('Date'), 'date_creation', $settings, 'sortDevis') . '' . commonUrl::orderby(__('Montant HT'), 'total_ht', $settings, 'sortDevis') . '' . commonUrl::orderby(__('Status'), 'status', $settings, 'sortDevis') . '
' . $devis->nom . '' . date(__('d/m/Y'), $devis->date_creation) . '' . $devis->total_ht . '' . $core->devis_status[$devis->status] . '' . cubeMedia::image(IMG . '/view.png') . '
' . __("Vous n'avez pour le moment aucun devis associé à votre compte") . '
'; + return $res; + } + + public static function voirdevis($args) + { + global $core; + // Charge le devis + $dao = new extranetDAODevis($core->con); + $devis = $dao->selectById($args[1]); + + $forceDownload = isset($args[2]) && $args[2]; + + // Vérification des droits en lecture de l'utilisateur + extranetDroits::devis($devis, 'r'); + + if ($forceDownload) { + cubeHTTP::forceDownload('Devis_' . $args[1] . '.pdf'); + } + cubeHTTP::relayNoCache(ROOT . '/docs/devis/' . $args[1] . '.pdf'); + } + + public static function editedevis($args) + { + global $core; + commonDroits::min(1); + $res = commonPage::barre(); + $res .= commonPage::tMain(); + $res .= commonPage::bh(); + $res .= self::formDevis($args[1]); + $res .= commonPage::bf(); + $res .= commonPage::bMain(); + return $res; + } + + public static function formDevis($devis_id = 'new') + { + global $core; + cubePage::autocomplete(); + cubePage::emptyField(); + cubePage::ui('Sortable'); + commonDroits::min(1); + $dao = new extranetDAODevis($core->con); + if ($devis_id == 'new') { + $devis = $dao->cree(); + } else { + $devis = $dao->selectById($devis_id); + } + + $res = '
'; + $res .= '
'; + + $res .= '
'; + // Adresse + $res .= '
'; + if ($devis->devis_id == 'new') { + $default = __('Entrez le nom du client'); + $default_id = ''; + $class = 'empty-field'; + } else { + $default = $devis->client; + $default_id = $devis->client_id; + $class = ''; + } + + $res .= form::field('client_nom', 40, 128, $default, $class); + $res .= form::hidden('client', $default_id); + $res .= '
'; + if ($devis->client_id) { + $res .= commonUrl::adresse($devis->client_id, null, 'devis', $devis->adresse); + } + $res .= '
'; + $res .= '
'; + // Titre + $res .= '
'; + $res .= form::hidden('devis_id', $devis->devis_id); + $res .= form::textarea('nom', 40, 4, $devis->nom); + $res .= '
'; + $res .= '
'; + + $res .= '
'; + $res .= '
'; + // Lignes du devis + $nb_lignes = max(4, count($devis->lignes) + 2); + + for ($i = 0; $i < $nb_lignes; $i++) { + if (isset($devis->lignes[$i])) { + $titre = $devis->lignes[$i]['titre']; + $description = $devis->lignes[$i]['description']; + $montant = $devis->lignes[$i]['montant']; + } else { + $titre = $description = $montant = ''; + } + $res .= '
'; + $res .= '
'; + $res .= form::field(array('montant[]'), 6, 15, $montant) . " €"; + $res .= '
'; + $res .= '
'; + $res .= form::field(array('titre[]'), 105, 256, htmlspecialchars($titre, ENT_QUOTES)) . '

'; + $res .= form::textarea(array('description[]'), 110, 4, $description); + $res .= '
'; + + $res .= '
'; + } + + $res .= '
'; + $res .= '
'; + // $res .= '
' . cubeMedia::spacer(10, 10) . '
'; + // $res .= '
'; + // $res .= ''; + // $res .= ''; + // $res .= ''; + // $res .= ''; + // $res .= '
' . __('De') . '' . $core->user->prenom . ' ' . $core->user->nom . ' <' . $core->user->email . '>
' . __('Sujet') . '' . form::field(array('email[sujet]'), 80, 128, htmlspecialchars($devis->email['sujet'], ENT_QUOTES)) . '
' . __('Corps') . '' . form::textarea(array('email[corps]'), 80, 20, $devis->email['corps']) . '
'; + // $res .= '
'; + $res .= ''; + $res .= '
'; + $res .= '
'; + + return $res; + } + + public static function previewDevis($args) + { + global $core; + + $dao = new extranetDAODevis($core->con); + $devis = $dao->selectById($args[1]); + + $daoUtilisateur = new commonDAOUtilisateur($core->con); + $createur = $devis->createur = $daoUtilisateur->selectById($devis->createur_id); + $client = $devis->client = $daoUtilisateur->selectById($devis->client_id); + + $res = commonPage::barre(); + $res .= commonPage::tMain(); + $res .= commonPage::bh(); + $res .= ''; + $res .= commonPage::bf(); + $res .= commonPage::bh(); + $res .= '
'; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= '
' . __('De') . '' . $createur->prenom . ' ' . $createur->nom . '<' . $createur->email . '>
' . __('A') . '' . $client->prenom . ' ' . $client->nom . '<' . $client->email . '>
' . __('Sujet') . '' . $devis->email['sujet'] . '
' . __('Message') . '' . nl2br($devis->email['corps'] . "\n\n" . $createur->getSignature()) . '
'; + $res .= cubeMedia::spacer(40, 40) . '' . $core->typo->BoutonOK(__('Editer le devis')) . ' '; + $res .= '' . $core->typo->BoutonOK(__('Valider')) . ' '; + //$res .= '' . $core->typo->BoutonOK(__('Valider et envoyer le devis')) . '
'; + $res .= '
'; + $res .= commonPage::bf(); + $res .= commonPage::bMain(); + return $res; + } + + public static function factures($args) + { + global $core; + + if ($core->user->grade == 0) { + return self::factures_client($args); + } + $settings = $core->user->getSettings('factures'); + + commonDroits::min(1); + $shortcuts = array(); + if ($core->user->grade != 3) { + $shortcuts[] = '' . $core->typo->Ajouter('Créer une facture') . ''; + } + $shortcuts[] = '' . cubeMedia::image(IMG . '/print.png') . ''; + $filtres = array(); + $filtres[] = new commonFiltre(__('Créées par'), 'equipier', $settings['filtres']); + $filtres[] = new commonFiltre(__('Status'), 'status_facture', $settings['filtres']); + $filtres[] = new commonFiltre(__('Année'), 'annee_facture', $settings['filtres']); + $res = commonPage::barre($filtres, 'filtreFactures', 'factures', $shortcuts); + $res .= commonPage::tMain(); + $res .= commonPage::bh(); + $res .= '
'; + $res .= self::listeFactures(); + $res .= '
'; + $res .= commonPage::bf(); + $res .= commonPage::bMain(); + return $res; + } + + public static function factures_client($args) + { + global $core; + $res = commonPage::barre(); + $res .= commonPage::tMain(); + $res .= commonPage::bh(); + $res .= '
'; + $res .= self::listeFactures(); + $res .= '
'; + $res .= commonPage::bf(); + $res .= commonPage::bMain(); + return $res; + } + + public static function contextFacture($id) + { + global $core; + $res = '
'; + $res .= '
    '; + $res .= '
  • ' . __("Changer le status de la facture") . '
  • '; + foreach ($core->factures_status as $k => $v) { + if (in_array($k, array(0, 4))) { + continue; + } + if ($k == 2) { + $res .= '
  • ' . $v . '
  • '; + } else { + if ($k == 3) { + $title = ' title="' . __("Êtes-vous certain de vouloir annuler cette facture ? Cette action est irreversible et provoquera la création d'un avoir correpondant.") . '"'; + } else { + $title = ''; + } + $res .= '
  • ' . $v . '
  • '; + } + } + $res .= '
'; + return $res; + } + + public static function listeFactures($dashboard = null, $settings = null) + { + global $core; + if ($core->user->grade == 0) { + return self::listeFacturesClient($dashboard, $settings); + } else { + return self::listeFacturesEquipier($dashboard, $settings); + } + } + + public static function listeFacturesEquipier($dashboard = null, $settings = null) + { + global $core; + cubePage::truePopup(); + cubePage::contextMenu(); + + $settings = is_null($settings) ? $core->user->getSettings('factures') : $settings; + $change = is_null($dashboard) ? 'Facture' : 'Dashboard/' . $dashboard; + $context_id = is_null($dashboard) ? 'contextFacture' : 'contextDashboard_' . $dashboard; + $dao = new extranetDAOFacture($core->con); + if (isset($settings['search']) && !is_null($settings['search'])) { + $dao->setSearch($settings['search']); + } else { + $dao->setFiltres($settings['filtres']); + } + + if ($core->user->grade != 3) { + $liste = $dao->getListe($settings['orderby'], $settings['sens'], $settings['limit']); + } else { + $liste = $dao->getListeCompta($settings['orderby'], $settings['sens'], $settings['limit']); + } + + $res = self::contextFacture($context_id); + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $i = 0; + foreach ($liste as $facture) { + $droits = extranetDroits::facture($facture, 'w', false); + $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + if ($facture->status == 0) { + $res .= ''; + if ($droits) { + $res .= ''; + $res .= ''; + $res .= ''; + } else { + $res .= ''; + } + } elseif ($facture->status >= 1) { + if ($facture->status < 3 || $facture->status == 5) { + if ($droits) { + $res .= ''; + } else { + $res .= ''; + } + } else { + $title = $facture->status == 3 ? __("Voir l'avoir correspondant") : __("Voir la facture annulée correspondante"); + $res .= ''; + } + if ($facture->facture_id > 0) { + if ($droits && $facture->status == 1) { + $res .= ''; + } else { + $res .= ''; + } + $res .= ''; + if ($facture->status != 4 && $core->user->grade != 3) { + $res .= ''; + } else { + $res .= ''; + } + } else { + $res .= ''; + } + } + + $res .= ''; + $i++; + } + if (!isset($settings['search']) || is_null($settings['search'])) { + $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; + $res .= ''; + } + $res .= '
' . commonUrl::orderby('#', 'facture_id', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Nom'), 'nom', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Client'), 'client', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Crée par'), 'createur', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Date'), 'date_creation', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Montant HT'), 'total_ht', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Status'), 'status', $settings, 'sort' . $change) . '
' . $facture->facture_id . '' . $facture->nom . '' . $facture->client . '' . $facture->createur . '' . date(__('d/m/Y'), $facture->date_creation) . '' . $facture->total_ht . '' . $core->factures_status[$facture->status] . '' . cubeMedia::image(IMG . '/edit.png') . '' . cubeMedia::image(IMG . '/delete.png') . '' . $core->factures_status[$facture->status] . '' . $core->factures_status[$facture->status] . '' . $core->factures_status[$facture->status] . '' . '' . cubeMedia::image(IMG . '/edit.png') . '' . cubeMedia::image(IMG . '/view.png') . '' . cubeMedia::image(IMG . '/duplicate.png') . '
'; + if ($core->user->grade != 3) { + $res .= commonPage::pager($settings['page'], $dao->count(), $settings['par_page'], 'page' . $change . '/%d'); + } else { + $res .= commonPage::pager($settings['page'], $dao->countCompta(), $settings['par_page'], 'page' . $change . '/%d'); + } + $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('factures')); + $res .= '
'; + return $res; + } + + public static function listeFacturesClient($dashboard = null, $settings = null) + { + global $core; + cubePage::truePopup(); + $settings = $core->user->getSettings('factures'); + $dao = new extranetDAOFacture($core->con); + $liste = $dao->getListeForEntreprise($core->user->entreprise, $settings['orderby'], $settings['sens'], true); + + $res = ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $i = 0; + foreach ($liste as $facture) { + $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $i++; + } + if (!count($liste)) { + $res .= ''; + } + + $res .= '
' . commonUrl::orderby('#', 'facture_id', $settings, 'sortFacture') . '' . commonUrl::orderby(__('Nom'), 'nom', $settings, 'sortFacture') . '' . commonUrl::orderby(__('Date'), 'date_creation', $settings, 'sortFacture') . '' . commonUrl::orderby(__('Montant HT'), 'total_ht', $settings, 'sortFacture') . '' . commonUrl::orderby(__('Status'), 'status', $settings, 'sortFacture') . '
' . $facture->numeroFacture() . '' . $facture->nom . '' . date(__('d/m/Y'), $facture->date_creation) . '' . $facture->total_ht . '' . $core->factures_status[$facture->status] . '' . cubeMedia::image(IMG . '/view.png') . '
' . __("Vous n'avez pour le moment aucune facture associée à votre compte") . '
'; + return $res; + } + + public static function formFacturePaiement($facture_id) + { + global $core; + $dao = new extranetDAOFacture($core->con); + $facture = $dao->selectById($facture_id); + $date = !$facture->date_paiement ? null : $facture->date_paiement; + + $res = '' . form::hidden('facture_id', $facture_id) . __('Date de paiement') . '' . cubeForm::date('date_paiement', $date) . ''; + $res .= '' . __('Informations de paiement') . '' . form::textarea('informations_paiement', 40, 3, $facture->informations_paiement) . ''; + + return $res; + } + + public static function voirfacture($args) + { + global $core; + // Charge la facture + $dao = new extranetDAOFacture($core->con); + $facture = $dao->selectById($args[1]); + // Vérification des droits de l'utilisateur + extranetDroits::facture($facture, 'r', true); + + cubeHTTP::relayNoCache(ROOT . '/docs/factures/' . $args[1] . '.pdf'); + } + + public static function editefacture($args) + { + global $core; + commonDroits::min(1); + $res = commonPage::barre(); + $res .= commonPage::tMain(); + $res .= commonPage::bh(); + if (isset($args[2])) { + $res .= self::formFacture($args[1], $args[2]); + } else { + $res .= self::formFacture($args[1]); + } + $res .= commonPage::bf(); + $res .= commonPage::bMain(); + return $res; + } + + public static function formFacture($facture_id = 'new', $projet_id = null) + { + global $core; + commonDroits::min(1); + cubePage::autoComplete(); + cubePage::emptyField(); + cubePage::ui('Sortable'); + + $daoProjet = new extranetDAOProjet($core->con); + $dao = new extranetDAOFacture($core->con); + + $projet_id = isset($_POST['projet_id']) && $_POST['projet_id'] > 0 ? $_POST['projet_id'] : $projet_id; + + if ($facture_id == 'new') { + $facture = $dao->cree(); + } elseif ($facture_id == 'ws') { + $facture = $dao->cree(); + $facture->facture_id = 'ws'; + } else { + $facture = $dao->selectById($facture_id); + } + + if (!is_null($projet_id) && $facture_id == 'new') { + $projet = $daoProjet->selectById($projet_id); + $facture->projet_id = $projet->projet_id; + $facture->client = $projet->client; + $facture->projet = $facture->nom = $projet->nom; + $lignes = array(); + foreach ($projet->taches as $tache) { + $lignes[] = array('montant' => $tache->budget, 'titre' => $tache->nom, 'description' => ''); + } + $facture->lignes = $lignes; + } elseif ($facture_id == 'ws') { + if (is_null($projet_id)) { + $daoClient = new commonDAOClient($core->con); + $client = $daoClient->selectById($_POST['client_id']); + $facture->projet_id = 'new'; + $facture->client = $client->rs; + $facture->client_id = $client->utilisateur_id; + $facture->projet = __('Nouveau projet'); + $facture->nom = 'Fluidbook'; + } else { + $projet = $daoProjet->selectById($projet_id); + $facture->projet_id = $projet->projet_id; + $facture->client = $projet->client; + $facture->projet = $facture->nom = $projet->nom; + } + $lignes = array(); + $b = $core->con->select('SELECT * FROM ws.book WHERE bid IN(' . implode(',', array_keys($_POST['book_facture'])) . ')'); + while ($b->fetch()) { + $lignes[] = array('book' => $b->bid, 'montant' => 0, 'titre' => 'Fluidbook « ' . $b->titre . ' »', 'description' => ''); + } + $facture->lignes = $lignes; + } + + $res = '
'; + $res .= '
'; + $res .= '
'; + // Adresse + if ($facture->facture_id == 'new' && is_null($projet_id)) { + $class = 'empty-field'; + $default_id = ''; + $default = __('Entrez le nom du projet ou du client'); + } else { + $class = ''; + $default_id = $facture->projet_id; + $default = $facture->projet_id . ' - ' . $facture->projet . ' (' . $facture->client . ')'; + } + + $res .= '
'; + $res .= form::field('projet_nom', 40, 128, $default, $class); + $res .= form::hidden('projet', $default_id); + $res .= '
'; + if ($facture->projet_id != 'new') { + $res .= commonUrl::adresse(null, $facture->projet_id, 'facture', $facture->adresse); + } else { + $res .= commonUrl::adresse($facture->client_id, null, 'facture', $facture->adresse); + $res .= form::hidden('client', $facture->client_id); + } + + $res .= '
'; + $res .= form::textarea('texte_complementaire', 50, 2, $facture->texte_complementaire); + $res .= '
'; + // Titre + $res .= '
'; + $res .= 'Date : ' . cubeForm::date('date_creation', $facture->date_creation) . '

'; + $res .= form::hidden('facture_id', $facture->facture_id); + $res .= form::textarea('nom', 40, 4, $facture->nom); + $res .= '
'; + $res .= '
'; + + $res .= '
'; + $res .= '
'; + // Lignes du devis + $nb_lignes = max(4, count($facture->lignes) + 2); + + for ($i = 0; $i < $nb_lignes; $i++) { + if (isset($facture->lignes[$i])) { + $titre = $facture->lignes[$i]['titre']; + $description = $facture->lignes[$i]['description']; + $montant = $facture->lignes[$i]['montant']; + $book = isset($facture->lignes[$i]['book']) ? $facture->lignes[$i]['book'] : null; + } else { + $titre = $description = $montant = ''; + } + + $res .= '
'; + + $res .= '
'; + $res .= form::field(array('montant[]'), 6, 15, $montant) . " €"; + if (isset($book) && !is_null($book)) { + $res .= form::hidden(array('book[]'), $book); + } + $res .= '
'; + $res .= '
'; + $res .= form::field(array('titre[]'), 80, 256, htmlspecialchars($titre, ENT_QUOTES)) . '

'; + $res .= form::textarea(array('description[]'), 80, 2, $description); + $res .= '
'; + + $res .= '
'; + } + + $res .= '
'; + $res .= '
'; + $res .= '
' . cubeMedia::spacer(10, 10) . '
'; + $res .= ''; + $res .= '
'; + $res .= '
'; + return $res; + } + + public static function previewFacture($args) + { + global $core; + commonDroits::min(1); + $dao = new extranetDAOFacture($core->con); + $facture = $dao->selectById($args[1]); + + $res = commonPage::barre(); + $res .= commonPage::tMain(); + $res .= commonPage::bh(); + $res .= ''; + + $res .= ''; + $res .= commonPage::bf(); + $res .= commonPage::bMain(); + return $res; + } + + public static function formPrintFactures() + { + global $core; + $last = $core->user->getLastPrint(); + $res = ''; + if ($last['date']) { + $res .= '' . __('Dernière factures imprimées') . ' : ' . __('Factures') . ' ' . $last['pages'] . ' (' . date('Y-m-d', $last['date']) . ')'; + } + $res .= '' . __('Factures à imprimer') . '' . form::field('factures', 20, 64) . ''; + $res .= '' . __('Ex') . ' : 1;3-5;7;9 ' . __('signifie factures') . ' 1,3,4,5,7,9'; + return $res; + } + + public static function chiffres($args) + { + global $core; + commonDroits::min(2); + // $res = commonPage::barre(null, null, null, array('' . $core->typo->Favoris(__('Gérer les charges sur Google Agenda')) . '')); + $res = commonPage::barre(null, null, null, null); + $res .= commonPage::tMain(); + $res .= extranetPageChiffres::listeChiffres(); + $res .= commonPage::bMain(); + return $res; + } + + public static function traduction($args) + { + global $core; + commonDroits::min(1); + $res = commonPage::barre(); + $res .= commonPage::tMain("traduction"); + $res .= commonPage::bh(); + $res .= '
'; + $res .= ''; + $res .= ''; + $res .= '
' . __("Traduction de l'application en anglais") . '
'; + $res .= cubeLang::translationForm(array(ROOT . '/inc/commons', ROOT . '/inc/extranet', ROOT . '/inc/ws', COMPOSER_SOURCES), 'en', ROOT . '/l10n', '', array(), '' . $core->typo->BoutonOK('Enregistrer') . ''); + $res .= '
'; + $res .= commonPage::bf(); + $res .= commonPage::bMain(); + return $res; + } + + public static function cleanTimereport($args) + { + global $core; + + $r = $core->con->select('SELECT * FROM timereport'); + $t = array(); + while ($r->fetch()) { + if (!isset($t[date('Y', $r->date)][$r->utilisateur_id][$r->tache_id])) { + $t[date('Y', $r->date)][$r->utilisateur_id][$r->tache_id] = 0; + } + $t[date('Y', $r->date)][$r->utilisateur_id][$r->tache_id] += $r->heures; + } + + foreach ($t as $annee => $t1) { + if ($annee == date('Y')) { + continue; + } + $limit = cubeDate::limitYear($annee); + $core->con->execute('DELETE FROM timereport WHERE date BETWEEN ' . $limit['start'] . ' AND ' . $limit['end']); + $c = $core->con->openCursor('timereport'); + $c->date = mktime(1, 1, 1, 1, 1, $annee); + foreach ($t1 as $uid => $t2) { + $c->utilisateur_id = $uid; + foreach ($t2 as $tache_id => $heures) { + $c->tache_id = $tache_id; + $c->heures = $heures; + $c->insert(); + } + } + } + } + + public static function rh($args) + { + global $core; + commonDroits::min(2); + $res = commonPage::barre(); + $res .= commonPage::tMain("rh"); + $res .= commonPage::bh(); + $res .= '
'; + $res .= extranetUrl::listeRh(null, null); + $res .= '
'; + $res .= commonPage::bf(); + $res .= commonPage::bMain(); + return $res; + } + + public static function listeRh($dashboard = null, $settings = null) + { + global $core; + commonDroits::min(2); + $settings = is_null($settings) ? $core->user->getSettings('equipiers') : $settings; + $change = is_null($dashboard) ? 'Equipier' : 'Dashboard/' . $dashboard; + $dao = new commonDAOEquipier($core->con); + $liste = $dao->getListe(null, $settings['orderby'], $settings['sens'], $settings['limit']); + + $res = ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + // $res .= ''; + $i = 0; + foreach ($liste as $id => $equipier) { + $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + + $email = strlen($equipier->email) > 20 ? substr($equipier->email, 0, 17) . '...' : $equipier->email; + + $res .= ''; + $res .= ''; + $res .= ''; + // $res .= ''; + // $res .= ''; + $res .= ''; + $i++; + } + /* if (!isset($settings['search']) || is_null($settings['search'])) { + $odd = cubeMath::isOdd($i)?' class="odd"':''; + $res .= ''; + } */ + $res .= '
' . commonUrl::orderby('#', 'utilisateur_id', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Agence'), 'agence', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Nom'), 'nom', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('E-mail'), 'email', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Grade'), 'grade', $settings, 'sort' . $change) . 'Notes
' . $equipier->utilisateur_id . '' . $equipier->agence . '' . $equipier->prenom . ' ' . $equipier->nom . '' . $email . '' . $core->grades[$equipier->grade] . '' . cubeMedia::image(IMG . '/postit.png') . '' . cubeMedia::image(IMG . '/edit.png') . '' . cubeMedia::image(IMG . '/delete.png') . '
'; + $res .= commonPage::pager($settings['page'], $dao->count() , $settings['par_page'], 'page' . $change . '/%d'); + $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('clients')); + $res .= '
'; + return $res; + } } diff --git a/inc/ws/Controlleur/class.ws.url.php b/inc/ws/Controlleur/class.ws.url.php index 77152caee..af03c9129 100644 --- a/inc/ws/Controlleur/class.ws.url.php +++ b/inc/ws/Controlleur/class.ws.url.php @@ -1956,7 +1956,7 @@ html.tall{height:150%}' . "\n"; $res = '' . __('Numéro de client') . '' . form::hidden('grade', 0) . form::hidden('entreprise', $client->entreprise) . form::hidden('utilisateur_id', $client->utilisateur_id) . '' . $client->utilisateur_id . ''; $res .= '' . __('Login activé') . '' . form::hidden('enabled', 0) . form::checkbox('enabled', 1, $client->enabled) . ''; $res .= '' . __('Adresse e-mail') . '' . form::field('email', 30, 128, $client->email) . ''; - $res .= '' . __('Mot de passe') . '' . form::field('password', 30, 128, $client->password) . ''; + //$res .= '' . __('Mot de passe') . '' . form::field('password', 30, 128, $client->password) . ''; $res .= '' . __('Prénom du contact') . '' . form::field('prenom', 30, 128, $client->prenom) . ''; $res .= '' . __('Nom du contact') . '' . form::field('nom', 30, 128, $client->nom) . ''; $res .= '' . __('Adresse') . '' . form::textarea('adresse', 40, 3, $client->adresse) . ''; @@ -1971,7 +1971,7 @@ html.tall{height:150%}' . "\n"; $res .= '' . cubeMedia::spacer(10, 10) . ''; $res .= '' . __('FTP') . ''; //$res .= '' . __('Se connecter comme ...') . ''; - $res .= '' . __("Paramètres de connexion au Fluidbook Workshop") . '' . __('Adresse') . ' : https://' . $_SERVER['HTTP_HOST'] . '/
' . __("Nom d'utilisateur") . ' : ' . $client->email . '
' . __('Mot de passe') . ' : ' . $client->password . ''; + $res .= '' . __("Paramètres de connexion au Fluidbook Workshop") . '' . __('Adresse') . ' : https://' . $_SERVER['HTTP_HOST'] . '/
' . __("Nom d'utilisateur") . ' : ' . $client->email . '
' . __('Mot de passe') . ' : ' . __('Utiliser la fonction "Mot de passe oublié" pour le créer ou le réinitialiser') . ''; $res .= '' . cubeMedia::spacer(10, 10) . ''; } return $res; diff --git a/inc/ws/Metier/class.ws.book.parametres.php b/inc/ws/Metier/class.ws.book.parametres.php index 29b9b2e1c..a0f47a76c 100644 --- a/inc/ws/Metier/class.ws.book.parametres.php +++ b/inc/ws/Metier/class.ws.book.parametres.php @@ -426,8 +426,10 @@ class wsBookParametres extends wsParametres $this->fields['textPopupStylesheet'] = ['type' => 'freefile', 'default' => '', 'editable' => true, 'label' => __('Feuille de style des popups de texte'), 'fileFilter' => $cssFilter]; $this->fields['textPopupWidth'] = ['type' => 'integer', 'default' => '600', 'editable' => true, 'label' => __('Largeur optimale des popups')]; $this->fields['iframePopupMaxWidth'] = ['type' => 'integer', 'default' => '0', 'editable' => true, 'label' => __('Largeur maximale des popups iframe')]; + $this->fields['OAMChromeFactor'] = ['type' => 'float', 'default' => '1', 'editable' => true, 'label' => __('Facteur OAM Chrome')]; + $this->fields['OAMIEFactor'] = ['type' => 'float', 'default' => '1', 'editable' => true, 'label' => __('Facteur OAM IE11')]; $this->forms['multimedia'] = array('label' => __('Liens et multimédia'), - 'fieldsnames' => array('permanentLinks', 'linkBlinkTime', 'linkBlinkRepetition', '|', 'customLinkClass', 'ignoreLinksTypes', 'linkTooltipManager', 'linkCornerSize', 'linkTooltipMaxWidth', '|', 'linkTracker', 'linkTrackerRegexp', '|', 'linkFilePrefix', '|', 'linkMultimediaPerformanceMode', 'linkMultimediaQuality', '|', 'inlineSlideshowTransitionDuration', 'inlineSlideshowDuration', '|', 'videoReset', 'videoBigPlay', '|', 'brightcovePlayerId', 'brightcovePlayerSecret', '|', 'textPopupStylesheet', 'textPopupWidth', '|', 'iframePopupMaxWidth')); + 'fieldsnames' => array('permanentLinks', 'linkBlinkTime', 'linkBlinkRepetition', '|', 'customLinkClass', 'ignoreLinksTypes', 'linkTooltipManager', 'linkCornerSize', 'linkTooltipMaxWidth', '|', 'linkTracker', 'linkTrackerRegexp', '|', 'linkFilePrefix', '|', 'linkMultimediaPerformanceMode', 'linkMultimediaQuality', '|', 'inlineSlideshowTransitionDuration', 'inlineSlideshowDuration', '|', 'videoReset', 'videoBigPlay', '|', 'brightcovePlayerId', 'brightcovePlayerSecret', '|', 'textPopupStylesheet', 'textPopupWidth', '|', 'iframePopupMaxWidth','|','OAMChromeFactor','OAMIEFactor')); //. $this->fields['product_zoom_references'] = array('type' => 'freefile', 'default' => '', 'editable' => true, -- 2.39.5