Пример #1
0
     foreach ($focus->column_fields as $fieldname => $val) {
         if (isset($_REQUEST[$fieldname])) {
             $value = $_REQUEST[$fieldname];
             $focus->column_fields[$fieldname] = $value;
         }
     }
     //Handling for dateformat in invoicedate vtiger_field
     if ($focus->column_fields['invoicedate'] != '') {
         $curr_due_date = $focus->column_fields['invoicedate'];
         $focus->column_fields['invoicedate'] = DateTimeField::convertToDBFormat($curr_due_date);
     }
     $soid = $focus->column_fields['salesorder_id'];
     $so_focus = new SalesOrder();
     $so_focus->id = $soid;
     $so_focus->retrieve_entity_info($soid, "SalesOrder");
     $focus = getConvertSoToInvoice($focus, $so_focus, $soid);
     // Reset the value w.r.t SalesOrder Selected
     $currencyid = $so_focus->column_fields['currency_id'];
     $rate = $so_focus->column_fields['conversion_rate'];
     //Added to display the SO's associated products -- when we select SO in New Invoice page
     if (isset($_REQUEST['salesorder_id']) && $_REQUEST['salesorder_id'] != '') {
         $associated_prod = getAssociatedProducts("SalesOrder", $so_focus, $focus->column_fields['salesorder_id']);
     }
     $smarty->assign("SALESORDER_ID", $focus->column_fields['salesorder_id']);
     $smarty->assign("ASSOCIATEDPRODUCTS", $associated_prod);
     $smarty->assign("MODE", $so_focus->mode);
     $smarty->assign("AVAILABLE_PRODUCTS", 'true');
 } elseif (isset($_REQUEST['convertmode']) && $_REQUEST['convertmode'] == 'potentoinvoice') {
     $focus->mode = '';
     $_REQUEST['opportunity_id'] = $_REQUEST['return_id'];
     $relpot = $adb->query_result($adb->pquery('select related_to from vtiger_potential where potentialid=?', array($_REQUEST['return_id'])), 0, 0);
function createInvoice($salesorder_id)
{
    require_once 'include/utils/utils.php';
    require_once 'modules/SalesOrder/SalesOrder.php';
    require_once 'modules/Invoice/Invoice.php';
    require_once 'modules/Users/Users.php';
    global $log, $adb;
    global $current_user;
    // Payment duration in days
    $payment_duration_values = array('net 01 day' => '1', 'net 05 days' => '5', 'net 07 days' => '7', 'net 10 days' => '10', 'net 15 days' => '15', 'net 30 days' => '30', 'net 45 days' => '45', 'net 60 days' => '60');
    if (!$current_user) {
        $current_user = Users::getActiveAdminUser();
    }
    $so_focus = new SalesOrder();
    $so_focus->id = $salesorder_id;
    $so_focus->retrieve_entity_info($salesorder_id, "SalesOrder");
    foreach ($so_focus->column_fields as $fieldname => $value) {
        $so_focus->column_fields[$fieldname] = decode_html($value);
    }
    $focus = new Invoice();
    // This will only fill in the basic columns from SO to Invoice and also Update the SO id in new Invoice
    $focus = getConvertSoToInvoice($focus, $so_focus, $salesorder_id);
    // Pick up the Payment due date based on the Configuration in SO
    $payment_duration = $so_focus->column_fields['payment_duration'];
    $due_duration = $payment_duration_values[trim(strtolower($payment_duration))];
    $durationinsec = mktime(0, 0, 0, date('m'), date('d') + $due_duration, date('Y'));
    // Cleanup focus object, to duplicate the Invoice.
    $focus->id = '';
    $focus->mode = '';
    $focus->column_fields['invoicestatus'] = $so_focus->column_fields['invoicestatus'];
    $focus->column_fields['invoicedate'] = date('Y-m-d');
    $focus->column_fields['duedate'] = date('Y-m-d', $durationinsec);
    // Additional SO fields to copy -> Invoice field name mapped to equivalent SO field name
    $invoice_so_fields = array('txtAdjustment' => 'txtAdjustment', 'hdnSubTotal' => 'hdnSubTotal', 'hdnGrandTotal' => 'hdnGrandTotal', 'hdnTaxType' => 'hdnTaxType', 'hdnDiscountPercent' => 'hdnDiscountPercent', 'hdnDiscountAmount' => 'hdnDiscountAmount', 'hdnS_H_Amount' => 'hdnS_H_Amount', 'assigned_user_id' => 'assigned_user_id', 'currency_id' => 'currency_id', 'conversion_rate' => 'conversion_rate');
    foreach ($invoice_so_fields as $invoice_field => $so_field) {
        $focus->column_fields[$invoice_field] = $so_focus->column_fields[$so_field];
    }
    $focus->_salesorderid = $salesorder_id;
    $focus->_recurring_mode = 'recurringinvoice_from_so';
    $focus->save("Invoice");
}
function createInvoice($salesorder_id)
{
    require_once 'include/utils/utils.php';
    require_once 'modules/SalesOrder/SalesOrder.php';
    require_once 'modules/Invoice/Invoice.php';
    require_once 'modules/Accounts/Accounts.php';
    require_once 'modules/Users/Users.php';
    global $log, $adb;
    global $current_user;
    // Payment duration in days
    $payment_duration_values = array('net 01 day' => '1', 'net 05 days' => '5', 'net 07 days' => '7', 'net 10 days' => '10', 'net 15 days' => '15', 'net 30 days' => '30', 'net 45 days' => '45', 'net 60 days' => '60');
    if (!$current_user) {
        $current_user = Users::getActiveAdminUser();
    }
    //End if
    $so_focus = new SalesOrder();
    $so_focus->id = $salesorder_id;
    $so_focus->retrieve_entity_info($salesorder_id, "SalesOrder");
    //SalesOrderのデータ抽出
    foreach ($so_focus->column_fields as $fieldname => $value) {
        #	print $fieldname . " : " . $value. "<br />";
        $so_focus->column_fields[$fieldname] = decode_html($value);
    }
    //End foreach
    $account_id = $so_focus->column_fields[account_id];
    /** ▼ ** 顧客情報呼び出し ****/
    $ac_focus = new Accounts();
    $ac_focus->id = $account_id;
    #	print "アカウントID : ".$account_id."<br />";
    $ac_focus->retrieve_entity_info($account_id, "Accounts");
    foreach ($ac_focus->column_fields as $fieldname => $value) {
        $ac_focus->column_fields[$fieldname] = decode_html($value);
    }
    //End foreach
    /** ▲ ** 顧客情報呼び出し ****/
    $strPayDay = $ac_focus->column_fields[payday];
    $focus = new Invoice();
    // This will only fill in the basic columns from SO to Invoice and also Update the SO id in new Invoice
    $focus = getConvertSoToInvoice($focus, $so_focus, $salesorder_id);
    switch ($strPayDay) {
        case '翌々月10日(40日)':
            $durationinsec = date('Y-m', strtotime('+2 month' . $_POST[first_date])) . "-10";
            break;
        case '翌々月15日(45日)':
            $durationinsec = date('Y-m', strtotime('+2 month' . $_POST[first_date])) . "-15";
            break;
        case '翌々月末日(60日)':
            $durationinsec = date('Y-m-t', strtotime('+2 month' . $_POST[first_date]));
            break;
        case '3ヶ月後10日(100日)':
            $durationinsec = date('Y-m', strtotime('+3 month' . $_POST[first_date])) . "-10";
            break;
        case '翌月10日':
            $durationinsec = date('Y-m', strtotime('+1 month' . $_POST[first_date])) . "-10";
            break;
        case '翌月15日':
            $durationinsec = date('Y-m', strtotime('+1 month' . $_POST[first_date])) . "-15";
            break;
        case '翌月20日':
            $durationinsec = date('Y-m', strtotime('+1 month' . $_POST[first_date])) . "-20";
            break;
        case '翌月末(30日)':
            $durationinsec = date('Y-m-t', strtotime($_POST[first_date] . ' +1 month'));
            break;
    }
    //End switch
    // Pick up the Payment due date based on the Configuration in SO
    #	$payment_duration = $so_focus->column_fields['payment_duration'];
    #	$due_duration = $payment_duration_values[trim(strtolower($payment_duration))];
    #	$durationinsec = mktime(0,0,0,date('m'),date('d')+$due_duration,date('Y'));
    // Cleanup focus object, to duplicate the Invoice.
    $focus->id = '';
    $focus->mode = '';
    #	$focus->column_fields['invoicestatus'] = $so_focus->column_fields['invoicestatus'];
    $focus->column_fields['invoicestatus'] = "自動作成";
    $focus->column_fields['closing_week'] = $so_focus->column_fields['closing_week'];
    $focus->column_fields['invoicedate'] = date('Y-m-t', strtotime($_POST[first_date]));
    #	$focus->column_fields['duedate'] = date('Y-m-d', $durationinsec);
    if (preg_match('@\\-12\\-31@', $durationinsec)) {
        $focus->column_fields['duedate'] = '2015-12-28';
    } else {
        $focus->column_fields['duedate'] = $durationinsec;
    }
    //End if
    #	print "<p>受注実績番号 : ".$so_focus->column_fields['salesorder_no']."</p>";
    $focus->column_fields['salesorder_no'] = $so_focus->column_fields['salesorder_no'];
    #受注実績番号
    $focus->column_fields['salesamount'] = $so_focus->column_fields['salesamount'];
    #売上
    $focus->column_fields['amount'] = $so_focus->column_fields['amount'];
    #粗利
    if (preg_match('@\\((.*?)分\\)|((.*?)分)@', $so_focus->column_fields['description'])) {
        $focus->column_fields['description'] = $so_focus->column_fields['description'];
    } else {
        $focus->column_fields['description'] = "";
    }
    //End if
    $focus->column_fields['outcome'] = "固定";
    // Additional SO fields to copy -> Invoice field name mapped to equivalent SO field name
    $invoice_so_fields = array('txtAdjustment' => 'txtAdjustment', 'hdnSubTotal' => 'hdnSubTotal', 'hdnGrandTotal' => 'hdnGrandTotal', 'hdnTaxType' => 'hdnTaxType', 'hdnDiscountPercent' => 'hdnDiscountPercent', 'hdnDiscountAmount' => 'hdnDiscountAmount', 'hdnS_H_Amount' => 'hdnS_H_Amount', 'assigned_user_id' => 'assigned_user_id', 'currency_id' => 'currency_id', 'conversion_rate' => 'conversion_rate', 'division' => 'division', 'pre_tax_total' => 'pre_tax_total', 'balance' => 'hdnGrandTotal', 'margin_rate' => 'margin_rate');
    #	foreach($invoice_so_fields as $invoice_field => $so_field) {
    #		print $so_field." : ".$so_focus->column_fields[$so_field]."<br />";
    #	}//End foreach
    foreach ($invoice_so_fields as $invoice_field => $so_field) {
        $focus->column_fields[$invoice_field] = $so_focus->column_fields[$so_field];
    }
    //End foreach
    $focus->_salesorderid = $salesorder_id;
    $focus->_recurring_mode = 'recurringinvoice_from_so';
    $focus->save("Invoice");
}