هنگام ذخیره پیش فاکتور بوسیله api با خطای "ردیفی برای فاکتور تعریف نشده است" مواجه می شویم. لازم به ذکر است فیلدهای مربوط به آبجکت InvoiceInfo از جمله آرایه Details که محصولات پیش فاکتور می باشد مقداردهی شده اند.
لطفا راهنمایی بفرمایید
با سلام و احترام
کد ارسالی شما مشکلاتی داشت که به شرح زیر اصلاح گردید. مطابق کد زیر پیش فاکتور بدون خطا ایجاد میگردد.
لازم به ذکر میباشد که کد را مطابق دیتای خودتون اصلاح و سپس استفاده نمایید.
$soapClient = new SoapClient($url);
$params = array(
'userName' => $username,
'password' => $password,
'invoiceInfo' => array(
'CrmObjectTypeCode' => 'pish_foroush',
'IdentityId' => '82caaf6b-49fd-4c0c-8aca-f79abdc370e4',
'Subject' => 'فاکتور شماره ' . $invoice->code,
'InvoiceType' => 'Quote',
'FinalValue' => "200",
'Details' => array(
'InvoiceDetailInfo' => array(
'ProductCode' => "101",
'ProductName' => 'تست',
'BaseUnitPrice' => "100",
'FinalUnitPrice' => "100",
'Count' => "2",
'TotalUnitPrice' => "200",
'TotalValue' => "200",
'Discount' => "0",
)
)
)
);
$result = $soapClient->SaveInvoice($params);
ممنون از پاسخ شما این مورد رو حل کردم ولی ی مشکل دیگه پیش اومد خطای زیر
Attempted to divide by zero.
کدیکه زدم هم خدمتتون ارسال می کنم
$username = "admin";
$password = "Apd_1368";
$text = 'نام مشتری:';
$text .= $invoice->name;
$text .= ' - شماره فاکتور در سایت:';
$text .= $invoice->code;
$discount = (int)$invoice->coupon_discount + (int)$invoice->presenter_discount + (int)$invoice->agent_discount;
foreach ($invoice->items as $key => $item) {
$product_code=$item->product ? $item->product->code : 0;
$product_name=$item->product ? $item->product->title : $item->product_id;
$FinalUnitPrice=$item->product ? $item->product->base_price : $item->price;
$TotalUnitPrice=$item->price * $item->count;
$TotalValue=($item->product ? $item->product->base_price : $item->price) * $item->count;
$Discount=($item->product ? $item->product->base_price : $item->price) * $item->count - $item->price * $item->count;
$baskets[$key]= ['InvoiceDetailInfo' => [
'ProductCode' => "$product_code",
'ProductName' => "$product_name",
'BaseUnitPrice' => "$item->price",
'FinalUnitPrice' => "$FinalUnitPrice",
'Count' => "$item->count",
'TotalUnitPrice' => "$TotalUnitPrice",
'TotalValue' => "$TotalValue",
'Discount' => "$Discount",
]];
}
$url = 'http://185.158.172.246/services/api/iinvoice.svc?wsdl';
$soapClient = new SoapClient($url);
$FinalValue=$invoice->total_price - $discount + $invoice->shipping_cost;
$params = array(
'userName' => $username,
'password' => $password,
'invoiceInfo' => array(
'CrmObjectTypeCode' => 'PISHFAKTOR',
'IdentityId' => 'd65a5986-b0de-443f-b8f7-89f61010f3f6',
'Description' => $text,
'Subject' => 'فاکتور شماره ' . $invoice->code,
'InvoiceType' => 'Quote',
'FinalValue' => "$FinalValue",
'Discount' => "$discount",
'Details' => $baskets,
)
);
$result = $soapClient->SaveInvoice($params);
dd($result,$params,$invoice);
با سلام و احترام
در صورتیکه پارامتر "TotalUnitPrice" از کلاس InvoiceInfo که معادل "مبلغ کل ردیف فاکتور" میباشد با صفر مقداردهی شود خطای "Attempted to divide by zero" مشاهده خواهد شد. لطفا بررسی فرمایید به این پارامتر مقدار صفر پاس داده نشده باشد.
در صورت رفع نشدن مشکل، مجدد از طریق همین فروم پیگیری نمایید.
با سپاس
array:3 [▼ // app/Helpers/general_helper.php:1885 "userName" => "admin" "password" => "Apd_1368" "invoiceInfo" => array:9 [▼ "CrmObjectTypeCode" => "PISHFAKTOR" "IdentityId" => "d65a5986-b0de-443f-b8f7-89f61010f3f6" "Description" => "نام مشتری:فاطمه - شماره فاکتور در سایت:202408310003" "Subject" => "فاکتور شماره 202408310003" "InvoiceType" => "Quote" "TotalUnitPrice" => "2502000" "FinalValue" => "2003000" "Discount" => "500000" "Details" => array:2 [▼ 0 => array:1 [▼ "InvoiceDetailInfo" => array:8 [▼ "ProductCode" => "51501006" "ProductName" => "آینه گردان بیوتی" "BaseUnitPrice" => "2000" "FinalUnitPrice" => "50000" "Count" => "1" "TotalUnitPrice" => "2000" "TotalValue" => "50000" "Discount" => "48000" ] ] 1 => array:1 [▼ "InvoiceDetailInfo" => array:8 [▼ "ProductCode" => "51503066" "ProductName" => "صندلی بار کازمو" "BaseUnitPrice" => "2500000" "FinalUnitPrice" => "2500000" "Count" => "1" "TotalUnitPrice" => "2500000" "TotalValue" => "2500000" "Discount" => null ] ] ] ] ]
ببینید من اینو ارسال می کنم
با سلام و احترام
یک نمونه کد php (با دو ردیف محصول) برای شما قرار دادم . لطفا کد خود را مطابق آن اصلاح فرمایید. کد زیر بدون خطا درنرم افزار crm پیش فاکتور ایجاد میکند.
لارم به ذکر است دیتاها را مطابق crm خودتان وارد نمایید.
<?php
try{
$username = 'admin';
$password = '???';
$url = 'http://[crm address]/services/api/iinvoice.svc?wsdl';
$soapClient = new SoapClient($url);
$params = array(
'userName' => $username,
'password' => $password,
'invoiceInfo' => array(
'CrmObjectTypeCode' => 'pish_foroush',
'IdentityId' => '638fc439-b38c-4473-a2cd-72e848b135f9',
'InvoiceType' => 'Quote',
'TotalValue' => "1100",
'FinalValue' => "1100",
'Details' => array(
'InvoiceDetailInfo' => array (
array (
'ProductCode' => "100",
'ProductName' => 'موس',
'BaseUnitPrice' => "100",
'FinalUnitPrice' => "200",
'Count' => "2",
'TotalUnitPrice' => "200",
'Discount' => "0",
),
array (
'ProductCode' => "1020",
'ProductName' => 'مانیتور',
'BaseUnitPrice' => "300",
'FinalUnitPrice' => "900",
'Count' => "3",
'TotalUnitPrice' => "900",
'Discount' => "0",
)
)
)
)
);
$result = $soapClient->SaveInvoice($params);
if ($result->SaveInvoiceResult->Success){
echo "YourCode : " . $result->SaveInvoiceResult->CrmId;
echo '<br>';
echo json_encode($result, JSON_UNESCAPED_UNICODE);
}else
echo $result->SaveInvoiceResult->Message;
}catch ( Exception $e ) {
echo $e->getMessage();
}
نمونه کدم رو گذاشتم خدمتتون
$soapClient = new SoapClient($url);
$params = array(
'userName' => $username,
'password' => $password,
'formInfo' => array(
'CrmObjectTypeCode' => 'order1',
'CreatDate' => date('Y-m-d'),
'IdentityId' => 'id',
'Description' => $text,
'Subject' => 'فاکتور شماره ' . $invoice->code,
'DetailInfo' => array(
'ProductCode' => "1",
'ProductName' => 'تست',
'BaseUnitPrice' => "1000",
'FinalUnitPrice' => "1000",
'Count' => "2",
'TotalUnitPrice' => "2000",
)
)
);
$result = $soapClient->SaveInvoice($params);
لطفا راهنماییم کنید