From c7b25ec49719f6d5ec543addc726001721104c90 Mon Sep 17 00:00:00 2001
From: aspangaro <alexandre.spangaro@gmail.com>
Date: Mon, 21 Dec 2015 06:51:46 +0100
Subject: [PATCH] Review page init accountancy

---
 htdocs/accountancy/admin/productaccount.php | 107 ++++++++++----------
 htdocs/langs/en_US/accountancy.lang         |  15 +--
 2 files changed, 60 insertions(+), 62 deletions(-)

diff --git a/htdocs/accountancy/admin/productaccount.php b/htdocs/accountancy/admin/productaccount.php
index 0bea58fd75c..58cf5768595 100644
--- a/htdocs/accountancy/admin/productaccount.php
+++ b/htdocs/accountancy/admin/productaccount.php
@@ -22,17 +22,18 @@
 /**
  * \file		htdocs/accountancy/admin/productaccount.php
  * \ingroup		Accounting Expert
- * \brief		Onglet de gestion de parametrages des ventilations
+ * \brief		To define accounting account on product / service
  */
 require '../../main.inc.php';
 
 // Class
-require_once DOL_DOCUMENT_ROOT . '/core/lib/report.lib.php';
-require_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php';
-require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php';
-require_once DOL_DOCUMENT_ROOT . '/accountancy/class/html.formventilation.class.php';
-require_once DOL_DOCUMENT_ROOT . '/accountancy/class/accountingaccount.class.php';
-require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/report.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/accountancy/class/html.formventilation.class.php';
+require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingaccount.class.php';
+require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
 
 // Langs
 $langs->load("companies");
@@ -40,6 +41,10 @@ $langs->load("compta");
 $langs->load("main");
 $langs->load("accountancy");
 
+// Security check
+if (!$user->admin) accessforbidden();
+if (empty($conf->accounting->enabled)) accessforbidden();
+
 // search & action GETPOST
 $action = GETPOST('action');
 $codeventil_buy = GETPOST('codeventil_buy', 'array');
@@ -79,7 +84,7 @@ if (! $sortfield)
 if (! $sortorder)
 	$sortorder = "ASC";
 	
-	// sales or purchase
+// Sales or Purchase mode ?
 if ($action == 'update') {
 	if (! empty($btn_changetype)) {
 		$error = 0;
@@ -128,12 +133,12 @@ if ($action == 'update') {
 						$sql .= " SET accountancy_code_sell = " . $accounting->account_number;
 					}
 					$sql .= " WHERE rowid = " . $productid;
-					
+
 					dol_syslog("/accountancy/admin/productaccount.php sql=" . $sql, LOG_DEBUG);
 					if ($db->query($sql)) {
-						$msg .= '<div><font color="green">' . $langs->trans("Product") . ' ' . $productid . ' ' . $langs->trans("VentilatedinAccount") . ' : ' . $monCompte . '</font></div>';
+						$msg .= '<div><font color="green">' . $langs->trans("Product") . ' ' . $productid . ' ' . $langs->trans("VentilatedinAccount") . ' : ' . length_accountg($accounting->account_number) . '</font></div>';
 					} else {
-						$msg .= '<div><font color="red">' . $langs->trans("ErrorDB") . ' : ' . $langs->trans("Product") . ' ' . $productid . ' ' . $langs->trans("NotVentilatedinAccount") . ' : ' . $accounting->account_number . '<br/> <pre>' . $sql . '</pre></font></div>';
+						$msg .= '<div><font color="red">' . $langs->trans("ErrorDB") . ' : ' . $langs->trans("Product") . ' ' . $productid . ' ' . $langs->trans("NotVentilatedinAccount") . ' : ' . length_accountg($accounting->account_number) . '<br/> <pre>' . $sql . '</pre></font></div>';
 					}
 				}
 				
@@ -147,13 +152,6 @@ if ($action == 'update') {
 	}
 }
 
-// Security check
-if ($user->societe_id > 0)
-	accessforbidden();
-	// TODO after adding menu
-	// if (! $user->rights->accounting->ventilation->dispatch)
-	// accessforbidden();
-
 $form = new FormVentilation($db);
 
 // Defaut AccountingAccount RowId Product / Service
@@ -179,13 +177,12 @@ if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both
 	$search_desc = '';
 }
 
-// debug move header to top
-llxHeader('', $langs->trans("Accounts"));
-
 /*
  * View
  */
 
+llxHeader('', $langs->trans("Accounts"));
+
 print '<script type="text/javascript">
 			$(function () {
 				$(\'#select-all\').click(function(event) {
@@ -209,7 +206,7 @@ $sql .= " WHERE (";
 
 $pcgver = $conf->global->CHARTOFACCOUNTS;
 
-IF ($accounting_product_mode == 'ACCOUNTANCY_BUY' ? ' checked' : '') {
+if ($accounting_product_mode == 'ACCOUNTANCY_BUY' ? ' checked' : '') {
 	$sql .= " p.accountancy_code_buy ='' OR p.accountancy_code_buy IS NULL";
 	$sql .= " OR (p.accountancy_code_buy  IS NOT NULL AND p.accountancy_code_buy  != '' AND p.accountancy_code_buy  NOT IN
 	(SELECT aa.account_number FROM " . MAIN_DB_PREFIX . "accounting_account as aa , " . MAIN_DB_PREFIX . "accounting_system as asy  WHERE fk_pcg_version = asy.pcg_version AND asy.rowid = " . $pcgver . "))";
@@ -241,28 +238,29 @@ if ($result) {
 	$num_lines = $db->num_rows($result);
 	$i = 0;
 	
-	/*
- * View
- */
-	print_barre_liste($langs->trans("ProductAccountingAccountSelect"), $page, $_SERVER["PHP_SELF"], "", $sortfield, $sortorder, '', $num_lines);
-	
+	print load_fiche_titre($langs->trans("InitAccountancy"),'','title_setup');
+	print '<br>';
+
+	print $langs->trans("InitAccountancyDesc").'<br>';
+	print '<br>';
+
 	print '<form action="' . $_SERVER["PHP_SELF"] . '" method="post">';
 	print '<input type="hidden" name="token" value="' . $_SESSION['newtoken'] . '">';
 	print '<input type="hidden" name="action" value="update">';
 	
 	print '<table class="noborder" width="100%">';
 	print '<tr class="liste_titre">';
-	print '<td>' . $langs->trans('OptionMode') . '</td><td>' . $langs->trans('Description') . '</td>';
+	print '<td>' . $langs->trans('Options') . '</td><td>' . $langs->trans('Description') . '</td>';
 	print "</tr>\n";
-	print '<tr ' . $bc[false] . '><td width="200"><input type="radio" name="accounting_product_mode" value="ACCOUNTANCY_SELL"' . ($accounting_product_mode != 'ACCOUNTANCY_BUY' ? ' checked' : '') . '> ' . $langs->trans('Accountancy_code_sell') . '</td>';
-	print '<td colspan="2">' . nl2br($langs->trans('OptionModeProductSell'));
+	print '<tr ' . $bc[false] . '><td width="25%"><input type="radio" name="accounting_product_mode" value="ACCOUNTANCY_SELL"' . ($accounting_product_mode != 'ACCOUNTANCY_BUY' ? ' checked' : '') . '> ' . $langs->trans('OptionModeProductSell') . '</td>';
+	print '<td colspan="2">' . nl2br($langs->trans('OptionModeProductSellDesc'));
 	print "</td></tr>\n";
-	print '<tr ' . $bc[true] . '><td width="200"><input type="radio" name="accounting_product_mode" value="ACCOUNTANCY_BUY"' . ($accounting_product_mode == 'ACCOUNTANCY_BUY' ? ' checked' : '') . '> ' . $langs->trans('Accountancy_code_buy') . '</td>';
-	print '<td colspan="2">' . nl2br($langs->trans('OptionModeProductBuy')) . "</td></tr>\n";
+	print '<tr ' . $bc[true] . '><td><input type="radio" name="accounting_product_mode" value="ACCOUNTANCY_BUY"' . ($accounting_product_mode == 'ACCOUNTANCY_BUY' ? ' checked' : '') . '> ' . $langs->trans('OptionModeProductBuy') . '</td>';
+	print '<td colspan="2">' . nl2br($langs->trans('OptionModeProductBuyDesc')) . "</td></tr>\n";
 	
 	print "</table>\n";
 	
-	print '<br /><div style="text-align:center"><input type="submit" class="button" value="' . $langs->trans('Modify') . '" name="changetype"></div>';
+	print '<br /><div align="right"><input type="submit" class="button" value="' . $langs->trans('Modify') . '" name="changetype"></div>';
 	
 	print "<br>\n";
 	
@@ -270,33 +268,29 @@ if ($result) {
 		print $msg;
 	}
 	
-	// print '<td align="left"><b>' . $langs->trans("DescProductAccountingAccount") . '</b></td>&nbsp;';
-	// print_liste_field_titre($langs->trans("RowId"), $_SERVER["PHP_SELF"], "p.rowid", "", $param, '', $sortfield, $sortorder);
-	print '&nbsp;&nbsp;';
-	
 	print '<table class="noborder" width="100%">';
 	print '<tr class="liste_titre">';
 	print_liste_field_titre($langs->trans("Ref"), $_SERVER["PHP_SELF"], "p.ref", "", $param, '', $sortfield, $sortorder);
 	print_liste_field_titre($langs->trans("Label"), $_SERVER["PHP_SELF"], "p.label", "", $param, '', $sortfield, $sortorder);
 	print_liste_field_titre($langs->trans("Description"), $_SERVER["PHP_SELF"], "l.description", "", $param, '', $sortfield, $sortorder);
+	/*
 	if ($accounting_product_mode == 'ACCOUNTANCY_BUY') {
-		print '<th align="left">' . $langs->trans("Accountancy_code_buy") . '</td>';
-		print '<th align="left">' . $langs->trans("Accountancy_code_buy_suggest") . '</td>';
+		print_liste_field_titre($langs->trans("Accountancy_code_buy"));
 	} else {
-		print '<th align="left">' . $langs->trans("Accountancy_code_sell") . '</td>';
-		print '<th align="left">' . $langs->trans("Accountancy_code_sell_suggest") . '</td>';
+		print_liste_field_titre($langs->trans("Accountancy_code_sell"));
 	}
-	// print_liste_field_titre('');
-	print_liste_field_titre($langs->trans("Ventilate") . '<br><label id="select-all">' . $langs->trans('All') . '</label> / <label id="unselect-all">' . $langs->trans('None') . '</label>');
+	*/
+	print_liste_field_titre($langs->trans("AccountAccounting"));
+	print_liste_field_titre($langs->trans("Modify") . '<br><label id="select-all">' . $langs->trans('All') . '</label> / <label id="unselect-all">' . $langs->trans('None') . '</label>','','','','','align="center"');
 	print '</tr>';
 	
 	print '<tr class="liste_titre">';
-	print '<td class="liste_titre"><input type="text" class="flat" size="20" name="search_ref" value="' . $search_ref . '"></td>';
+	print '<td class="liste_titre"><input type="text" class="flat" size="10" name="search_ref" value="' . $search_ref . '"></td>';
 	print '<td class="liste_titre"><input type="text" class="flat" size="20" name="search_label" value="' . $search_label . '"></td>';
 	print '<td class="liste_titre"><input type="text" class="flat" size="30" name="search_desc" value="' . $search_desc . '"></td>';
 	
-	print '<td class="liste_titre" colspan="2">&nbsp;</td>';
-	print '<td align="right" class="liste_titre">';
+	print '<td class=liste_titre">&nbsp;</td>';
+	print '<td align="center" class="liste_titre">';
 	print '<input type="image" class="liste_titre" src="' . img_picto($langs->trans("Search"), 'search.png', '', '', 1) . '" name="button_search" value="' . dol_escape_htmltag($langs->trans("Search")) . '" title="' . dol_escape_htmltag($langs->trans("Search")) . '">';
 	print '&nbsp;';
 	print '<input type="image" class="liste_titre" src="' . img_picto($langs->trans("Search"), 'searchclear.png', '', '', 1) . '" name="button_removefilter" value="' . dol_escape_htmltag($langs->trans("RemoveFilter")) . '" title="' . dol_escape_htmltag($langs->trans("RemoveFilter")) . '">';
@@ -349,13 +343,13 @@ if ($result) {
 		// TODO ADJUST DESCRIPTION SIZE
 		// print '<td align="left">' . $obj->description . '</td>';
 		// TODO: we shoul set a user defined value to adjust user square / wide screen size
-		$trunclengh = defined('ACCOUNTING_LENGTH_DESCRIPTION') ? ACCOUNTING_LENGTH_DESCRIPTION : 32;
+		$trunclengh = defined('ACCOUNTING_LENGTH_DESCRIPTION') ? ACCOUNTING_LENGTH_DESCRIPTION : 64;
 		print '<td style="' . $code_sell_p_l_differ . '">' . nl2br(dol_trunc($obj->description, $trunclengh)) . '</td>';
 		
-		// acountingaccount buy
-		
-		if ($accounting_product_mode == 'ACCOUNTANCY_BUY') {
-			print '<td align="left">' . $obj->accountancy_code_buy . '</td>';
+		// Accounting account buy
+		if ($accounting_product_mode == 'ACCOUNTANCY_BUY')
+		{
+			// print '<td align="left">' . $obj->accountancy_code_buy . '</td>';
 			// TODO: replace by select
 			// print '<td align="left">' . $compta_prodbuy . '</td>';
 			// TODO: we shoul set a user defined value to adjust user square / wide screen size
@@ -363,10 +357,11 @@ if ($result) {
 			print '<td align="left">';
 			print $form->select_account($compta_prodbuy_id, 'codeventil_'.$product_static->id, 1);
 			print '</td>';
-		} else {
-			
-			// acountingaccount sel
-			print '<td align="left">' . $obj->accountancy_code_sell . '</td>';
+		} 
+		else
+		{	
+			// Accounting account sell
+			// print '<td align="left">' . $obj->accountancy_code_sell . '</td>';
 			// TODO: replace by select
 			// TODO: we shoul set a user defined value to adjust user square / wide screen size
 			// $trunclenghform = defined('ACCOUNTING_LENGTH_DESCRIPTION_ACCOUNT') ? ACCOUNTING_LENGTH_DESCRIPTION_ACCOUNT : 50;
@@ -383,7 +378,7 @@ if ($result) {
 		$i ++;
 	}
 	print '</table>';
-	print '<br><div align="center"><input type="submit" class="butAction" name="changeaccount" value="' . $langs->trans("Change_Account") . '"></div>';
+	print '<br><div align="right"><input type="submit" class="butAction" name="changeaccount" value="' . $langs->trans("Validate") . '"></div>';
 	print '</form>';
 	
 	$db->free($result);
diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang
index dad6b236d92..c959e141910 100644
--- a/htdocs/langs/en_US/accountancy.lang
+++ b/htdocs/langs/en_US/accountancy.lang
@@ -26,7 +26,6 @@ Selectmodelcsv=Select a model of export
 Modelcsv_normal=Classic export
 Modelcsv_CEGID=Export towards CEGID Expert
 BackToChartofaccounts=Return chart of accounts
-Back=Return
 
 Definechartofaccounts=Define a chart of accounts
 Selectchartofaccounts=Select a chart of accounts
@@ -109,10 +108,6 @@ DelBookKeeping=Delete the records of the general ledger
 
 DescSellsJournal=Sales journal
 DescPurchasesJournal=Purchases journal
-BankJournal=Bank journal
-DescBankJournal=Bank journal including all the types of payments other than cash
-CashJournal=Cash journal
-DescCashJournal=Cash journal including the type of payment cash
 FinanceJournal=Finance journal
 DescFinanceJournal=Finance journal including all the types of payments by bank account
 
@@ -167,5 +162,13 @@ Headername=Name in header
 Type=Type of fields
 Param=Additionnal parameters
 EnabledProduct=In Product
-EnabledTiers=In Tiers
+EnabledTiers=In third party
 EnabledVat=In Vat
+## Tools - Init accounting account on product / service
+InitAccountancy=Init accountancy
+InitAccountancyDesc=This page can be used to initialize an accounting account on products and services that does not have accountancy account defined for sales and purchases. Check before that setup of module accountancy is complete.
+Options=Options
+OptionModeProductSell=Mode sales
+OptionModeProductBuy=Mode purchases
+OptionModeProductSellDesc=Show all products with no accounting account defined for sales.
+OptionModeProductBuyDesc=Show all products with no accounting account defined for purchases.
\ No newline at end of file
-- 
GitLab