function can_process() { global $wo_details; if (!references::is_valid($_POST['ref'])) { display_error(tr("You must enter a reference.")); set_focus('ref'); return false; } if (!is_new_reference($_POST['ref'], 29)) { display_error(tr("The entered reference is already in use.")); set_focus('ref'); return false; } if (!check_num('quantity', 0)) { display_error(tr("The quantity entered is not a valid number or less then zero.")); set_focus('quantity'); return false; } if (!is_date($_POST['date_'])) { display_error(tr("The entered date is invalid.")); set_focus('date_'); return false; } elseif (!is_date_in_fiscalyear($_POST['date_'])) { display_error(tr("The entered date is not in fiscal year.")); set_focus('date_'); return false; } if (date_diff(sql2date($wo_details["released_date"]), $_POST['date_'], "d") > 0) { display_error(tr("The production date cannot be before the release date of the work order.")); set_focus('date_'); return false; } // if unassembling we need to check the qoh if ($_POST['ProductionType'] == 0 && !sys_prefs::allow_negative_stock()) { $wo_details = get_work_order($_POST['selected_id']); $qoh = get_qoh_on_date($wo_details["stock_id"], $wo_details["loc_code"], $date_); if (-$_POST['quantity'] + $qoh < 0) { display_error(tr("The unassembling cannot be processed because there is insufficient stock.")); set_focus('quantity'); return false; } } return true; }
include_once $path_to_root . "/includes/data_checks.inc"; include_once $path_to_root . "/manufacturing/includes/manufacturing_db.inc"; include_once $path_to_root . "/manufacturing/includes/manufacturing_ui.inc"; $js = ""; if ($use_popup_windows) { $js .= get_js_open_window(800, 500); } page(_($help_context = "View Work Order"), true, false, "", $js); //------------------------------------------------------------------------------------------------- $woid = 0; if ($_GET['trans_no'] != "") { $woid = $_GET['trans_no']; } display_heading($systypes_array[ST_WORKORDER] . " # " . $woid); br(1); $myrow = get_work_order($woid); if ($myrow["type"] == WO_ADVANCED) { display_wo_details($woid, true); } else { display_wo_details_quick($woid, true); } echo "<center>"; // display the WO requirements br(1); if ($myrow["released"] == false) { display_heading2(_("BOM for item:") . " " . $myrow["StockItemName"]); display_bom($myrow["stock_id"]); } else { display_heading2(_("Work Order Requirements")); display_wo_requirements($woid, $myrow["units_reqd"]); if ($myrow["type"] == WO_ADVANCED) {
function can_process() { global $selected_id, $SysPrefs, $Refs; if (!isset($selected_id)) { if (!$Refs->is_valid($_POST['wo_ref'])) { display_error(_("You must enter a reference.")); set_focus('wo_ref'); return false; } if (!is_new_reference($_POST['wo_ref'], ST_WORKORDER)) { display_error(_("The entered reference is already in use.")); set_focus('wo_ref'); return false; } } if (!check_num('quantity', 0)) { display_error(_("The quantity entered is invalid or less than zero.")); set_focus('quantity'); return false; } if (!is_date($_POST['date_'])) { display_error(_("The date entered is in an invalid format.")); set_focus('date_'); return false; } elseif (!is_date_in_fiscalyear($_POST['date_'])) { display_error(_("The entered date is not in fiscal year.")); set_focus('date_'); return false; } // only check bom and quantites if quick assembly if (!($_POST['type'] == WO_ADVANCED)) { if (!has_bom($_POST['stock_id'])) { display_error(_("The selected item to manufacture does not have a bom.")); set_focus('stock_id'); return false; } if ($_POST['Labour'] == "") { $_POST['Labour'] = price_format(0); } if (!check_num('Labour', 0)) { display_error(_("The labour cost entered is invalid or less than zero.")); set_focus('Labour'); return false; } if ($_POST['Costs'] == "") { $_POST['Costs'] = price_format(0); } if (!check_num('Costs', 0)) { display_error(_("The cost entered is invalid or less than zero.")); set_focus('Costs'); return false; } if (!$SysPrefs->allow_negative_stock()) { if ($_POST['type'] == WO_ASSEMBLY) { // check bom if assembling $result = get_bom($_POST['stock_id']); while ($bom_item = db_fetch($result)) { if (has_stock_holding($bom_item["ResourceType"])) { $quantity = $bom_item["quantity"] * input_num('quantity'); if (check_negative_stock($bom_item["component"], -$quantity, $bom_item["loc_code"], $_POST['date_'])) { display_error(_("The work order cannot be processed because there is an insufficient quantity for component:") . " " . $bom_item["component"] . " - " . $bom_item["description"] . ". " . _("Location:") . " " . $bom_item["location_name"]); set_focus('quantity'); return false; } } } } elseif ($_POST['type'] == WO_UNASSEMBLY) { // if unassembling, check item to unassemble if (check_negative_stock($_POST['stock_id'], -input_num('quantity'), $_POST['StockLocation'], $_POST['date_'])) { display_error(_("The selected item cannot be unassembled because there is insufficient stock.")); return false; } } } } else { if (!is_date($_POST['RequDate'])) { set_focus('RequDate'); display_error(_("The date entered is in an invalid format.")); return false; } //elseif (!is_date_in_fiscalyear($_POST['RequDate'])) //{ // display_error(_("The entered date is not in fiscal year.")); // return false; //} if (isset($selected_id)) { $myrow = get_work_order($selected_id, true); if ($_POST['units_issued'] > input_num('quantity')) { set_focus('quantity'); display_error(_("The quantity cannot be changed to be less than the quantity already manufactured for this order.")); return false; } } } return true; }
function can_process() { global $wo_details, $SysPrefs, $Refs; if (!$Refs->is_valid($_POST['ref'])) { display_error(_("You must enter a reference.")); set_focus('ref'); return false; } if (!is_new_reference($_POST['ref'], 29)) { display_error(_("The entered reference is already in use.")); set_focus('ref'); return false; } if (!check_num('quantity', 0)) { display_error(_("The quantity entered is not a valid number or less then zero.")); set_focus('quantity'); return false; } if (!is_date($_POST['date_'])) { display_error(_("The entered date is invalid.")); set_focus('date_'); return false; } elseif (!is_date_in_fiscalyear($_POST['date_'])) { display_error(_("The entered date is not in fiscal year.")); set_focus('date_'); return false; } if (date_diff2(sql2date($wo_details["released_date"]), $_POST['date_'], "d") > 0) { display_error(_("The production date cannot be before the release date of the work order.")); set_focus('date_'); return false; } // don't produce more that required. Otherwise change the Work Order. if (input_num('quantity') > $wo_details["units_reqd"] - $wo_details["units_issued"]) { display_error(_("The production exceeds the quantity needed. Please change the Work Order.")); set_focus('quantity'); return false; } // if unassembling we need to check the qoh if ($_POST['ProductionType'] == 0 && !$SysPrefs->allow_negative_stock()) { $wo_details = get_work_order($_POST['selected_id']); $qoh = get_qoh_on_date($wo_details["stock_id"], $wo_details["loc_code"], $_POST['date_']); if (-input_num('quantity') + $qoh < 0) { display_error(_("The unassembling cannot be processed because there is insufficient stock.")); set_focus('quantity'); return false; } } // if production we need to check the qoh of the wo requirements if ($_POST['ProductionType'] == 1 && !$SysPrefs->allow_negative_stock()) { $err = false; $result = get_wo_requirements($_POST['selected_id']); while ($row = db_fetch($result)) { if ($row['mb_flag'] == 'D') { // service, non stock continue; } $qoh = get_qoh_on_date($row["stock_id"], $row["loc_code"], $_POST['date_']); if ($qoh - $row['units_req'] * input_num('quantity') < 0) { display_error(_("The production cannot be processed because a required item would cause a negative inventory balance :") . " " . $row['stock_id'] . " - " . $row['description']); $err = true; } } if ($err) { set_focus('quantity'); return false; } } return true; }
function exist_transaction($type, $type_no) { $void_entry = get_voided_entry($type, $type_no); if ($void_entry != null) { return false; } switch ($type) { case ST_JOURNAL: // it's a journal entry if (!exists_gl_trans($type, $type_no)) { return false; } break; case ST_BANKPAYMENT: // it's a payment // it's a payment case ST_BANKDEPOSIT: // it's a deposit // it's a deposit case ST_BANKTRANSFER: // it's a transfer if (!exists_bank_trans($type, $type_no)) { return false; } break; case ST_SALESINVOICE: // it's a customer invoice // it's a customer invoice case ST_CUSTCREDIT: // it's a customer credit note // it's a customer credit note case ST_CUSTPAYMENT: // it's a customer payment // it's a customer payment case ST_CUSTDELIVERY: // it's a customer dispatch if (!exists_customer_trans($type, $type_no)) { return false; } break; case ST_LOCTRANSFER: // it's a stock transfer if (get_stock_transfer_items($type_no) == null) { return false; } break; case ST_INVADJUST: // it's a stock adjustment if (get_stock_adjustment_items($type_no) == null) { return false; } break; case ST_PURCHORDER: // it's a PO return false; case ST_SUPPRECEIVE: // it's a GRN if (exists_grn($type_no)) { return false; } break; case ST_SUPPINVOICE: // it's a suppler invoice // it's a suppler invoice case ST_SUPPCREDIT: // it's a supplier credit note // it's a supplier credit note case ST_SUPPAYMENT: // it's a supplier payment if (!exists_supp_trans($type, $type_no)) { return false; } break; case ST_WORKORDER: // it's a work order if (!get_work_order($type_no, true)) { return false; } break; case ST_MANUISSUE: // it's a work order issue if (!exists_work_order_issue($type_no)) { return false; } break; case ST_MANURECEIVE: // it's a work order production if (!exists_work_order_produce($type_no)) { return false; } break; case ST_SALESORDER: // it's a sales order // it's a sales order case ST_SALESQUOTE: // it's a sales quotation return false; case ST_COSTUPDATE: // it's a stock cost update return false; break; } return true; }
set_focus('stock_id'); return false; } return true; } //------------------------------------------------------------------------------------ if (isset($_POST['release'])) { release_work_order($selected_id, $_POST['released_date'], $_POST['memo_']); display_note(tr("The work order has been released to manufacturing.")); hyperlink_no_params("search_work_orders.php", tr("Select another work order")); end_page(); exit; } //------------------------------------------------------------------------------------ start_form(); $myrow = get_work_order($selected_id); $_POST['released'] = $myrow["released"]; $_POST['memo_'] = ""; if (can_process($myrow)) { start_table($table_style2); label_row(tr("Work Order #:"), $selected_id); label_row(tr("Work Order Reference:"), $myrow["wo_ref"]); date_row(tr("Released Date") . ":", 'released_date'); textarea_row(tr("Memo:"), 'memo_', $_POST['memo_'], 40, 5); end_table(1); submit_center('release', tr("Release Work Order")); hidden('selected_id', $selected_id); hidden('stock_id', $myrow['stock_id']); } end_form(); end_page();
return false; } return true; } //-------------------------------------------------------------------------------------------------- if (isset($_POST['process']) && can_process() == true) { $date = $_POST['date_']; begin_transaction(); add_gl_trans_std_cost(ST_WORKORDER, $_POST['selected_id'], $_POST['date_'], $_POST['cr_acc'], 0, 0, $date . ": " . $wo_cost_types[$_POST['PaymentType']], -input_num('costs'), PT_WORKORDER, $_POST['PaymentType']); $is_bank_to = is_bank_account($_POST['cr_acc']); if ($is_bank_to) { add_bank_trans(ST_WORKORDER, $_POST['selected_id'], $is_bank_to, "", $_POST['date_'], -input_num('costs'), PT_WORKORDER, $_POST['PaymentType'], get_company_currency(), "Cannot insert a destination bank transaction"); } add_gl_trans_std_cost(ST_WORKORDER, $_POST['selected_id'], $_POST['date_'], $_POST['db_acc'], $_POST['dim1'], $_POST['dim2'], $date . ": " . $wo_cost_types[$_POST['PaymentType']], input_num('costs'), PT_WORKORDER, $_POST['PaymentType']); //Chaitanya : Apply the costs to manfuctured stock item as adjustement $wo = get_work_order($_POST['selected_id']); if ($_POST['PaymentType'] == 0) { add_labour_cost($wo['stock_id'], 0, $_POST['date_'], input_num('costs'), true); } else { add_overhead_cost($wo['stock_id'], 0, $_POST['date_'], input_num('costs'), true); } commit_transaction(); meta_forward($_SERVER['PHP_SELF'], "AddedID=" . $_POST['selected_id']); } //------------------------------------------------------------------------------------- display_wo_details($_POST['selected_id']); //------------------------------------------------------------------------------------- start_form(); hidden('selected_id', $_POST['selected_id']); //hidden('WOReqQuantity', $_POST['WOReqQuantity']); start_table(TABLESTYLE2);
if (isset($_GET['AddedID'])) { include_once $path_to_root . "/reporting/includes/reporting.inc"; $id = $_GET['AddedID']; $stype = ST_WORKORDER; display_notification(_("The manufacturing process has been entered.")); display_note(get_trans_view_str($stype, $id, _("View this Work Order"))); display_note(get_gl_view_str($stype, $id, _("View the GL Journal Entries for this Work Order")), 1); $ar = array('PARAM_0' => $_GET['date'], 'PARAM_1' => $_GET['date'], 'PARAM_2' => $stype); display_note(print_link(_("Print the GL Journal Entries for this Work Order"), 702, $ar), 1); hyperlink_no_params("search_work_orders.php", _("Select another &Work Order to Process")); br(); end_page(); exit; } //-------------------------------------------------------------------------------------------------- $wo_details = get_work_order($_POST['selected_id']); if (strlen($wo_details[0]) == 0) { display_error(_("The order number sent is not valid.")); exit; } //-------------------------------------------------------------------------------------------------- function can_process() { global $wo_details, $SysPrefs, $Refs; if (!$Refs->is_valid($_POST['ref'])) { display_error(_("You must enter a reference.")); set_focus('ref'); return false; } if (!is_new_reference($_POST['ref'], 29)) { display_error(_("The entered reference is already in use."));
function print_workorders() { global $path_to_root, $SysPrefs, $dflt_lang; include_once $path_to_root . "/reporting/includes/pdf_report.inc"; $from = $_POST['PARAM_0']; $to = $_POST['PARAM_1']; $email = $_POST['PARAM_2']; $comments = $_POST['PARAM_3']; $orientation = $_POST['PARAM_4']; if (!$from || !$to) { return; } $orientation = $orientation ? 'L' : 'P'; $fno = explode("-", $from); $tno = explode("-", $to); $from = min($fno[0], $tno[0]); $to = max($fno[0], $tno[0]); $cols = array(4, 60, 190, 255, 320, 385, 450, 515); // $headers in doctext.inc $aligns = array('left', 'left', 'left', 'left', 'right', 'right', 'right'); $params = array('comments' => $comments); $cur = get_company_Pref('curr_default'); if ($email == 0) { $rep = new FrontReport(_('WORK ORDER'), "WorkOrderBulk", user_pagesize(), 9, $orientation); } if ($orientation == 'L') { recalculate_cols($cols); } for ($i = $from; $i <= $to; $i++) { $myrow = get_work_order($i); if ($myrow === false) { continue; } $date_ = sql2date($myrow["date_"]); if ($email == 1) { $rep = new FrontReport("", "", user_pagesize(), 9, $orientation); $rep->title = _('WORK ORDER'); $rep->filename = "WorkOrder" . $myrow['wo_ref'] . ".pdf"; } $rep->SetHeaderType('Header2'); $rep->currency = $cur; $rep->Font(); $rep->Info($params, $cols, null, $aligns); $contact = array('email' => $myrow['email'], 'lang' => $dflt_lang, 'name' => $myrow['contact'], 'name2' => '', 'contact'); $rep->SetCommonData($myrow, null, null, '', 26, $contact); $rep->NewPage(); $result = get_wo_requirements($i); $rep->TextCol(0, 5, _("Work Order Requirements"), -2); $rep->NewLine(2); $has_marked = false; while ($myrow2 = db_fetch($result)) { $qoh = 0; $show_qoh = true; // if it's a non-stock item (eg. service) don't show qoh if (!has_stock_holding($myrow2["mb_flag"])) { $show_qoh = false; } if ($show_qoh) { $qoh = get_qoh_on_date($myrow2["stock_id"], $myrow2["loc_code"], $date_); } if ($show_qoh && $myrow2["units_req"] * $myrow["units_issued"] > $qoh && !$SysPrefs->allow_negative_stock()) { // oops, we don't have enough of one of the component items $has_marked = true; } else { $has_marked = false; } if ($has_marked) { $str = $myrow2['stock_id'] . " ***"; } else { $str = $myrow2['stock_id']; } $rep->TextCol(0, 1, $str, -2); $rep->TextCol(1, 2, $myrow2['description'], -2); $rep->TextCol(2, 3, $myrow2['location_name'], -2); $rep->TextCol(3, 4, $myrow2['WorkCentreDescription'], -2); $dec = get_qty_dec($myrow2["stock_id"]); $rep->AmountCol(4, 5, $myrow2['units_req'], $dec, -2); $rep->AmountCol(5, 6, $myrow2['units_req'] * $myrow['units_issued'], $dec, -2); $rep->AmountCol(6, 7, $myrow2['units_issued'], $dec, -2); $rep->NewLine(1); if ($rep->row < $rep->bottomMargin + 15 * $rep->lineHeight) { $rep->NewPage(); } } $rep->NewLine(1); $rep->TextCol(0, 5, " *** = " . _("Insufficient stock"), -2); $memo = get_comments_string(ST_WORKORDER, $i); if ($memo != "") { $rep->NewLine(); $rep->TextColLines(1, 5, $memo, -2); } if ($email == 1) { $myrow['DebtorName'] = $myrow['contact']; $myrow['reference'] = $myrow['wo_ref']; $rep->End($email); } } if ($email == 0) { $rep->End(); } }