انا اقوم بعمل موديول مخازن متقدم يعمل على بيئة dolibarr erp و يستخدم هذا الموديول مصنع يعمل في مجال تصنيع القماش
حيث يقوم العميل بتسليم الغزل إلى المصنع ثم يقوم المصنع بخدمة التصنيع و تحويل الغزل إلى قماش و إعادة تسليمه للعميل مرة أخرى
و تتم هذه العملية عبر موديول اسمه أوامر التصنيع ، و يحتوي على اسم القماش (المنتج التام) و الغزل المطلوب لانتاج هذا النوع من القماش (المواد الخام )
ما أقوم بفعله الآن هو إعداد صفحة تسمى رصيد العميل
الغرض منها هو معرفة المواد الخام التي قام العميل بتوريدها للمصنع
و معرفة القماش (المنتج التام الذي قام المصنع بتسليمه للعميل)
و يقوم بحساب الاستهلاكات و المرتجعات (و هذا سنتطرق إليه لاحقاً)
*المنطق البرمجي*
1- الجدول الاساسي الذي سأقوم بجلب البيانات منه هو جدول الحركات المخزنية و اسمه stock_mouvement
2- الجدول الذي من خلاله سأقوم باستدعاء اسم المنتج سواء كان منتج تام او مواد خام هو product
3- كيف نقوم بتمييز المادة الخام من المنتج التام ؟ نقوم بذلك من خلال عمود finished في جدول product حيث يرمز رقم 3 الى الغزول(المواد الخام) و يرمز الرقم 4 إلى المنتج التام (القماش)
4- جدول c_product_nature اقوم من خلاله بإستدعاء مسمى نوع المنتج و ذلك للمعلومات فقط
ملحوظات : هناك عمليات كثيرة تحدث في جدول stock_mouvement منها استلام مواد خام و مرتجعات و نقل داخلي و لكي اقوم بتمييز العمليات التي أحتاجها هناك حقل يسمى type_mouvement
يحيث ترمز القيمة 100 إلى المواد الخام التي تم استلامها و هي دائما قيمة موجبة
و القيمة 200 إلى مرتجع المواد الخام و قطعا هي قيمة سالبة
و القيمة 300 ترمز لحركة استهلاك مواد خام و هي قطعا قيمة سالبة
و القيمة 500 ترمز الى إضافة منتج تام تم تصنيعه و بالطبع هي قيمة موجبة
و القيمة 600 ترمز لحركة تسليم المنتج التام إلى العميل و هي قيمة سالبة
أما القيمة 700 فهي ترمز لحركة مرتجع المنتج التام من العميل إلى المصنع و هي حركة إضافة ذات قيمة موجبة
و الآن نتطرق إلى الأمور البرمجية
الكود الحالي كاملا
if(!empty($_POST['sCustomer'])){
$customerId = GETPOST('sCustomer','alpha');
$data = array();// Retrieve the thread types without duplicates//$sql = "SELECT DISTINCT itemName a FROM ".MAIN_DB_PREFIX."reyadastocks a JOIN product b ON a.itemName = b.rowid WHERE a.sCustomer = '".$customerId."'";
$sql ="SELECT a.fk_product as ProductID,b.finished as typeID, b.label AS itemLabel, c.label as itemType, MAX(a.rowid) as rowid
FROM ".MAIN_DB_PREFIX."stock_mouvement a
JOIN ".MAIN_DB_PREFIX."product b ON a.fk_product = b.rowid
JOIN ".MAIN_DB_PREFIX."c_product_nature c ON b.finished = c.rowid
WHERE (a.type_mouvement = '100' OR a.type_mouvement = '500') AND a.fk_soc = '".$customerId."'
GROUP BY a.fk_product, c.label
ORDER BY MAX(a.rowid) ASC";
$resql = $reyadastocks->db->query($sql);
$rawMaterials = array();
$finishedGoods = array();while($obj = $reyadastocks->db->fetch_object($resql)){
$ProductID = $obj->ProductID;// Product ID
$itemLabel = $obj->itemLabel;// Product Label
$itemType = $obj->itemType;// Product Type lABEL
$itemTypeID = $obj->typeID;//Product Type ID
$data[]= array('type'=> $itemLabel,'itemType'=> $itemType,'received'=> $received,);}// Send the data back to the client
echo json_encode(array('data'=> $data));}
$sql ="SELECT a.fk_product as ProductID,b.finished as typeID, b.label AS itemLabel, c.label as itemType, MAX(a.rowid) as rowid
FROM ".MAIN_DB_PREFIX."stock_mouvement a
JOIN ".MAIN_DB_PREFIX."product b ON a.fk_product = b.rowid
JOIN ".MAIN_DB_PREFIX."c_product_nature c ON b.finished = c.rowid
WHERE (a.type_mouvement = '100' OR a.type_mouvement = '500') AND a.fk_soc = '".$customerId."'
GROUP BY a.fk_product, c.label
ORDER BY MAX(a.rowid) ASC";
الإستعلام السابق من خلاله أحصل على الحركات المخزنية ذات type_mouvement = '100' و التي ترمز إلى المواد الخام التي تم استلامها و رقم 500 و هو المنتج التام الذي تم تصنيعه بالفعل
$resql = $reyadastocks->db->query($sql);while($obj = $reyadastocks->db->fetch_object($resql)){
$ProductID = $obj->ProductID;// Product ID
$itemLabel = $obj->itemLabel;// Product Label
$itemType = $obj->itemType;// Product Type lABEL
$itemTypeID = $obj->typeID;//Product Type ID}
هذا النتائج تحتوي على بيانات بشكل عام لكنها غير مشروطة بشرط هام جدا جدا
قد يكون هناك في تلك النتائج منتج تام (قماش) و ليس فيها مواد خام ضرورية لانتاج هذا القماش و هذا يحسب رصيدا سالبا على العميل من المفترض ان اطالبة به
لذا فمن الضروري جدا ان تتم عملية فحص للنتائج للتأكد من وجود مواد خام لانتاج هذا المنتج
الشرط : ان يكون في النتائج منتج تام itemTypeID = 4
يقوم النظام بعملية فحص من خلال جدول اسمه mrp_production عن مطابقة حقل fk_product بمعرف المنتج ProductID الذي قيمة itemTypeID هي 4
ثم إحضار رقم أمر التصنيع الخاص به و هو الرقم الموجود في حقل fk_mo و لنفترض انه 1
الان اريد ان احضر اسماء المواد الخام المستخدمة في انتاج هذا المنتج
أقوم بالبحث في نفس الجدول مرة اخرى عن جميع بقيمة fk_mo و التي احضرناها للتو و فرضنا انها 1 لكن بشرط ان تكون قيمة حقل origin_type هي 'bomline'
ثم نقوم بفحص ناتج fk_product و الذي سيكون هو نفسه ارقام المواد الخام المستخدمه لانتاج هذا القماش
و مقارنته مع نتائج الاستعلام الأول
عندي حالتين : عندما تتم المقارنة نجد أن النتائج الوادرة من الاستعلام الأول الاساسي تحتوي بالفعل على ارقام مطابقة للاستعلام الثاني و هنا لن نقوم باي شئ ، فقط سنقوم بجلب البيانات من الاستعلام الأول بشكل طبيعي (يشمل المواد الخام و المنتج التام ان وجد )
الحالة التانية : عندما قارنت وجدت بالاستعلام الاول مواد خام لكنها ليست تابعه لهذا المنتج التام
يبقى من الاستعلام الأول هاجيب كل البيانات حتى لو مواد خام غير تابعه
و أيضا بيانات المنتج التام
ثم اقوم من الاستعلام الثاني باضافة المواد الخام التي تستخدم في انتاج هذا المنتج
السؤال
محمد المصري12
المهمة التي أنا بصددها مركبة و شديدة التعقيد
أولا شرح الفكرة بشكل عام :
انا اقوم بعمل موديول مخازن متقدم يعمل على بيئة dolibarr erp و يستخدم هذا الموديول مصنع يعمل في مجال تصنيع القماش
حيث يقوم العميل بتسليم الغزل إلى المصنع ثم يقوم المصنع بخدمة التصنيع و تحويل الغزل إلى قماش و إعادة تسليمه للعميل مرة أخرى
و تتم هذه العملية عبر موديول اسمه أوامر التصنيع ، و يحتوي على اسم القماش (المنتج التام) و الغزل المطلوب لانتاج هذا النوع من القماش (المواد الخام )
ما أقوم بفعله الآن هو إعداد صفحة تسمى رصيد العميل
الغرض منها هو معرفة المواد الخام التي قام العميل بتوريدها للمصنع
و معرفة القماش (المنتج التام الذي قام المصنع بتسليمه للعميل)
و يقوم بحساب الاستهلاكات و المرتجعات (و هذا سنتطرق إليه لاحقاً)
*المنطق البرمجي*
1- الجدول الاساسي الذي سأقوم بجلب البيانات منه هو جدول الحركات المخزنية و اسمه stock_mouvement
2- الجدول الذي من خلاله سأقوم باستدعاء اسم المنتج سواء كان منتج تام او مواد خام هو product
3- كيف نقوم بتمييز المادة الخام من المنتج التام ؟ نقوم بذلك من خلال عمود finished في جدول product حيث يرمز رقم 3 الى الغزول(المواد الخام) و يرمز الرقم 4 إلى المنتج التام (القماش)
4- جدول c_product_nature اقوم من خلاله بإستدعاء مسمى نوع المنتج و ذلك للمعلومات فقط
ملحوظات : هناك عمليات كثيرة تحدث في جدول stock_mouvement منها استلام مواد خام و مرتجعات و نقل داخلي و لكي اقوم بتمييز العمليات التي أحتاجها هناك حقل يسمى type_mouvement
يحيث ترمز القيمة 100 إلى المواد الخام التي تم استلامها و هي دائما قيمة موجبة
و القيمة 200 إلى مرتجع المواد الخام و قطعا هي قيمة سالبة
و القيمة 300 ترمز لحركة استهلاك مواد خام و هي قطعا قيمة سالبة
و القيمة 500 ترمز الى إضافة منتج تام تم تصنيعه و بالطبع هي قيمة موجبة
و القيمة 600 ترمز لحركة تسليم المنتج التام إلى العميل و هي قيمة سالبة
أما القيمة 700 فهي ترمز لحركة مرتجع المنتج التام من العميل إلى المصنع و هي حركة إضافة ذات قيمة موجبة
و الآن نتطرق إلى الأمور البرمجية
الكود الحالي كاملا
الإستعلام السابق من خلاله أحصل على الحركات المخزنية ذات type_mouvement = '100' و التي ترمز إلى المواد الخام التي تم استلامها و رقم 500 و هو المنتج التام الذي تم تصنيعه بالفعل
هذا النتائج تحتوي على بيانات بشكل عام لكنها غير مشروطة بشرط هام جدا جدا
قد يكون هناك في تلك النتائج منتج تام (قماش) و ليس فيها مواد خام ضرورية لانتاج هذا القماش و هذا يحسب رصيدا سالبا على العميل من المفترض ان اطالبة به
لذا فمن الضروري جدا ان تتم عملية فحص للنتائج للتأكد من وجود مواد خام لانتاج هذا المنتج
الشرط : ان يكون في النتائج منتج تام itemTypeID = 4
يقوم النظام بعملية فحص من خلال جدول اسمه mrp_production عن مطابقة حقل fk_product بمعرف المنتج ProductID الذي قيمة itemTypeID هي 4
ثم إحضار رقم أمر التصنيع الخاص به و هو الرقم الموجود في حقل fk_mo و لنفترض انه 1
الان اريد ان احضر اسماء المواد الخام المستخدمة في انتاج هذا المنتج
أقوم بالبحث في نفس الجدول مرة اخرى عن جميع بقيمة fk_mo و التي احضرناها للتو و فرضنا انها 1 لكن بشرط ان تكون قيمة حقل origin_type هي 'bomline'
ثم نقوم بفحص ناتج fk_product و الذي سيكون هو نفسه ارقام المواد الخام المستخدمه لانتاج هذا القماش
و مقارنته مع نتائج الاستعلام الأول
عندي حالتين : عندما تتم المقارنة نجد أن النتائج الوادرة من الاستعلام الأول الاساسي تحتوي بالفعل على ارقام مطابقة للاستعلام الثاني و هنا لن نقوم باي شئ ، فقط سنقوم بجلب البيانات من الاستعلام الأول بشكل طبيعي (يشمل المواد الخام و المنتج التام ان وجد )
الحالة التانية : عندما قارنت وجدت بالاستعلام الاول مواد خام لكنها ليست تابعه لهذا المنتج التام
يبقى من الاستعلام الأول هاجيب كل البيانات حتى لو مواد خام غير تابعه
و أيضا بيانات المنتج التام
ثم اقوم من الاستعلام الثاني باضافة المواد الخام التي تستخدم في انتاج هذا المنتج
أعملها ازااااي فضلا
0 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.