title=_('Recherche de fiche'); $search_card->value=''; echo $search_card->input(); /*! * \brief Parse the file and insert the record * into the table import_tmp. Insert in a temporary table, if * no confirmation is given then the data are removed otherwise * records are inserted into import_tmp. Following * the choosen bank a different file is included to * to parse the CSV, take the cbc_be.inc.php as template * * \param $p_cn database connection * \param $file the uploaded file * \param $p_bq_account the bank account (target) * \param $p_format_csv file to include (depending of the bank) *@todo this function doesn't update the table quant_fin, it must be done * Run first the fill_quant_fin *@see upgrade76.sql */ function ImportCSV($p_cn,$file,$p_bq_account,$p_format_csv,$p_jrn) { if(!$handle = fopen($file, "r")) { print 'could not open file. quitting'; die; } $p_cn->start(); // include the right format for CSV --> given by the
commit(); } /*!\brief This function show a record from the table import_tmp, the tag for the form * are not included in the function and must set in the calling proc. * \param $p_val array (row from import_type) * \param $counter a counter used in the form * \param $p_cn database connection * \param $p_form indicates if the button for the form is enable, * modify the Quick Code or remove record poss.value are form, remove */ function ShowBox($p_val,$counter,$p_cn,$p_form='form') { $w=new ICard(); $w->jrn=$p_val['jrn']; $w->name='poste'.$counter; $w->extra='filter'; $w->typecard='cred'; $w->set_dblclick("fill_ipopcard(this);"); $w->set_attribute('ipopup','ipopcard'); $w->set_callback('filter_card'); $w->set_function('fill_data'); $w->table=0; if ( $p_form == 'remove' ) $w->readOnly=true; $oJrn=new Acc_Ledger($p_cn,$p_val['jrn']); // widget concerned $wConcerned=new IConcerned(); $wConcerned->name="e_concerned"+$counter; $wConcerned->extra=abs($p_val['montant']); $wConcerned->extra2='paid'; $wConcerned->label=_('op. concernée'); $wConcerned->table=0; $wConcerned->value=$p_val['jr_rapt']; $s=new ISpan(); // if in readonly retrieve the conc. ope if ( $p_form== 'remove') { $wConcerned->readOnly=true; } if ( isset($p_val['poste_comptable'])) { $w->value=$p_val['poste_comptable']; $cn=new Database(dossier::id()); $f=new Fiche($p_cn); $f->get_by_qcode($p_val['poste_comptable']); $s->value=$f->strAttribut(ATTR_DEF_NAME); } echo ''; echo ''; echo HtmlInput::hidden('p_jrn',$p_val['jrn']); echo ''; echo ''; echo ""; echo ''; echo ''; echo '"; echo ""; if ( $p_form == 'form') { $str_update=sprintf("import_update('%s','%s');", dossier::id(), $counter); $str_remove=sprintf("import_remove('%s','%s');", dossier::id(), $counter); echo ''; } if ($p_form == 'remove' ) { $str_notconfi=sprintf("import_not_confirmed('%s','%s');", dossier::id(), $counter); echo ''; } echo '
'.$p_val['code'].''.$p_val['date_exec'].''.$p_val['montant'].' EUR
"._('Journal')." : ".$oJrn->get_name().""._('poste comptable Destination')." : ".$p_val['bq_account']."
'.$p_val['detail'].'
'.$wConcerned->input("e_concerned".$counter).'
'.$w->search().$w->input().' '.$s->input('poste'.$counter.'_label'). "n° compte : ".$p_val['num_compte']."'; echo ''. '
'; } /*!\brief Verify the import */ function VerifImport($p_cn) { $sql = "select * from import_tmp where status='n' ". " order by date_exec,code"; $Res=$p_cn->exec_sql($sql); $Num=Database::num_row($Res); echo $Num._(" opérations à complèter")."

"; // include javascript for popup echo JS_CARD; echo JS_LEDGER; echo JS_AJAX_FICHE; for ( $i=0;$i< $Num;$i++) { $val = Database::fetch_array($Res,$i); echo ''; echo dossier::hidden(); ShowBox($val,$i,$p_cn,'form'); echo '
'; } } /*!\brief ConfirmCSV shows the operation which are going to be transfered * * \param $p_cn database conx * \param $periode user's periode */ function ConfirmTransfert($p_cn,$periode) { $sql = "select to_char(p_start,'DD-MM-YYYY') as p_start,to_char(p_end,'DD-MM-YYYY') as p_end". " from parm_periode where p_id = '".$periode."'"; $Res=$p_cn->exec_sql($sql); $val = Database::fetch_array($Res); if ( $val == false ) { alert (_('Vous devez selectionner votre période dans vos préférences')); exit(); } $start ="to_date('".$val['p_start']."','DD-MM-YYYY')"; $end = "to_date('".$val['p_end']."','DD-MM-YYYY')"; $sql = "select code,to_char(date_exec,'DD.MM.YYYY') as date_exec, ". " montant,num_compte,poste_comptable,bq_account,jrn,detail,jr_rapt ". " from import_tmp where status = 'w' AND date_exec BETWEEN ".$start." and ".$end; $Res=$p_cn->exec_sql($sql); $Num=Database::num_row($Res); echo $Num." "._("opérations à transfèrer")."

"; if ( $Num == 0 ) return; for ( $i=0;$i<$Num;$i++) { $val = Database::fetch_array($Res,$i); echo '
'; echo dossier::hidden(); echo ''; ShowBox($val,$i,$p_cn,'remove'); echo '
'; } echo '
'; echo dossier::hidden(); /* to avoid double post */ $mt=microtime(true); echo HtmlInput::hidden('mt',$mt); echo HtmlInput::hidden("action" ,"transfer"); echo HtmlInput::hidden("period" ,$periode); echo HtmlInput::submit("sub",_("Commencer le transfert")); echo '
'; } /*!\brief Transfert data into the ledger * set the column import_tmp.status to w (wait) if the account is not correct * otherwise transfert it to the ledger and set the column import_tmp.status * to t (transfert) * \param $p_cn connx * \param $periode periode */ function TransferCSV($p_cn, $periode) { //on obtient la période courante $User=new User($p_cn); $periode = $User->get_periode(); // on trouve les dates frontières de cette période $sql = "select to_char(p_start,'DD-MM-YYYY') as p_start,to_char(p_end,'DD-MM-YYYY') as p_end". " from parm_periode where p_id = '".$periode."'"; $Res=$p_cn->exec_sql($sql); $val = Database::fetch_array($Res); if ( $val == false ) { alert (_('Vous devez selectionner votre période dans vos préférences')); exit(); } $start ="to_date('".$val['p_start']."','DD-MM-YYYY')"; $end = "to_date('".$val['p_end']."','DD-MM-YYYY')"; $sql = "select code,to_char(date_exec,'DD.MM.YYYY') as date_exec, ". " montant,num_compte,poste_comptable,bq_account,jrn,detail,jr_rapt,it_pj ". " from import_tmp where ". " status= 'w' AND date_exec BETWEEN ".$start." and ".$end; try { $p_cn->start(); $ResAll=$p_cn->exec_sql($sql); $Max=Database::num_row($ResAll); echo $Max." opérations à transférer.
"; for ($i = 0;$i < $Max;$i++) { $val=Database::fetch_array($ResAll,$i); $code=$val['code']; $date_exec=$val['date_exec']; $montant=$val['montant']; $num_compte=$val['num_compte']; $poste_comptable=$val['poste_comptable']; $bq_account=$val['bq_account']; $jrn=$val['jrn']; $oJrn=new Acc_Ledger($p_cn,$jrn); $detail=$val['detail']; $jr_rapt=$val['jr_rapt']; // Retrieve the account thx the quick code $f=new Fiche($p_cn); $quick_code=$poste_comptable; $f->get_by_qcode($poste_comptable,false); $poste_comptable=$f->strAttribut(ATTR_DEF_ACCOUNT); $f->get_by_qcode($bq_account); $bq_poste=$f->strAttribut(ATTR_DEF_ACCOUNT); // Vérification que le poste comptable trouvé existe if ( $poste_comptable == NOTFOUND || strlen(trim($poste_comptable))==0) $test=0; else { $sqltest = "select * from tmp_pcmn WHERE pcm_val=$1"; $Restest=$p_cn->exec_sql($sqltest,array($poste_comptable)); $test=Database::num_row($Restest); } // Test it if($test == 0) { $sqlupdate = "update import_tmp set status='n' WHERE code=$1 or num_compte is null"; $Resupdate=$p_cn->exec_sql($sqlupdate,array($code)); echo _("Poste comptable erronné pour l'opération ").$num_compte."-".$code.", ".("réinitialisation du poste comptable")."
"; continue; } // Finances $seq=$p_cn->get_next_seq('s_grpt'); $p_user = $_SESSION['g_user']; $acc_op=new Acc_Operation($p_cn); $acc_op->amount=$montant; $acc_op->desc=$detail; $acc_op->type="d"; $acc_op->date=$date_exec; $acc_op->user=$p_user; $acc_op->poste=$bq_poste; $acc_op->grpt=$seq; $acc_op->jrn=$jrn; $acc_op->periode=$periode; $acc_op->qcode=$bq_account; $acc_op->mt=$_REQUEST['mt']; $r=$acc_op->insert_jrnx(); $acc_op->type="c"; $acc_op->poste=$poste_comptable; $acc_op->amount=$montant; $acc_op->qcode=$quick_code; $r=$acc_op->insert_jrnx(); //remove annoying double-quote $num_compte=str_replace('"','',$num_compte); $code=str_replace('\"','',$code); $acc_op->comment=$detail.$num_compte." ".$code; $jr_id=$acc_op->insert_jrn(); $sql="update jrn set jr_pj_number=$1 where jr_id=$2"; $p_cn->exec_sql($sql,array($val['it_pj'],$jr_id)); $internal=$oJrn->compute_internal_code($seq); $Res=$p_cn->exec_sql("update jrn set jr_internal=$1 where jr_id = $2",array($internal,$jr_id)); // insert rapt $acc_reconc=new Acc_Reconciliation($p_cn); $acc_reconc->set_jr_id=$jr_id; $acc_reconc->insert($jr_rapt); echo _("Tranfert de l'opération ").$code._(" effectué")."
"; $sql2 = "update import_tmp set status='t' where code='".$code."'"; $Res2=$p_cn->exec_sql($sql2); } } catch (Exception $e) { $p_cn->rollback(); echo ''. 'Erreur dans '.__FILE__.':'.__LINE__. ' Message = '.$e->getMessage(). ''; } $p_cn->commit(); } /*! * \brief ShowForm for getting data about * the bank transfert in cvs * * \param $p_cn database connection */ function ShowFormTransfert($p_cn) { $w=new ISelect(); echo '
'; echo dossier::hidden(); echo '
'; // ask for the journal target $jrn=$p_cn->make_array ("select jrn_def_id,jrn_def_name from jrn_def where jrn_def_type='FIN';"); $w->label=_('Journal'); echo $w->label." :".$w->input('import_jrn',$jrn)."
"; // choose the bank account $banque=new Acc_Parm_Code($p_cn,'BANQUE'); $caisse=new Acc_Parm_Code($p_cn,'CAISSE'); $sql="select j_qcode,vw_name from vw_poste_qcode join vw_fiche_attr on (j_qcode=quick_code) where j_poste::text like ".$caisse->p_value."||'%' or j_poste::text like ".$banque->p_value."::text||'%'"; $bq=$p_cn->make_array($sql); $w->label='Banque'; echo "Compte en banque :".$w->input('import_bq',$bq)."
"; $format_csv=$p_cn->make_array("select include_file,name from format_csv_banque;"); $w->label="Format import"; echo $w->label.$w->input('format_csv',$format_csv).'
'; echo HtmlInput::submit("Import fiche",_("Import fiche")); echo '
'; } ?>