Bug #1006 ANCGL : export des pièces dans un grand PDF avec un tampon
Task #1006 - ANCGL : export des pièces dans un grand PDF avec un tampon
This commit is contained in:
parent
e4ef9aa769
commit
7d45e42039
9 changed files with 309 additions and 222 deletions
2
README
2
README
|
|
@ -1,4 +1,4 @@
|
|||
Si vous avez besoin d'aide pour l'installation
|
||||
utilisez la mailing list
|
||||
Pour souscrire ou faire des recherches
|
||||
aller à http://mail.nongnu.org/mailman/listinfo/phpcompta-support
|
||||
aller à https://lists.nongnu.org/mailman/listinfo/noalyss-generale
|
||||
|
|
|
|||
|
|
@ -43,7 +43,14 @@ if ( $action=='X' || ! isset($_GET['act']) || $g_user->check_print($_GET['act'])
|
|||
exit();
|
||||
}
|
||||
// get file and execute it
|
||||
|
||||
$prfile=$cn->get_value("select me_file from menu_ref where me_code=$1",array($_GET['act']));
|
||||
$action=HtmlInput::default_value_get('act', null);
|
||||
if ($action == null )
|
||||
{
|
||||
die(_('Appel invalide'));
|
||||
}
|
||||
$prfile=$cn->get_value("select me_file from menu_ref where me_code=$1",array($action));
|
||||
if ( $prfile == "") {
|
||||
die (_('Export impossible'));
|
||||
}
|
||||
require_once $prfile;
|
||||
?>
|
||||
|
|
@ -64,6 +64,8 @@ content[33]='le type vaut :<ul> <li> ME pour Menu</li> <li> PR pour les impressi
|
|||
content[34]='Cliquez sur le code AD pour ouvrir le menu dans un nouvel onglet';
|
||||
content[35]='Cliquez sur le chemin pour ouvrir le menu';
|
||||
content[36]='En utilisant les dates d\'échéance ou de paiement, seuls les journaux de type ACH et VEN seront utilisés ,vous excluez d\'office les autres journaux';
|
||||
content[37]='Les dates sont en format DD.MM.YYYY';
|
||||
|
||||
function showBulle(p_ctl){
|
||||
d=document.getElementById('bulle');
|
||||
d.innerHTML=content[p_ctl];
|
||||
|
|
|
|||
|
|
@ -3,17 +3,37 @@
|
|||
//see licence.txt
|
||||
|
||||
if ( ! defined ('ALLOWED') ) die('Appel direct ne sont pas permis');
|
||||
require_once('class_anc_grandlivre.php');
|
||||
$gl = new Anc_GrandLivre($cn);
|
||||
$gl->get_request();
|
||||
echo '<form method="get">';
|
||||
echo $gl->display_form();
|
||||
|
||||
require_once 'class_anc_grandlivre.php';
|
||||
|
||||
$grandLivre=new Anc_Grandlivre($cn);
|
||||
|
||||
$grandLivre->get_request();
|
||||
|
||||
/*
|
||||
* Form
|
||||
*/
|
||||
echo '<form method="get" >';
|
||||
echo $grandLivre->display_form();
|
||||
echo '<p>' . HtmlInput::submit('Recherche', _('Recherche')) . '</p>';
|
||||
echo HtmlInput::request_to_hidden(array('sa','ac','gDossier'));
|
||||
echo '</form>';
|
||||
if (isset($_GET['result']))
|
||||
|
||||
$result=HtmlInput::default_value_request('result',null);
|
||||
|
||||
if ($result != null)
|
||||
{
|
||||
echo $gl->show_button();
|
||||
echo $gl->display_html();
|
||||
echo $gl->show_button();
|
||||
echo '<span style="display:block">';
|
||||
echo _('Tout sélectionner')." ".ICheckBox::toggle_checkbox('export_pdf_bt1','export_anc_receipt_pdf');
|
||||
echo '</span>';
|
||||
echo $grandLivre->show_button();
|
||||
echo '<form method="GET" id="export_anc_receipt_pdf" action="export.php" style="display:inline">';
|
||||
|
||||
echo $grandLivre->button_export_pdf();
|
||||
echo $grandLivre->display_html();
|
||||
echo $grandLivre->button_export_pdf();
|
||||
echo HtmlInput::get_to_hidden(array('ac','gDossier','sa'));
|
||||
echo '</form>';
|
||||
echo $grandLivre->show_button();
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -27,7 +27,8 @@ require_once 'class_impress.php';
|
|||
|
||||
class Anc_GrandLivre extends Anc_Print
|
||||
{
|
||||
function set_sql_filter()
|
||||
|
||||
function set_sql_filter()
|
||||
{
|
||||
$sql="";
|
||||
$and=" and ";
|
||||
|
|
@ -114,7 +115,28 @@ class Anc_GrandLivre extends Anc_Print
|
|||
|
||||
return $array;
|
||||
}
|
||||
/* !
|
||||
* \brief Show the button to export in PDF all the receipt
|
||||
*
|
||||
* \param $p_string extra hidden value
|
||||
* \return string with the button
|
||||
*/
|
||||
|
||||
function button_export_pdf($p_string = "")
|
||||
{
|
||||
$r = "";
|
||||
$r.= HtmlInput::hidden("to", $this->to);
|
||||
$r.= HtmlInput::hidden("from", $this->from);
|
||||
$r.= HtmlInput::hidden("pa_id", $this->pa_id);
|
||||
$r.= HtmlInput::hidden("from_poste", $this->from_poste);
|
||||
$r.= HtmlInput::hidden("to_poste", $this->to_poste);
|
||||
$r.= HtmlInput::hidden("act","PDF:AncReceipt");
|
||||
|
||||
$r.= $p_string;
|
||||
$r.= dossier::hidden();
|
||||
$r.=HtmlInput::submit('bt_receipt_anal_pdf', _("Export des pièces en PDF"));
|
||||
return $r;
|
||||
}
|
||||
/*!
|
||||
* \brief compute the html display
|
||||
*
|
||||
|
|
@ -123,79 +145,102 @@ class Anc_GrandLivre extends Anc_Print
|
|||
*/
|
||||
|
||||
function display_html()
|
||||
{
|
||||
$r="";
|
||||
{
|
||||
$r = "";
|
||||
//---Html
|
||||
$array=$this->load();
|
||||
if ( is_array($array) == false )
|
||||
$array = $this->load();
|
||||
if (is_array($array) == false)
|
||||
{
|
||||
return $array;
|
||||
|
||||
}
|
||||
|
||||
if ( empty($array) )
|
||||
if (empty($array))
|
||||
{
|
||||
$r.= _("aucune donnée");
|
||||
return $r;
|
||||
}
|
||||
$r.= '<table class="result" style="width=100%">';
|
||||
$ix=0;$prev='xx';$idx=0;
|
||||
$tot_deb=$tot_cred=0;
|
||||
|
||||
foreach ( $array as $row )
|
||||
{
|
||||
if ($prev != $row['po_name'])
|
||||
{
|
||||
if ( $ix>0)
|
||||
{
|
||||
$r.='<tr>';
|
||||
$tot_solde=bcsub($tot_cred,$tot_deb);
|
||||
$sign=($tot_solde>0)?'C':'D';
|
||||
$r.=td('').td('').td('').td('').td('').td(nbm($tot_deb),' class="num"').td(nbm($tot_cred),' class="num"').td(nbm($tot_solde).$sign,' class="num"');
|
||||
}
|
||||
$r.='<tr>'.'<td colspan="7" style="width:auto">'.'<h2>'.h($row['po_name'].' '.$row['po_description']).'</td></tr>';
|
||||
$r.= '<tr>'.
|
||||
'<th>'._('Date').'</th>'.
|
||||
'<th>'._('Poste').'</th>'.
|
||||
'<th>'._('Quick_code').'</th>'.
|
||||
'<th>'._('libelle').'</th>'.
|
||||
'<th>'._('Pièce').'</th>'.
|
||||
'<th>'._('Num.interne').'</th>'.
|
||||
'<th style="text-align:right">'._('Debit').'</th>'.
|
||||
'<th style="text-align:right">'._('Credit').'</th>'.
|
||||
'</tr>';
|
||||
$ix = 0;
|
||||
$prev = 'xx';
|
||||
$idx = 0;
|
||||
$tot_deb = $tot_cred = 0;
|
||||
|
||||
$tot_deb=$tot_cred=0;
|
||||
$prev=$row['po_name'];
|
||||
$ix++;
|
||||
}
|
||||
$class=($idx%2==0)?'even':'odd'; $idx++;
|
||||
$r.='<tr class="'.$class.'">';
|
||||
$detail=($row['jr_id'] != null)?HtmlInput::detail_op($row['jr_id'],$row['jr_internal']):'';
|
||||
$post_detail=($row['j_poste'] != null)?HtmlInput::history_account($row['j_poste'],$row['j_poste']):'';
|
||||
$card_detail=($row['f_id'] != null)?HtmlInput::history_card($row['f_id'],$row['qcode']):'';
|
||||
$amount_deb=($row['oa_debit']=='t')?$row['oa_amount']:0;
|
||||
$amount_cred=($row['oa_debit']=='f')?$row['oa_amount']:0;
|
||||
$tot_deb=bcadd($tot_deb,$amount_deb);
|
||||
$tot_cred=bcadd($tot_cred,$amount_cred);
|
||||
foreach ($array as $row)
|
||||
{
|
||||
if ($prev != $row['po_name'])
|
||||
{
|
||||
if ($ix > 0)
|
||||
{
|
||||
$r.='<tr>';
|
||||
$tot_solde = bcsub($tot_cred, $tot_deb);
|
||||
$sign = ($tot_solde > 0) ? 'C' : 'D';
|
||||
$r.=td('') . td('') . td('') . td('') . td('') . td(nbm($tot_deb), ' class="num"') . td(nbm($tot_cred), ' class="num"') . td(nbm($tot_solde) . $sign, ' class="num"');
|
||||
}
|
||||
$r.='<tr>' . '<td colspan="7" style="width:auto">' . '<h2>' . h($row['po_name'] . ' ' . $row['po_description']) . '</td></tr>';
|
||||
$r.= '<tr>' .
|
||||
'<th>' . '</th>' .
|
||||
'<th>' . _('Date') . '</th>' .
|
||||
'<th>' . _('Poste') . '</th>' .
|
||||
'<th>' . _('Quick_code') . '</th>' .
|
||||
'<th>' . _('Libellé') . '</th>' .
|
||||
'<th>' . _('Document') . '</th>' .
|
||||
'<th>' . _('Pièce') . '</th>' .
|
||||
'<th>' . _('Num.interne') . '</th>' .
|
||||
'<th style="text-align:right">' . _('Debit') . '</th>' .
|
||||
'<th style="text-align:right">' . _('Credit') . '</th>' .
|
||||
'</tr>';
|
||||
|
||||
$tot_deb = $tot_cred = 0;
|
||||
$prev = $row['po_name'];
|
||||
$ix++;
|
||||
}
|
||||
$class = ($idx % 2 == 0) ? 'even' : 'odd';
|
||||
$idx++;
|
||||
$r.='<tr class="' . $class . '">';
|
||||
$detail = ($row['jr_id'] != null) ? HtmlInput::detail_op($row['jr_id'], $row['jr_internal']) : '';
|
||||
$post_detail = ($row['j_poste'] != null) ? HtmlInput::history_account($row['j_poste'], $row['j_poste']) : '';
|
||||
$card_detail = ($row['f_id'] != null) ? HtmlInput::history_card($row['f_id'], $row['qcode']) : '';
|
||||
$amount_deb = ($row['oa_debit'] == 't') ? $row['oa_amount'] : 0;
|
||||
$amount_cred = ($row['oa_debit'] == 'f') ? $row['oa_amount'] : 0;
|
||||
$tot_deb = bcadd($tot_deb, $amount_deb);
|
||||
$tot_cred = bcadd($tot_cred, $amount_cred);
|
||||
|
||||
/*
|
||||
* Checked button
|
||||
*/
|
||||
$str_ck = "";
|
||||
$str_document = "";
|
||||
if ($row['jr_id'] != null)
|
||||
{
|
||||
/*
|
||||
* Get receipt info
|
||||
*/
|
||||
$str_document = HtmlInput::show_receipt_document($row['jr_id']);
|
||||
if ($str_document != "")
|
||||
{
|
||||
$ck = new ICheckBox('ck[]', $row['jr_id']);
|
||||
$str_ck = $ck->input();
|
||||
}
|
||||
}
|
||||
|
||||
$r.=
|
||||
'<td>'.$row['oa_date'].'</td>'.
|
||||
td($post_detail).
|
||||
td($card_detail).
|
||||
// '<td>'.h($row['oa_description']).'</td>'.
|
||||
td($row['jr_comment']).
|
||||
td($row['jr_pj_number']).
|
||||
'<td>'.$detail.'</td>'.
|
||||
'<td class="num">'.nbm($amount_deb).'</td>'.
|
||||
'<td class="num">'.nbm($amount_cred)
|
||||
.'</td>';
|
||||
'<td>' . $str_ck . '</td>' .
|
||||
'<td>' . $row['oa_date'] . '</td>' .
|
||||
td($post_detail) .
|
||||
td($card_detail) .
|
||||
td($row['jr_comment']) .
|
||||
'<td>' . $str_document . '</td>' .
|
||||
td($row['jr_pj_number']) .
|
||||
'<td>' . $detail . '</td>' .
|
||||
'<td class="num">' . nbm($amount_deb) . '</td>' .
|
||||
'<td class="num">' . nbm($amount_cred)
|
||||
. '</td>';
|
||||
$r.= '</tr>';
|
||||
}
|
||||
$r.='<tr>';
|
||||
$tot_solde=bcsub($tot_cred,$tot_deb);
|
||||
$sign=($tot_solde>0)?'C':'D';
|
||||
$r.=td('').td('').td('').td('').td('').td(nbm($tot_deb),' class="num"').td(nbm($tot_cred),' class="num"').td(nbm($tot_solde).$sign,' class="num"');
|
||||
$r.='<tr>';
|
||||
$tot_solde = bcsub($tot_cred, $tot_deb);
|
||||
$sign = ($tot_solde > 0) ? 'C' : 'D';
|
||||
$r.=td('') . td('') . td('') . td('') . td('') . td(nbm($tot_deb), ' class="num"') . td(nbm($tot_cred), ' class="num"') . td(nbm($tot_solde) . $sign, ' class="num"');
|
||||
|
||||
$r.= '</table>';
|
||||
return $r;
|
||||
|
|
@ -212,19 +257,6 @@ class Anc_GrandLivre extends Anc_Print
|
|||
function show_button($p_string="")
|
||||
{
|
||||
$r="";
|
||||
/* $r.= '<form method="GET" action="export.php" style="display:inline">';
|
||||
$r.= $p_string;
|
||||
$r.= dossier::hidden();
|
||||
$r.= HtmlInput::hidden("to",$this->to);
|
||||
$r.= HtmlInput::hidden("act","PDF:AncGrandLivre");
|
||||
|
||||
$r.= HtmlInput::hidden("from",$this->from);
|
||||
$r.= HtmlInput::hidden("pa_id",$this->pa_id);
|
||||
$r.= HtmlInput::hidden("from_poste",$this->from_poste);
|
||||
$r.= HtmlInput::hidden("to_poste",$this->to_poste);
|
||||
$r.=HtmlInput::submit('bt_pdf',"Export en PDF");
|
||||
$r.= '</form>';
|
||||
*/
|
||||
$r.= '<form method="GET" action="export.php" style="display:inline">';
|
||||
$r.= HtmlInput::hidden("act","CSV:AncGrandLivre");
|
||||
$r.= HtmlInput::hidden("to",$this->to);
|
||||
|
|
|
|||
160
include/class_document_export.php
Normal file
160
include/class_document_export.php
Normal file
|
|
@ -0,0 +1,160 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Description of class_export_receipt
|
||||
*
|
||||
* @author dany
|
||||
*/
|
||||
class Document_Export
|
||||
{
|
||||
|
||||
function __construct()
|
||||
{
|
||||
// Create 2 temporary folders 1. convert to PDF + stamp
|
||||
// 2. store result
|
||||
$this->feedback = array();
|
||||
$this->store_convert = tempnam($_ENV['TMP'], 'convert_');
|
||||
$this->store_pdf = tempnam($_ENV['TMP'], 'pdf_');
|
||||
unlink($this->store_convert);
|
||||
unlink($this->store_pdf);
|
||||
umask(0);
|
||||
mkdir($this->store_convert);
|
||||
mkdir($this->store_pdf);
|
||||
}
|
||||
|
||||
function concatenate_pdf()
|
||||
{
|
||||
$stmt = PDFTK . " " . $this->store_pdf . '/stamp_*pdf output ' . $this->store_pdf . '/result.pdf';
|
||||
$status = 0;
|
||||
echo $stmt;
|
||||
passthru($stmt, $status);
|
||||
|
||||
if ($status <> 0)
|
||||
{
|
||||
$cnt_feedback = count($this->feedback);
|
||||
$this->feedback[$cnt_feedback]['file'] = 'result.pdf';
|
||||
$this->feedback[$cnt_feedback]['message'] = ' cannot concatenate PDF';
|
||||
$this->feedback[$cnt_feedback]['error'] = $status;
|
||||
}
|
||||
}
|
||||
|
||||
function move_file($p_source, $target)
|
||||
{
|
||||
copy($p_source, $this->store_pdf . '/' . $target);
|
||||
}
|
||||
|
||||
function send_pdf()
|
||||
{
|
||||
header('Content-Type: application/x-download');
|
||||
header('Content-Disposition: attachment; filename="result.pdf"');
|
||||
header('Cache-Control: private, max-age=0, must-revalidate');
|
||||
header('Pragma: public');
|
||||
echo file_get_contents($this->store_pdf . '/result.pdf');
|
||||
}
|
||||
|
||||
function clean_folder()
|
||||
{
|
||||
//unlink($this->store_convert . '/*.pdf');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief export all the pieces in PDF
|
||||
* @param $p_array contents all the jr_id
|
||||
*/
|
||||
function export_all($p_array)
|
||||
{
|
||||
ob_start();
|
||||
var_dump($p_array);
|
||||
global $cn;
|
||||
|
||||
$cn->start();
|
||||
foreach ($p_array as $value)
|
||||
{
|
||||
// For each file save it into the temp folder,
|
||||
$file = $cn->get_array('select jr_pj,jr_pj_name,jr_pj_number,jr_pj_type from jrn '
|
||||
. ' where jr_id=$1', array($value));
|
||||
if ($file[0]['jr_pj'] == '')
|
||||
continue;
|
||||
|
||||
$cn->lo_export($file[0]['jr_pj'], $this->store_convert . '/' . $file[0]['jr_pj_name']);
|
||||
|
||||
// Convert this file into PDF
|
||||
if ($file[0]['jr_pj_type'] != 'application/pdf')
|
||||
{
|
||||
$status = 0;
|
||||
passthru(OFFICE . " " . $this->store_convert . '/' . $file[0]['jr_pj_name'], $status);
|
||||
if ($status <> 0)
|
||||
{
|
||||
$this->feedback[$cnt_feedback]['file'] = $file[0]['jr_pj_name'];
|
||||
$this->feedback[$cnt_feedback]['message'] = ' cannot convert to PDF';
|
||||
$this->feedback[$cnt_feedback]['error'] = $status;
|
||||
$cnt_feedback++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// Create a image with the stamp + formula
|
||||
$img = imagecreatefromgif(__DIR__ . '/template/template.gif');
|
||||
$font = imagecolorallocatealpha($img, 100, 100, 100, 110);
|
||||
imagettftext($img, 40, 25, 500, 1000, $font, __DIR__ . '/tfpdf/font/unifont/DejaVuSans.ttf', _("Copie certifiée conforme à l'original"));
|
||||
imagettftext($img, 40, 25, 550, 1100, $font, __DIR__ . '/tfpdf/font/unifont/DejaVuSans.ttf', $file[0]['jr_pj_number']);
|
||||
imagettftext($img, 40, 25, 600, 1200, $font, __DIR__ . '/tfpdf/font/unifont/DejaVuSans.ttf', $file[0]['jr_pj_name']);
|
||||
imagegif($img, $this->store_convert . '/' . 'stamp.gif');
|
||||
|
||||
// transform gif file to pdf with convert tool
|
||||
$stmt = CONVERT_GIF_PDF . " " . escapeshellarg($this->store_convert . '/' . 'stamp.gif') . " " . escapeshellarg($this->store_convert . '/stamp.pdf');
|
||||
passthru($stmt, $status);
|
||||
|
||||
if ($status <> 0)
|
||||
{
|
||||
$this->feedback[$cnt_feedback]['file'] = 'stamp.pdf';
|
||||
$this->feedback[$cnt_feedback]['message'] = ' cannot convert to PDF';
|
||||
$this->feedback[$cnt_feedback]['error'] = $status;
|
||||
$cnt_feedback++;
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
// remove extension
|
||||
$ext = strrpos($file[0]['jr_pj_name'], ".");
|
||||
$file_pdf = substr($file[0]['jr_pj_name'], 0, $ext);
|
||||
$file_pdf .=".pdf";
|
||||
|
||||
// output
|
||||
$output = $this->store_convert . '/stamp_' . $file_pdf;
|
||||
|
||||
// Concatenate stamp + file
|
||||
$stmt = PDFTK . " " . escapeshellarg($this->store_convert . '/' . $file_pdf) . ' stamp ' . $this->store_convert .
|
||||
'/stamp.pdf output ' . $output;
|
||||
|
||||
passthru($stmt, $status);
|
||||
echo $stmt;
|
||||
if ($status <> 0)
|
||||
{
|
||||
|
||||
$this->feedback[$cnt_feedback]['file'] = $file_pdf;
|
||||
$this->feedback[$cnt_feedback]['message'] = ' cannot convert to stamped PDF';
|
||||
$this->feedback[$cnt_feedback]['error'] = $status;
|
||||
$cnt_feedback++;
|
||||
continue;
|
||||
}
|
||||
// Move the PDF into another temp directory
|
||||
$this->move_file($output, 'stamp_' . $file_pdf);
|
||||
}
|
||||
$this->concatenate_pdf();
|
||||
ob_clean();
|
||||
$this->send_pdf();
|
||||
|
||||
// remove files from "conversion folder"
|
||||
$this->clean_folder();
|
||||
var_dump($this->feedback);
|
||||
// concatenate all pdf into one
|
||||
}
|
||||
|
||||
}
|
||||
BIN
include/template/template.gif
Normal file
BIN
include/template/template.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.5 KiB |
94
release-note
94
release-note
|
|
@ -1,94 +0,0 @@
|
|||
===================================================================
|
||||
|| Done
|
||||
===================================================================
|
||||
|
||||
Favori
|
||||
======
|
||||
Permet d'avoir une liste qui apparaît dans une fenêtre interne avec
|
||||
les menus que vous utilisez le plus
|
||||
|
||||
Navigateur
|
||||
==========
|
||||
Permet d'accèder rapidement au menu nécessaire, il y a plus
|
||||
d'explication sur les menu
|
||||
|
||||
Impression journaux
|
||||
===================
|
||||
Anciennement appelé impression - historique -> changer dans menu_ref
|
||||
Permet impression des journaux vente et achat avec détail pour la TVA, la partie
|
||||
non déductible et la partie privée
|
||||
|
||||
Modéle d'opération
|
||||
==================
|
||||
Amélioration : Fenêtre interne avec filtrage et une description des
|
||||
modèles, la limite est plus élevée aussi
|
||||
|
||||
Impression journaux
|
||||
===================
|
||||
Anciennement appelé impression - historique -> changer dans menu_ref
|
||||
Permet impression des journaux vente et achat avec détail pour la TVA, la partie
|
||||
non déductible et la partie privée
|
||||
|
||||
|
||||
Protection fichier include
|
||||
==========================
|
||||
Ajout d'une sécurité supplémentaire
|
||||
|
||||
Préférence
|
||||
==========
|
||||
Dans fenêtre interne
|
||||
|
||||
Action - Suivi
|
||||
===============
|
||||
1. Ajout de tags (table tag et action_tag) (v)
|
||||
2. changement présentation liste (x)
|
||||
3. Ajout menu : CFGTAG pour gèrer les tags : description, nom ...
|
||||
4. Ajout d'un ou plusieurs tags par action, un tag n'est pas un type de document
|
||||
Sécurité : vérifier que l'utilisateur peut ajouter ou enlever des tags à une action
|
||||
Changement présentation Détail action : les détails (qui/quand) sont à mettre dans la colonne de gauche
|
||||
|
||||
Journaux
|
||||
========
|
||||
Suivi type de journal montrer ou cacher les bons détails
|
||||
Pour ACH indiquer Fournisseur (D) et Services ou Marchandises achetés
|
||||
Pour VEN indiquer Client (C) et Services ou Marchandises vendus
|
||||
Pour FIN indiquer Compte tiers (D/C) et surtout permettre de créer un fiche de type trésorerie (frd_id=4)
|
||||
|
||||
Fiche
|
||||
=====
|
||||
Si aucun quickcode n'est donné, il en sera calculé un en se basant sur le nom de la fiche (5ière lettre) + n° si duplicate
|
||||
code php
|
||||
fiche_def.inc.php
|
||||
|
||||
Action - Suivi
|
||||
===============
|
||||
Recherche par tag
|
||||
L'avoir dans les changements de page
|
||||
Tag repris dans le bouton retour
|
||||
Visible dans la recherche après une recherche
|
||||
Possibilité d'ajouter / enlever des tags à plusieurs documents
|
||||
Possibilité d'avoir une impression web de plusieurs documents
|
||||
Possibilité de changer l'état de plusieurs documents
|
||||
|
||||
Date de paiement
|
||||
================
|
||||
Lors de rapprochement
|
||||
Dans le détail journaux ACH et VEN
|
||||
Dans l'impression PRINTJRN + export CSV
|
||||
Dans l'historique
|
||||
|
||||
===================================================================
|
||||
|| A faire
|
||||
===================================================================
|
||||
|
||||
|
||||
Document à générer
|
||||
=================
|
||||
Par journal
|
||||
ou par profil
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,48 +1,8 @@
|
|||
insert into fiche_def_ref(frd_id,frd_text) values (26,'Projet');
|
||||
insert into attr_min (frd_id,ad_id) values (26,1),(26,9);
|
||||
|
||||
DROP VIEW v_detail_purchase;
|
||||
INSERT INTO menu_ref(
|
||||
me_code, me_menu, me_file, me_type)
|
||||
VALUES ('PDF:AncReceipt', 'Export pièce PDF', 'export_anc_receipt_pdf.php','PR');
|
||||
|
||||
CREATE OR REPLACE VIEW v_detail_purchase AS
|
||||
WITH m AS (
|
||||
SELECT sum(quant_purchase.qp_price) AS htva, sum(quant_purchase.qp_vat) AS tot_vat, jrn.jr_id
|
||||
FROM quant_purchase
|
||||
JOIN jrnx USING (j_id)
|
||||
JOIN jrn ON jrnx.j_grpt = jrn.jr_grpt_id
|
||||
GROUP BY jrn.jr_id
|
||||
)
|
||||
SELECT jrn.jr_id, jrn.jr_date, jrn.jr_date_paid,jr_ech,
|
||||
jrn.jr_tech_per, jrn.jr_comment,
|
||||
jrn.jr_pj_number, jrn.jr_internal,
|
||||
jrn.jr_def_id, jrnx.j_poste,
|
||||
jrnx.j_text, jrnx.j_qcode,
|
||||
quant_purchase.qp_fiche AS item_card, a.name AS item_name,
|
||||
quant_purchase.qp_supplier, b.vw_name AS tiers_name,
|
||||
b.quick_code, tva_rate.tva_label,
|
||||
tva_rate.tva_comment, tva_rate.tva_both_side, quant_purchase.qp_vat_sided AS vat_sided, quant_purchase.qp_vat_code AS vat_code, quant_purchase.qp_vat AS vat, quant_purchase.qp_price AS price, quant_purchase.qp_quantite AS quantity, quant_purchase.qp_price / quant_purchase.qp_quantite AS price_per_unit, quant_purchase.qp_nd_amount AS non_ded_amount, quant_purchase.qp_nd_tva AS non_ded_tva, quant_purchase.qp_nd_tva_recup AS non_ded_tva_recup, m.htva, m.tot_vat
|
||||
FROM jrn
|
||||
JOIN jrnx ON jrn.jr_grpt_id = jrnx.j_grpt
|
||||
JOIN quant_purchase USING (j_id)
|
||||
JOIN vw_fiche_name a ON quant_purchase.qp_fiche = a.f_id
|
||||
JOIN vw_fiche_attr b ON quant_purchase.qp_supplier = b.f_id
|
||||
JOIN tva_rate ON quant_purchase.qp_vat_code = tva_rate.tva_id
|
||||
JOIN m ON m.jr_id = jrn.jr_id;
|
||||
|
||||
DROP VIEW v_detail_sale;
|
||||
|
||||
CREATE OR REPLACE VIEW v_detail_sale AS
|
||||
WITH m AS (
|
||||
SELECT sum(quant_sold.qs_price) AS htva, sum(quant_sold.qs_vat) AS tot_vat, jrn.jr_id
|
||||
FROM quant_sold
|
||||
JOIN jrnx USING (j_id)
|
||||
JOIN jrn ON jrnx.j_grpt = jrn.jr_grpt_id
|
||||
GROUP BY jrn.jr_id
|
||||
)
|
||||
SELECT jrn.jr_id, jrn.jr_date, jrn.jr_date_paid,jr_ech,jrn.jr_tech_per, jrn.jr_comment, jrn.jr_pj_number, jrn.jr_internal, jrn.jr_def_id, jrnx.j_poste, jrnx.j_text, jrnx.j_qcode, quant_sold.qs_fiche AS item_card, a.name AS item_name, quant_sold.qs_client, b.vw_name AS tiers_name, b.quick_code, tva_rate.tva_label, tva_rate.tva_comment, tva_rate.tva_both_side, quant_sold.qs_vat_sided AS vat_sided, quant_sold.qs_vat_code AS vat_code, quant_sold.qs_vat AS vat, quant_sold.qs_price AS price, quant_sold.qs_quantite AS quantity, quant_sold.qs_price / quant_sold.qs_quantite AS price_per_unit, m.htva, m.tot_vat
|
||||
FROM jrn
|
||||
JOIN jrnx ON jrn.jr_grpt_id = jrnx.j_grpt
|
||||
JOIN quant_sold USING (j_id)
|
||||
JOIN vw_fiche_name a ON quant_sold.qs_fiche = a.f_id
|
||||
JOIN vw_fiche_attr b ON quant_sold.qs_client = b.f_id
|
||||
JOIN tva_rate ON quant_sold.qs_vat_code = tva_rate.tva_id
|
||||
join m on m.jr_id=jrn.jr_id;
|
||||
insert into profile_menu(me_code,p_id,p_type_display,pm_default) values ('PDF:AncReceipt',1,'P',0);
|
||||
Loading…
Add table
Add a link
Reference in a new issue