دليل الحسابات يُعتبر أحد العناصر الأساسية في إدارة الحسابات المالية لأي منظمة أو شركة. يتمثل دليل الحسابات في مجموعة هرمية من الحسابات المالية المنظمة بشكل منطقي وهرمي يعكس هيكل الشركة ونشاطاتها المالية
Chart of Accounts by php and javascript جدول المحتويات
انشاء قواعد البيانات
في البداية يجب انشاء قاعدة بيانات phpmyadmin باسم ChartOfAccounts كما موضح بالصورة وباستخدام الكود التالي:
CREATE DATABASE ChartOfAccounts ;
ثم نضغط زر Go
بذلك قد انشانا قاعدة بيانات . بعد ذلك نقوم بانشاء الجداول عن طريق الاكواد التالية
// category جدول
CREATE TABLE category (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
parent_id VARCHAR(25),
code VARCHAR(25),
coins_id int(11),
levels_id int(11)
)
جدول الفئات يحتوي علي اسماء دليل الحسابات واسم الاب والكود والعملة والمستوي
// levels جدول
CREATE TABLE levels (
id INT AUTO_INCREMENT PRIMARY KEY,
level VARCHAR(255) NOT NULL
)
جدول المستويات يحتوي علي مستوي كل بند في دليل الحسابات وتكون من مستوي رئيسي و مستوي فرعي
// coins جدول
CREATE TABLE coins (
id INT AUTO_INCREMENT PRIMARY KEY,
coin VARCHAR(255) NOT NULL
)
جدول العملات يحتوي علي العملات المستخدمة في كل بند في دليل الحسابات وتكون حسب العملات المستخدمة لديك مثال الدولار الامريكي والجنية المصري
ولتصبح في النهاية بهذا الشكل
database_connection.php
ننشئ صفحة database_connection.php ثم ننسخ بداخلها الكود التالي:
ويحتوي الكود علي لينك يربط localhost مع database تحت اسم chart of account ويوز باسم root وباسوورد فارغ بدون اسم
يجب ان يكون اسم الداتا بيس مطابق للاسم في mysql الذي انشاناها في البداية
انشاء صفحات العرض والاضافة
index.php
ننشئ صفحة index.php ثم ننسخ بداخلها الكود التالي:
ويحتوي الكود علي لينك ajax,bootstrap,datatable وفي الاستايل يحتوي علي خط كوفي عربي وهو المفضل و صورة باسم b1.jpg ويمكنك وضع الصورة الانسب لك
وتنقسم الصفحة الي قسمين لاضافة او لعرض شجرة الحسابات كما تري.
وفي النهاية ياتي الاسكربت الخاص بتوجيهك للصفحة المراد استدعاء منها المعلومات
دليـــــــــل الحســـــــــــابات
دليـــــــــل الحســـــــــــابات
التعديل والحذف
Back
اضافة بيان لدليل الحسابات
اضافة فئـــــــة
شجرة الحسابات
add.php
هي الصفحة المسئولة عن اضافة بيان جديد لدليل الحسابات عن طريق اضافتة لل database
ننشئ صفحة باسم add.php وننسخ بداخلها الكود التالي
$_POST['name'],
':parent_id' => $_POST['parent_code'],
':code' => $_POST['code'],
':coins_id' => $_POST['coins_id'],
':levels_id' => $_POST['levels_id']
);
$errors = [];
if (empty($_POST['name']) || empty($_POST['code'])) {
$errors = "ادخـــــل بيـــــان";
}
if (count($errors) == 0) {
$query = "
INSERT INTO category (name, parent_id, code, coins_id, levels_id)
VALUES (:name, :parent_id, :code, :coins_id, :levels_id)
";
$statement = $connect->prepare($query);
if($statement->execute($data))
{
echo 'Category Added';
}
}else{
echo $errors;
}
?>
fetch.php
هي الصفحة المسئولة عن استدعاء البيانات لدليل الحسابات من ال database
ننشئ صفحة باسم fetch.php وننسخ بداخلها الكود التالي
prepare($query);
$statement->execute();
$result = $statement->fetchAll();
foreach($result as $row)
{
$data = get_node_data($parent_id, $connect);
}
echo json_encode(array_values($data));
function get_node_data($parent_id, $connect)
{
$query = "SELECT * FROM category WHERE parent_id = '".$parent_id."'";
$statement = $connect->prepare($query);
$statement->execute();
$result = $statement->fetchAll();
$output = array();
foreach($result as $row)
{
$sub_array = array();
$sub_array['text'] = ' '.$row['code'].' '.$row['name'].' ';
$sub_array['nodes'] = array_values(get_node_data($row['code'], $connect));
$output[] =$sub_array;
}
return $output;
}
?>
fill_coins.php
هي الصفحة المسئولة عن استدعاء البيانات الخاصة بنوع العملة حين اضافة بيان جديد لدليل الحسابات داخل ال database
ننشئ صفحة باسم fill_coins.php وننسخ بداخلها الكود التالي
prepare($query);
$statement->execute();
$result = $statement->fetchAll();
//$output = '';
foreach($result as $row)
{
$output .= '';
}
echo $output;
?>
fill_levels.php
هي الصفحة المسئولة عن استدعاء البيانات الخاصة بمستوي كل بيان جديد حيث انه يكون رئيسي او فرعي وذلك حين اضافة بيان جديد لدليل الحسابات داخل ال database
ننشئ صفحة باسم fill_levels.php وننسخ بداخلها الكود التالي
prepare($query);
$statement->execute();
$result = $statement->fetchAll();
//$output = '';
foreach($result as $row)
{
$output .= '';
}
echo $output;
?>
fill_parent_category.php
هي الصفحة المسئولة عن استدعاء البيانات الخاصة بالتابع او الاب وذلك حين اضافة بيان جديد لدليل الحسابات داخل ال database
ننشئ صفحة باسم fill_parent_category.php وننسخ بداخلها الكود التالي
prepare($query);
$statement->execute();
$result = $statement->fetchAll();
$output = '';
foreach($result as $row)
{
$output .= '';
}
echo $output;
?>
يجب ادخال البيانات الموضحة في الصورة يدويا علي اعتبار انها بيانات يبني عليها شجرة الحسابات
انشاء صفحات التعديل
بعد ان انشائنا صفحات العرض والاضافة نقوم بانشاء صفحات التعديل علي البيانات وذلك بانشاء فولدر edit داخل فولدر chart-of-accounts وكما هو موضح بالصورة
وداخل فولدر edit نقوم بانشاء ملفات index.php , action.php and fetch.php
index.php
هي صفحة عرض البيانات التي نقوم بالحذف او التعديل عليها وتحتوي علي datatable , اسكربت يقوم بالتوجية الي fetch للقيام بعملية الحذف او التعديل من الداتا بيس
ننشئ صفحة باسم index.php داخل فولدر edit وننسخ بداخلها الكود التالي
accounting
تعديل بيانات دليل الحسابات
Back
تعديل بيانات
ID
رقم الحساب
اسم الحساب
حسابة الاعلي
نوع الحساب
العملة
المستوي
التقرير
action.php
هي صفحة تعمل في الخلفية علي تعديل او حذف البيانات
ننشئ صفحة باسم action.php داخل فولدر edit وننسخ بداخلها الكود التالي
$_POST['id'],
':name'=> $_POST['name'],
':coins_id'=> $_POST['coins_id'],
':levels_id'=> $_POST['levels_id']
);
$query = "
UPDATE category SET
name = :name ,
levels_id = :levels_id ,
coins_id = :coins_id
WHERE id = :id
";
$statement = $connect->prepare($query);
$statement->execute($data);
echo json_encode($_POST);
}
if($_POST['action'] == 'delete')
{
$query = "
DELETE FROM category
WHERE id = '".$_POST["id"]."' AND parent_id !=0
";
$statement = $connect->prepare($query);
$statement->execute();
echo json_encode($_POST);
}
?>
fetch.php
هي صفحة تعمل في الخلفية علي استدعاء البيانات من قاعدة البيانات بعد عملية الحذف او التعديل
ننشئ صفحة باسم fetch.php داخل فولدر edit وننسخ بداخلها الكود التالي
= 3) THEN 'قائمة الدخل'
ELSE '0'
END stat
FROM category
LEFT JOIN coins ON coins.id = coins_id
LEFT JOIN levels ON levels.id = levels_id
";
if(isset($_POST["search"]["value"]))
{
$query .= '
WHERE name LIKE "%'.$_POST["search"]["value"].'%"
OR parent_id LIKE "%'.$_POST["search"]["value"].'%"
';
}
if(isset($_POST["order"]))
{
$query .= 'ORDER BY '.$column[$_POST['order']['0']['column']].' '.$_POST['order']['0']['dir'].' ';
}
else
{
$query .= 'ORDER BY code asc ';
}
$query1 = '';
if($_POST["length"] != -1)
{
$query1 = 'LIMIT ' . $_POST['start'] . ', ' . $_POST['length'];
}
$statement = $connect->prepare($query);
$statement->execute();
$number_filter_row = $statement->rowCount();
$statement = $connect->prepare($query . $query1);
$statement->execute();
$result = $statement->fetchAll();
$data = array();
foreach($result as $row)
{
$sub_array = array();
$sub_array[] = $row['id'];
$sub_array[] = $row['code'];
$sub_array[] = $row['name'];
$sub_array[] = $row['parent_id'];
$sub_array[] = $row['typ'];
$sub_array[] = $row['coin'];
$sub_array[] = $row['level'];
$sub_array[] = $row['stat'];
$data[] = $sub_array;
}
function count_all_data($connect)
{
$query = "SELECT * FROM category";
$statement = $connect->prepare($query);
$statement->execute();
return $statement->rowCount();
}
$output = array(
'draw' => intval($_POST['draw']),
'recordsTotal' => count_all_data($connect),
'recordsFiltered' => $number_filter_row,
'data' => $data
);
echo json_encode($output);
?>
وتكون صفحة التعديل والحذف بالشكل التالي داخل جدول datatable الشهير و امكانية البحث او الطباعه والعرض
Sharing to