اذهب إلى المحتوى

محمد المصري12

الأعضاء
  • المساهمات

    276
  • تاريخ الانضمام

  • تاريخ آخر زيارة

آخر الزوار

لوحة آخر الزوار معطلة ولن تظهر للأعضاء

إنجازات محمد المصري12

عضو نشيط

عضو نشيط (3/3)

122

السمعة بالموقع

5

إجابات الأسئلة

  1. المهمة التي أنا بصددها مركبة و شديدة التعقيد أولا شرح الفكرة بشكل عام : انا اقوم بعمل موديول مخازن متقدم يعمل على بيئة 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 و الذي سيكون هو نفسه ارقام المواد الخام المستخدمه لانتاج هذا القماش و مقارنته مع نتائج الاستعلام الأول عندي حالتين : عندما تتم المقارنة نجد أن النتائج الوادرة من الاستعلام الأول الاساسي تحتوي بالفعل على ارقام مطابقة للاستعلام الثاني و هنا لن نقوم باي شئ ، فقط سنقوم بجلب البيانات من الاستعلام الأول بشكل طبيعي (يشمل المواد الخام و المنتج التام ان وجد ) الحالة التانية : عندما قارنت وجدت بالاستعلام الاول مواد خام لكنها ليست تابعه لهذا المنتج التام يبقى من الاستعلام الأول هاجيب كل البيانات حتى لو مواد خام غير تابعه و أيضا بيانات المنتج التام ثم اقوم من الاستعلام الثاني باضافة المواد الخام التي تستخدم في انتاج هذا المنتج أعملها ازااااي فضلا
  2. سلام عليكم مشكلة هاتجنني صراحة if (qINkg >= sCustomercredit){ Swal.fire( <?php echo json_encode($langs->trans('error')); ?>, <?php echo json_encode($langs->trans('invalidReturn1')); ?>, 'error' ) event.preventDefault(); // Prevent form submission return false; } else { Swal.fire( <?php echo json_encode($langs->trans('successReturn')); ?>, 'success' ) return true; } متغير qINKg ( الكمية بالكيلوجرام) لو كانت أكبر من رصيد العميل بالمخزن sCustomercredit المفروض يديني رسالة خطأ كالتالي لاحظوا بقا قيمة الكمية بالكيلوجرام ، هتلاقيها اصغر من رصيد العميل ، يعني المفروض يقبل المدخلات و رغم كده بيرفض السكريت كاملا <script type="text/javascript"> jQuery(document).ready(function() { // Store the initial value of targetWareHouse let initialTargetWareHouseValue = $(".targetWareHouseField").val(); // When the form is submitted $("form.card_reyadastocks").submit(function(event) { // Get the selected value of the "sCustomer" field let warehouse = $(".targetWareHouseField").val(); let customer = $(".sCustomerField").val(); let select_product = $(".select_product").val(); let credit = $(".credit").val(); let ItemInSelectedWareHouse = $(".ItemInSelectedWareHouse").val(); let sCustomercredit = $(".sCustomercredit").val(); let qINkg = $(".qINkg").val(); console.log(qINkg); // console.log(customer); // console.log(select_product); if (select_product > 0) { // Check if the selected value is greater than zero (meaning a valid product has been selected) if (warehouse > 0) { // Check if the selected value for the customer is also greater than zero if (customer > 0) { if (credit <= 0){ // Both fields are valid; the form will be submitted Swal.fire( <?php echo json_encode($langs->trans('error')); ?>, <?php echo json_encode($langs->trans('noEnoughItemeCredit')); ?>, 'error' ) event.preventDefault(); // Prevent form submission return false; } else if (ItemInSelectedWareHouse <= 0 ){ Swal.fire( <?php echo json_encode($langs->trans('error')); ?>, <?php echo json_encode($langs->trans('noEnoughwareHouseCredit')); ?>, 'error' ) event.preventDefault(); // Prevent form submission return false; } else if(sCustomercredit <= 0){ Swal.fire( <?php echo json_encode($langs->trans('error')); ?>, <?php echo json_encode($langs->trans('noEnoughCustomerCredit')); ?>, 'error' ) event.preventDefault(); // Prevent form submission return false; } else if (qINkg >= sCustomercredit){ Swal.fire( <?php echo json_encode($langs->trans('error')); ?>, <?php echo json_encode($langs->trans('invalidReturn1')); ?>, 'error' ) event.preventDefault(); // Prevent form submission return false; } else { Swal.fire( <?php echo json_encode($langs->trans('successReturn')); ?>, 'success' ) return true; } } else { // Customer field is invalid, show an alert message alert("Please select a valid customer."); event.preventDefault(); // Prevent form submission return false; } } else { // Warehouse field is invalid, show an alert message alert("Please select a warehouse."); event.preventDefault(); // Prevent form submission return false; } } else { // Product field is invalid, show an alert message alert("Please select a product."); $(".targetWareHouseField").val(''); // Reset the #targetWareHouse field event.preventDefault(); // Prevent form submission return false; } }); // Watch for changes in select_product $(".select_product").change(function() { // If select_product is changed, reset targetWareHouse if it was changed previously if ($(".targetWareHouseField").val() !== initialTargetWareHouseValue) { $(".targetWareHouseField").val(''); $(".ItemInSelectedWareHouse").val(''); $("#sCustomer").val(''); $(".sCustomercredit").val(''); } }); // Watch for changes in WareHouse $(".targetWareHouseField").change(function() { // If targetWareHouse is changed, reset other fields if they were changed previously if ($(".targetWareHouseField").val() !== initialTargetWareHouseValue) { $("#sCustomer").val(''); $(".sCustomercredit").val(''); } }); }); </script> و دي حقول المتغيرات في php print '<tr>'; print '<td class="fieldrequired">'.$langs->trans('sCustomer').' </td>'; print '<td class="fieldrequired">'; print $reyadastocks->select_customer(0, 'sCustomer', 1, 'rowid', 'nom','sCustomer'); print '</td>'; print '<td style="width: 200px" class="fieldrequired">'.$langs->trans('ItemInSelectedWareHouse').' </td>'; print '<td > <input type="text" readonly value="" class="bg-noha3 sCustomercredit" name="sCustomercredit"></td>'; print '</tr>'; print '<tr>'; print '<td class="fieldrequired">'.$langs->trans('qINkg').' </td>'; print '<td colspan="3" > <input type="text" value="" class="qINkg minwidth300 bg-m1" name="qINkg" required="required" autocomplete="off"></td>'; print '</tr>'; شكيت ان يكون فيه قيم متكرر تعريفها و دورت مفيش قلت يمكن السكربت بيقرا الداتا غلط ، طبعت الداتا بالكونسول و نفس الشئ العجيب بقا ان قاعدة البيانات لو فاضية و كانت الاستمارة دي تمثل اول بيان مرتجع ، البيان بيتم تنفيذه عادي جدا لكن الخطأ ده مع تاني مرتجع ، و مش فاهم ايه علاقة قاعدة البيانات لاني اصلا معرف البيانات في الفرونت اند مش جايبها من الداتابيز اللي فاهم حاجة يفهمني
  3. سلام عليكم على سبيل المثال المتغير التالي $s = $data_to_go[$obj->fk_employe]['totaldayspresent']; حين اقوم بطباعته كالتالي echo $s.'<br>'; تكون النتيجة 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 انا مش عاوز من الكلام ده غير النتائج فقط يعني في المثال السابق النتيجة 21 اجيب الرقم ده ازاي جربت count ما ظبطتش
  4. import { useRouter } from 'next/router' const Footer = () => { const router = useRouter() const handleLanguageChange = (e) => { router.push(e.target.value) } return ( <select className="form-select mb-3" aria-label="Default select example" onChange={handleLanguageChange}> <option value="/en" defaultValue>English</option> <option value="/ar">Arabic - Coming Soon</option> </select> ) } export default Footer
  5. أظن ان المشكلة في الكود هي أنه بياخد العنصر الواحد فقط باستخدام document.getElementById ، عشان كده شغال على الأيقونة الأولى التي واخده نفس الـ id. جرب استخدام document.querySelectorAll عشان ناخد كل العناصر اللي عندها نفس الـ id ، ومهم انك تحددال array بعد العنصر لتحديد العنصر الصحيح جرب const likeIcons = document.querySelectorAll('#like-icon'); const likeCount = document.getElementById('like-count'); likeIcons.forEach((likeIcon) => { likeIcon.addEventListener("click", () => { const newId = likeIcon.getAttribute('data-news'); const url = `/like_news/${parseInt(newId)}/`; fetch(url, { method: 'GET', headers: { 'Content-type': 'application/json' } }) .then(response => { return response.json(); }) .then(data => { if(data.liked) { likeIcon.classList.remove('empty-heart'); } else { likeIcon.classList.add('empty-heart'); } likeCount.innerHTML = data.like_count; }) .catch(error => { console.log(error); }) }); }); انا استخدمت querySelectorAll بدلاً من getElementById عشان اجيب كل العناصر التي لديها نفس الـ id ، و استخدمت تكرار forEach عشان احدد كل عنصر لوحده . و اخترت likeIcon بدل like-icon في متغير newId داخل الحدث ليتم استخدام المتغير المناسب.
  6. public class Shipment { private int number; private String destination; private String deliveryOptions; private double deliveryPrice; public Shipment(int number, String destination, String deliveryOptions, double deliveryPrice) { this.number = number; this.destination = destination; setDeliveryOptions(deliveryOptions); this.deliveryPrice = deliveryPrice; } public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } public String getDestination() { return destination; } public void setDestination(String destination) { this.destination = destination; } public String getDeliveryOptions() { return deliveryOptions; } public void setDeliveryOptions(String deliveryOptions) { if (deliveryOptions.equals("PickUp") || deliveryOptions.equals("HomeDelivery")) { this.deliveryOptions = deliveryOptions; } else { System.out.println("Invalid delivery option, only 'PickUp' or 'HomeDelivery' are allowed."); } } public double getDeliveryPrice() { return deliveryPrice; } public void setDeliveryPrice(double deliveryPrice) { this.deliveryPrice = deliveryPrice; } public double calPriceWithTax() { return deliveryPrice * 1.15 + deliveryPrice; } }
  7. سلام عليكم أحدهم اخبرني انه يريد سحب السوفتوير من معالج تشغيل احدى ماركات الغسالات الاوتوماتيك نظرا لصعوبة استيراد المعالجات الجديدة يريد تصنيع المعالج محليا قم ينسخ له السوفتوير من معالج يعمل بالفعل هل توجد طريقة لذلك او اي افكار او طرق ابحث فيها ؟ شكرا لكم
  8. RewriteEngine on Options -Indexes # php -- BEGIN cPanel-generated handler, do not edit # This domain inherits the “PHP” package. # php -- END cPanel-generated handler, do not edit RewriteCond %{HTTP_HOST} ^arabiauniform\.areyada\.com$ RewriteRule ^/?$ "https\:\/\/arabiauniform\.areyada\.com\/" [R=301,L] RewriteRule (.*) https://arabiauniform.areyada.com/$1 RewriteRule ^([^/]*)$ /index.php?path=$1 [L] <Files 403.shtml> order allow,deny allow from all </Files> هذا هو ملف htaccess
  9. سلام عليكم صورة تحمل اسم عربي الصور التي تحمل اسماء عربية لا يفتحها المتصفح و تعطي خطأ This page isn’t working right now ........com redirected you too many times. To fix this issue, try clearing your cookies. ERR_TOO_MANY_REDIRECTS هل من افكار ؟
  10. سلام عليكم عندي استعلام كالتالي $query = 'SELECT order_threads.*, order_threads.mPrice AS p, admins.name AS user, thread.image , thread.name, thread.mPrice AS tp, patron_colors.color_name AS color_name, patron_colors.color_count FROM order_threads LEFT JOIN admins ON order_threads.user = admins.id JOIN patron_colors ON order_threads.color_select = patron_colors.id JOIN thread ON order_threads.thread_id = thread.id WHERE order_threads.order_id=' .$order['id']. ' ;'; $threads = $conn->query($query); الإستعلام مفيش فيه اي مشكلة غير انني اقوم تقريبا بتكراره فوق ال 20 مرة بنفس الطريقة بس اللي بيختلف فقط جدول order_threads و thread قلت اجرب اعمل دالة مخصوصة و استدعيها كالتالي function connecting($order_table,$table){ global $order_id ; global $conn; $query_var = 'SELECT '.$order_table.'.*, '.$order_table.'.price AS price, admins.name AS user, patron_colors.color_name AS color_name, patron_colors.color_count FROM '.$order_table.' LEFT JOIN admins ON '.$order_table.'.user = admins.id JOIN '.$table.' ON '.$order_table.'.'.$order_table.'_id = '.$table.'.id JOIN patron_colors ON '.$order_table.'.color_select = patron_colors.id WHERE '.$order_table.'.order_id=' .$order_id . ' ORDER BY '.$order_table.'.id ASC;'; $run = $conn->query($query_var); } متغير order_table هايحل محل order_threads و table هايحل محل threads و هايبدلهملي بالاسماء الجديدة للجداول اللي عاوز اجيب منها الداتا بنفس باقي بيانات الاستعلام و متغير $run هو تنفيذ ال query لما باجي بنفذ الامر و استدعي الدالة كالتالي connecting('order_bracelet','bracelet'); و ابدأ استدعي البيانات foreach ($run AS $row ){ // code here } مفيش اي قراءه نهائي و لا كأن فيه استعلام اصلا ايه الخطأ اللي انا عملته احبائي الكرام ؟
  11. سلام عليكم احيانا اقوم باستعلام يجلب بيانات بها رموز مثل . و $ و & , * و خلافه مثلا عندي عميل اسمه GLORY LANGUAGE & INTERNATIONAL SCHOOLS الاستعلام كله بيقف بسبب رمز & ازاي اقدر اتجنب حاجة زي كده فضلا
  12. سلام عليكم الاستعلام كالتالي SELECT order_buttons.*, order_buttons.id AS mainID, button.image , button.name, patron_colors.color_name AS color_name, patron_colors.id, patron_colors.order_id, patron_colors.color_count FROM order_buttons JOIN button ON order_buttons.button_id = button.id JOIN patron_colors ON (patron_colors.color_name = order_buttons.color_select OR patron_colors.color_name = order_buttons.color_select) AND patron_colors.order_id=' .$order['id']. ' WHERE order_buttons.order_id=' .$order['id']. ' في ال join ده JOIN patron_colors ON (patron_colors.color_name = order_buttons.color_select OR patron_colors.color_name = order_buttons.color_select) AND patron_colors.order_id=' .$order['id']. ' عاوز طريقة اقوله بيها نفذلي الاستعلام ده ، لو لقيت قيمة patron_colors.order_id اكبر من صفر نفذ شرط ال AND يعني يتجاهل من بعد تعليمة AND و يعملي ال JOIN من غيرها عادي بمعنى تاني اوضح ، عاوز اربط الشرط ده في ال JOIN AND patron_colors.order_id=' .$order['id']. ' فقط في حال قيمة الحقل patron_colors.order_id اكبر من 0 غير كده ينفذ ال JOIN و لا كأنها موجودة
×
×
  • أضف...