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;
}
Example #2
0
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();
    }
}