diff --git a/htdocs/donations/card.php b/htdocs/donations/card.php
index d5aeaedb56d..300e18f1ad0 100644
--- a/htdocs/donations/card.php
+++ b/htdocs/donations/card.php
@@ -376,7 +376,14 @@ if ($action == 'create')
if (! empty($id) && $action == 'edit')
{
- $object->fetch($id);
+ $result=$object->fetch($id);
+ if ($result < 0) {
+ dol_print_error($db,$object->error); exit;
+ }
+ $result=$object->fetch_optionals($object->id,$extralabels);
+ if ($result < 0) {
+ dol_print_error($db); exit;
+ }
$head = donation_prepare_head($object);
dol_fiche_head($head, $hselected, $langs->trans("Donation"), 0, 'generic');
@@ -454,9 +461,13 @@ if (! empty($id) && $action == 'edit')
}
// Other attributes
- $parameters=array('colspan' => ' colspan="1"');
- $reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action); // Note that $action and $object may have been modified by hook
-
+ $parameters=array();
+ $reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action); // Note that $action and $object may have been modified by hook
+ if (empty($reshook) && ! empty($extrafields->attribute_label))
+ {
+ print $object->showOptionals($extrafields,'edit');
+ }
+
print "\n";
print '
| '.$langs->trans('Country').' | ';
if (! empty($object->country_code))
@@ -623,8 +639,12 @@ if (! empty($id) && $action != 'edit')
}
// Other attributes
- $parameters=array('colspan' => ' colspan="1"');
- $reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action); // Note that $action and $object may have been modified by hook
+ $parameters=array();
+ $reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action); // Note that $action and $object may have been modified by hook
+ if (empty($reshook) && ! empty($extrafields->attribute_label))
+ {
+ print $object->showOptionals($extrafields);
+ }
print "\n";
print "\n";
diff --git a/htdocs/donations/class/don.class.php b/htdocs/donations/class/don.class.php
index 51c3958f2e6..478f4cce7c0 100644
--- a/htdocs/donations/class/don.class.php
+++ b/htdocs/donations/class/don.class.php
@@ -369,6 +369,24 @@ class Don extends CommonObject
$result = $this->db->query($sql);
if ($result)
{
+ // Actions on extra fields (by external module)
+ $hookmanager->initHooks(array('dondao'));
+ $parameters=array('id'=>$this->id);
+ $action='';
+ $reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks
+ if (empty($reshook))
+ {
+ if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used
+ {
+ $result=$this->insertExtraFields();
+ if ($result < 0)
+ {
+ $error++;
+ }
+ }
+ }
+ else if ($reshook < 0) $error++;
+
$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."don");
// Call trigger
@@ -429,7 +447,25 @@ class Don extends CommonObject
$result = $this->db->query($sql);
if ($result)
{
- // Call trigger
+ // Actions on extra fields (by external module)
+ $hookmanager->initHooks(array('dondao'));
+ $parameters=array('id'=>$this->id);
+ $action='';
+ $reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks
+ if (empty($reshook))
+ {
+ if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used
+ {
+ $result=$this->insertExtraFields();
+ if ($result < 0)
+ {
+ $error++;
+ }
+ }
+ }
+ else if ($reshook < 0) $error++;
+
+ // Call trigger
$result=$this->call_trigger('DON_UPDATE',$user);
if ($result < 0) { $error++; $this->db->rollback(); return -1; }
// End call triggers
@@ -463,6 +499,18 @@ class Don extends CommonObject
{
if ( $this->db->affected_rows($resql) )
{
+ // Removed extrafields
+ if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used
+ {
+ $result=$this->deleteExtraFields();
+ if ($result < 0)
+ {
+ $error++;
+ $errorflag=-4;
+ dol_syslog(get_class($this)."::delete error ".$errorflag." ".$this->error, LOG_ERR);
+ }
+ }
+
// Call trigger
$result=$this->call_trigger('DON_DELETE',$user);
if ($result < 0) { $error++; $this->db->rollback(); return -1; }
@@ -531,7 +579,7 @@ class Don extends CommonObject
$this->country_id = $obj->country_id;
$this->country_code = $obj->country_code;
$this->country = $obj->country;
- $this->country_olddata= $obj->country_olddata;
+ $this->country_olddata= $obj->country_olddata; // deprecated
$this->email = $obj->email;
$this->phone = $obj->phone;
$this->phone_mobile = $obj->phone_mobile;
@@ -545,6 +593,13 @@ class Don extends CommonObject
$this->note_private = $obj->note_private;
$this->note_public = $obj->note_public;
$this->commentaire = $obj->note; // deprecated
+
+ // Retrieve all extrafield for thirdparty
+ // fetch optionals attributes and labels
+ require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
+ $extrafields=new ExtraFields($this->db);
+ $extralabels=$extrafields->fetch_name_optionals_label($this->table_element,true);
+ $this->fetch_optionals($this->id,$extralabels);
}
return 1;
}
diff --git a/htdocs/donations/stats/index.php b/htdocs/donations/stats/index.php
new file mode 100644
index 00000000000..f6fc43ce90a
--- /dev/null
+++ b/htdocs/donations/stats/index.php
@@ -0,0 +1,357 @@
+
+ * Copyright (C) 2004-2013 Laurent Destailleur
+ * Copyright (C) 2005-2009 Regis Houssin
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+/**
+ * \file htdocs/donations/stats/index.php
+ * \ingroup donations
+ * \brief Page with donations statistics
+ */
+
+require '../../main.inc.php';
+require_once DOL_DOCUMENT_ROOT.'/donations/class/don.class.php';
+require_once DOL_DOCUMENT_ROOT.'/donations/class/donationstats.class.php';
+require_once DOL_DOCUMENT_ROOT.'/core/class/dolgraph.class.php';
+
+$WIDTH=DolGraph::getDefaultGraphSizeForStats('width');
+$HEIGHT=DolGraph::getDefaultGraphSizeForStats('height');
+
+$userid=GETPOST('userid','int');
+$socid=GETPOST('socid','int');
+// Security check
+if ($user->societe_id > 0)
+{
+ $action = '';
+ $socid = $user->societe_id;
+}
+
+$nowyear=strftime("%Y", dol_now());
+$year = GETPOST('year')>0?GETPOST('year'):$nowyear;
+//$startyear=$year-2;
+$startyear=$year-1;
+$endyear=$year;
+
+$langs->load("sendings");
+$langs->load("other");
+
+
+/*
+ * View
+ */
+
+$form=new Form($db);
+
+llxHeader();
+
+print_fiche_titre($langs->trans("StatisticsOfSendings"), $mesg);
+
+
+dol_mkdir($dir);
+
+$stats = new DonationStats($db, $socid, $mode, ($userid>0?$userid:0));
+
+// Build graphic number of object
+$data = $stats->getNbByMonthWithPrevYear($endyear,$startyear);
+//var_dump($data);exit;
+// $data = array(array('Lib',val1,val2,val3),...)
+
+
+if (!$user->rights->societe->client->voir || $user->societe_id)
+{
+ $filenamenb = $dir.'/shipmentsnbinyear-'.$user->id.'-'.$year.'.png';
+ if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=shipmentstats&file=shipmentsnbinyear-'.$user->id.'-'.$year.'.png';
+ if ($mode == 'supplier') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=shipmentstatssupplier&file=shipmentsnbinyear-'.$user->id.'-'.$year.'.png';
+}
+else
+{
+ $filenamenb = $dir.'/shipmentsnbinyear-'.$year.'.png';
+ if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=shipmentstats&file=shipmentsnbinyear-'.$year.'.png';
+ if ($mode == 'supplier') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=shipmentstatssupplier&file=shipmentsnbinyear-'.$year.'.png';
+}
+
+$px1 = new DolGraph();
+$mesg = $px1->isGraphKo();
+if (! $mesg)
+{
+ $px1->SetData($data);
+ $px1->SetPrecisionY(0);
+ $i=$startyear;$legend=array();
+ while ($i <= $endyear)
+ {
+ $legend[]=$i;
+ $i++;
+ }
+ $px1->SetLegend($legend);
+ $px1->SetMaxValue($px1->GetCeilMaxValue());
+ $px1->SetMinValue(min(0,$px1->GetFloorMinValue()));
+ $px1->SetWidth($WIDTH);
+ $px1->SetHeight($HEIGHT);
+ $px1->SetYLabel($langs->trans("NbOfSendings"));
+ $px1->SetShading(3);
+ $px1->SetHorizTickIncrement(1);
+ $px1->SetPrecisionY(0);
+ $px1->mode='depth';
+ $px1->SetTitle($langs->trans("NumberOfShipmentsByMonth"));
+
+ $px1->draw($filenamenb,$fileurlnb);
+}
+
+// Build graphic amount of object
+/*
+$data = $stats->getAmountByMonthWithPrevYear($endyear,$startyear);
+//var_dump($data);
+// $data = array(array('Lib',val1,val2,val3),...)
+
+if (!$user->rights->societe->client->voir || $user->societe_id)
+{
+ $filenameamount = $dir.'/shipmentsamountinyear-'.$user->id.'-'.$year.'.png';
+ if ($mode == 'customer') $fileurlamount = DOL_URL_ROOT.'/viewimage.php?modulepart=shipmentstats&file=shipmentsamountinyear-'.$user->id.'-'.$year.'.png';
+ if ($mode == 'supplier') $fileurlamount = DOL_URL_ROOT.'/viewimage.php?modulepart=shipmentstatssupplier&file=shipmentsamountinyear-'.$user->id.'-'.$year.'.png';
+}
+else
+{
+ $filenameamount = $dir.'/shipmentsamountinyear-'.$year.'.png';
+ if ($mode == 'customer') $fileurlamount = DOL_URL_ROOT.'/viewimage.php?modulepart=shipmentstats&file=shipmentsamountinyear-'.$year.'.png';
+ if ($mode == 'supplier') $fileurlamount = DOL_URL_ROOT.'/viewimage.php?modulepart=shipmentstatssupplier&file=shipmentsamountinyear-'.$year.'.png';
+}
+
+$px2 = new DolGraph();
+$mesg = $px2->isGraphKo();
+if (! $mesg)
+{
+ $px2->SetData($data);
+ $i=$startyear;$legend=array();
+ while ($i <= $endyear)
+ {
+ $legend[]=$i;
+ $i++;
+ }
+ $px2->SetLegend($legend);
+ $px2->SetMaxValue($px2->GetCeilMaxValue());
+ $px2->SetMinValue(min(0,$px2->GetFloorMinValue()));
+ $px2->SetWidth($WIDTH);
+ $px2->SetHeight($HEIGHT);
+ $px2->SetYLabel($langs->trans("AmountOfShipments"));
+ $px2->SetShading(3);
+ $px2->SetHorizTickIncrement(1);
+ $px2->SetPrecisionY(0);
+ $px2->mode='depth';
+ $px2->SetTitle($langs->trans("AmountOfShipmentsByMonthHT"));
+
+ $px2->draw($filenameamount,$fileurlamount);
+}
+*/
+
+/*
+$data = $stats->getAverageByMonthWithPrevYear($endyear, $startyear);
+
+if (!$user->rights->societe->client->voir || $user->societe_id)
+{
+ $filename_avg = $dir.'/shipmentsaverage-'.$user->id.'-'.$year.'.png';
+ if ($mode == 'customer') $fileurl_avg = DOL_URL_ROOT.'/viewimage.php?modulepart=shipmentstats&file=shipmentsaverage-'.$user->id.'-'.$year.'.png';
+ if ($mode == 'supplier') $fileurl_avg = DOL_URL_ROOT.'/viewimage.php?modulepart=shipmentstatssupplier&file=shipmentsaverage-'.$user->id.'-'.$year.'.png';
+}
+else
+{
+ $filename_avg = $dir.'/shipmentsaverage-'.$year.'.png';
+ if ($mode == 'customer') $fileurl_avg = DOL_URL_ROOT.'/viewimage.php?modulepart=shipmentstats&file=shipmentsaverage-'.$year.'.png';
+ if ($mode == 'supplier') $fileurl_avg = DOL_URL_ROOT.'/viewimage.php?modulepart=shipmentstatssupplier&file=shipmentsaverage-'.$year.'.png';
+}
+
+$px3 = new DolGraph();
+$mesg = $px3->isGraphKo();
+if (! $mesg)
+{
+ $px3->SetData($data);
+ $i=$startyear;$legend=array();
+ while ($i <= $endyear)
+ {
+ $legend[]=$i;
+ $i++;
+ }
+ $px3->SetLegend($legend);
+ $px3->SetYLabel($langs->trans("AmountAverage"));
+ $px3->SetMaxValue($px3->GetCeilMaxValue());
+ $px3->SetMinValue($px3->GetFloorMinValue());
+ $px3->SetWidth($WIDTH);
+ $px3->SetHeight($HEIGHT);
+ $px3->SetShading(3);
+ $px3->SetHorizTickIncrement(1);
+ $px3->SetPrecisionY(0);
+ $px3->mode='depth';
+ $px3->SetTitle($langs->trans("AmountAverage"));
+
+ $px3->draw($filename_avg,$fileurl_avg);
+}
+*/
+
+
+// Show array
+$data = $stats->getAllByYear();
+$arrayyears=array();
+foreach($data as $val) {
+ if (! empty($val['year'])) {
+ $arrayyears[$val['year']]=$val['year'];
+ }
+}
+if (! count($arrayyears)) $arrayyears[$nowyear]=$nowyear;
+
+$h=0;
+$head = array();
+$head[$h][0] = DOL_URL_ROOT . '/commande/stats/index.php?mode='.$mode;
+$head[$h][1] = $langs->trans("ByMonthYear");
+$head[$h][2] = 'byyear';
+$h++;
+
+$type='shipment_stats';
+
+complete_head_from_modules($conf,$langs,null,$head,$h,$type);
+
+dol_fiche_head($head,'byyear',$langs->trans("Statistics"));
+
+
+print '';
+
+
+//if (empty($socid))
+//{
+ // Show filter box
+ print ' ';
+ print ' ';
+//}
+
+print ' ';
+print '';
+print '| '.$langs->trans("Year").' | ';
+print ''.$langs->trans("NbOfSendings").' | ';
+/*print ''.$langs->trans("AmountTotal").' | ';
+print ''.$langs->trans("AmountAverage").' | ';*/
+print ' ';
+
+$oldyear=0;
+foreach ($data as $val)
+{
+ $year = $val['year'];
+ while (! empty($year) && $oldyear > $year+1)
+ { // If we have empty year
+ $oldyear--;
+ print '';
+ print '| '.$oldyear.' | ';
+
+ print '0 | ';
+ /*print '0 | ';
+ print '0 | ';*/
+ print ' ';
+ }
+
+ print '';
+ print '| '.$year.' | ';
+ print ''.$val['nb'].' | ';
+ /*print ''.price(price2num($val['total'],'MT'),1).' | ';
+ print ''.price(price2num($val['avg'],'MT'),1).' | ';*/
+ print ' ';
+ $oldyear=$year;
+}
+
+print ' ';
+
+
+print ' ';
+
+
+// Show graphs
+print ' ';
+if ($mesg) { print $mesg; }
+else {
+ print $px1->show();
+ print " \n";
+ /*print $px2->show();
+ print " \n";
+ print $px3->show();*/
+}
+print ' |
';
+
+
+print ' ';
+print '';
+
+dol_fiche_end();
+
+
+
+// TODO USe code similar to commande/stats/index.php instead of this one.
+/*
+print '';
+print '| '.$langs->trans("Year").' | ';
+print ''.$langs->trans("NbOfSendings").' | ';
+
+$sql = "SELECT count(*) as nb, date_format(date_expedition,'%Y') as dm";
+$sql.= " FROM ".MAIN_DB_PREFIX."expedition";
+$sql.= " WHERE fk_statut > 0";
+$sql.= " AND entity = ".$conf->entity;
+$sql.= " GROUP BY dm DESC";
+
+$resql=$db->query($sql);
+if ($resql)
+{
+ $num = $db->num_rows($resql);
+ $i = 0;
+ while ($i < $num)
+ {
+ $row = $db->fetch_row($resql);
+ $nbproduct = $row[0];
+ $year = $row[1];
+ print "";
+ print '| '.$year.' | '.$nbproduct.' | ';
+ $i++;
+ }
+}
+$db->free($resql);
+
+print ' ';
+*/
+
+print ' ';
+print ''.$langs->trans("StatsOnShipmentsOnlyValidated").'';
+
+llxFooter();
+
+$db->close();
|