Merge branch 'invoice' into 'master'

Invoice

See merge request CIEFWorldwideSdnBhd/exchange!152
This commit is contained in:
omair saleh
2020-09-18 08:48:53 +00:00
68 changed files with 361663 additions and 1153 deletions
+2 -1
View File
@@ -10,6 +10,7 @@
"@vue/standard"
],
"rules": {
"vue/max-attributes-per-line": "off"
"vue/max-attributes-per-line": "off",
"vue/camelcase": "off"
}
}
+3 -1
View File
@@ -20,4 +20,6 @@ yarn-error.log
vendor/composer/autoload_static.php
vendor/composer/autoload_classmap.php
package-lock.json
composer.lock
composer.lock
config/database.php
notes.txt
Binary file not shown.
+667
View File
@@ -0,0 +1,667 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use Illuminate\Routing\ResponseFactory;
use Illuminate\Support\MessageBag;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
use App\Booking;
use App\Invoice;
use App\InvoiceDetails;
use App\InvoiceStatuses;
use App\SupplierBooking;
use App\SettingSupplier;
use App\Marking;
use App\User;
use PDF;
class InvoiceController extends Controller
{
public function show(Request $request, $id)
{
// validate $id is number
if (!is_numeric($id)) {
return response()->json(["message" => "Invalid id. Id needs to be a number"], 400);
}
// only allow if belongs or is admin
if ($request->user()->role === 'member') {
if (!$this->isUser($id, $request->user()->id)) {
return response()->json(['message' => 'The Invoice Does not belongs to you.'], 403);
}
}
$invoice = Invoice::where('booking_id', $id)->first();
if (!$invoice) {
return response()->json(['message' => 'Invoice Not Found'], 404);
}
$lines = InvoiceDetails::where('invoice_id', $invoice['id'])->orderBy('order', 'asc')->get();
$status = InvoiceStatuses::where('invoice_id', $invoice['id'])->orderBy('created_at', 'asc')->get();
$invoice->lines = $lines;
$invoice->status = $status;
return response()->json($invoice, 200);
}
public function create(Request $request, $id)
{
$user = $request->user();
// validate $id
if (!is_numeric($id)) {
return response()->json(["message" => "Invalid id. Id needs to be a number"], 400);
}
$validatedData = $request->validate([
'address' => 'required',
'buyer_company' => 'required',
'contact_no' => 'required',
'marking' => 'required',
'reg_no' => 'required',
'lines.*.order' => 'required|numeric',
'lines.*.stock_code' => 'required',
'lines.*.description' => 'max:256',
'lines.*.quantity' => 'required|numeric',
'lines.*.unit_price_rm' => 'required|numeric',
'lines.*.unit_price_rmb' => '',
'lines.*.total' => 'required|numeric',
]);
// booking_id belongs to user
$booking = Booking::where('id', $id)->first();
if (!$booking) {
return response()->json(['message' => 'Unable to find booking'], 403);
}
// user_id in booking does not match
if ($booking->user_id !== $user->id) {
return response()->json([
'message' => 'Booking does not belongs to you.'
], 403);
}
// Amount match with total
$subtotalArray = array_map(
function ($line) { return $line['total']; },
$validatedData['lines']
);
$total = array_reduce($subtotalArray, function ($v1, $v2) {
return $v1 + $v2;
});
if ($total !== $booking->amount) {
return response()->json([
'message' => 'Booking amount expected is '.$booking->amount.'. Your Invoice amount is '.$total
], 400);
}
// Write to database if does not exist
$exist = Invoice::where('booking_id', $id)->first();
if ($exist) {
return response()
->json(['message' => 'Invoice exist. Cannot create duplicate invoice. Try edit.'], 400);
}
// Generate PO Number - po20200810-001(PO Format)
$dt = Carbon::now();
$po_number = 'po'.$dt->format('Ymmdd').'-'.$id;
$invoice = new Invoice;
$invoice->amount = $total;
$invoice->booking_id = (int)$id;
$invoice->reg_no = $validatedData['reg_no'];
$invoice->buyer_company = $validatedData['buyer_company'];
$invoice->address = $validatedData['address'];
$invoice->contact_no = $validatedData['contact_no'];
$invoice->po_number = $po_number;
$invoice->save();
if (!$invoice) {
return response()
->json(['message' => 'Unable to Save Data'], 500);
}
// Insert invoice_id into lines
foreach( $validatedData['lines'] as $key => $line) {
$invoice_details = new InvoiceDetails;
$invoice_details->order = $line['order'];
$invoice_details->description = $line['description'];
$invoice_details->quantity = $line['quantity'];
$invoice_details->stock_code = $line['stock_code'];
$invoice_details->invoice_id = $invoice->id;
$invoice_details->unit_price_rmb = $line['unit_price_rmb'];
$invoice_details->unit_price_rm = $line['unit_price_rm'];
$invoice_details->total = $line['total'];
$invoice_details->save();
}
unset($line);
$invoice->lines = $invoice_details;
// Post status as pending
$status = new InvoiceStatuses;
$status->status = 'pending';
$status->comment = '';
$status->invoice_id = $invoice->id;
$status->save();
if($invoice_details) {
return $this->show($request, $id);
} else {
return response(500);
}
}
public function edit(Request $request, $id)
{
$user = $request->user();
// validate $id
if (!is_numeric($id)) {
return response()->json(["message" => "Invalid id. Id needs to be a number"], 400);
}
$validatedData = $request->validate([
'address' => 'required',
'buyer_company' => 'required',
'contact_no' => 'required',
'marking' => 'required',
'reg_no' => 'required',
'lines.*.order' => 'required|numeric',
'lines.*.stock_code' => 'required',
'lines.*.description' => 'max:256',
'lines.*.quantity' => 'required|numeric',
'lines.*.unit_price_rm' => 'required|numeric',
'lines.*.unit_price_rmb' => '',
'lines.*.total' => 'required|numeric',
]);
// booking_id belongs to user
$booking = Booking::where('id', $id)->first();
if (!$booking) {
return response()->json(['message' => 'Unable to find booking'], 403);
}
$invoice = Invoice::where('booking_id', $id)->first();
if (!$invoice) {
return response()->json(['message' => 'Invoice Not Found'], 404);
}
// role === 'member' && $booking->user_id !== user()->id && $currentstatus !== 'request_change')
if ($request->user()->role === 'member') {
if ($booking->user_id !== $request->user()->id) {
return response()->json([
'message' => 'Booking does not belongs to you'
], 403);
}
$currentstatus = InvoiceStatuses::where('invoice_id', $invoice['id'])->latest('created_at')->first()->status;
if ($currentstatus !== 'request_change') {
return response()->json(['message' => 'Submitted PO can only be changed when status is request_change'], 403);
}
}
// Amount match with total
$subtotalArray = array_map(
function ($line) { return $line['total']; },
$validatedData['lines']
);
$total = array_reduce($subtotalArray, function ($v1, $v2) {
return $v1 + $v2;
});
if ($total != $booking->amount) {
return response()->json([
'message' => 'Booking amount expected is '.$booking->amount.'. Your Invoice amount is '.$total
], 400);
}
// Generate PO Number - po20200810-001(PO Format)
$dt = Carbon::now();
$po_number = 'po'.$dt->format('Ymd').'-'.$id;
$invoice->amount = $total;
$invoice->booking_id = (int)$id;
$invoice->reg_no = $validatedData['reg_no'];
$invoice->buyer_company = $validatedData['buyer_company'];
$invoice->address = $validatedData['address'];
$invoice->contact_no = $validatedData['contact_no'];
$invoice->po_number = $po_number;
$invoice->save();
if (!$invoice) {
return response()
->json(['message' => 'Unable to Save Data'], 500);
}
// Remove all invoice_details corresponding to invoice_id
$invoice_details = InvoiceDetails::where('invoice_id', $invoice->id);
$invoice_details->delete();
// Insert invoice_id into lines
foreach( $validatedData['lines'] as $key => $line) {
$invoice_details = new InvoiceDetails;
$invoice_details->order = $line['order'];
$invoice_details->description = $line['description'];
$invoice_details->quantity = $line['quantity'];
$invoice_details->stock_code = $line['stock_code'];
$invoice_details->invoice_id = $invoice->id;
$invoice_details->unit_price_rmb = $line['unit_price_rmb'];
$invoice_details->unit_price_rm = $line['unit_price_rm'];
$invoice_details->total = $line['total'];
$invoice_details->save();
}
unset($line);
// Post status as pending
$status = new InvoiceStatuses;
$status->status = 'pending';
if ($request->user()->role === 'admin') {
$status->comment = 'Edited by Admin.';
} else {
$status->comment = 'Edited by Member.';
}
$status->invoice_id = $invoice->id;
$status->save();
if($invoice_details) {
return $this->show($request, $id);
} else {
return response(500);
}
}
public function postStatus(Request $request, $id)
{
// validate $id is integer
if (!is_numeric($id)) {
return response()->json(["message" => "Invalid id. Id needs to be a number"], 400);
}
$validatedData = $request->validate([
'status' => ['required', Rule::in('request_change', 'approve')],
'comment' => Rule::requiredIf($request->status === 'request_change')
]);
// Save status to database
$status = new InvoiceStatuses;
$status->status = $validatedData['status'];
$status->comment = $validatedData['comment'];
$status->invoice_id = Invoice::where('booking_id', $id)->first()['id'];
$status->save();
$booking = Booking::find($id);
$monthlycount = Invoice::where('ei', 'like', 'EI-'.Carbon::createFromFormat('Y-m-d H:i:s', $booking->created_at)->format('Ym').'%')->count() + 1;
$generatednumber = Carbon::createFromFormat('Y-m-d H:i:s', $booking->created_at)->format('Ym').'-'.sprintf("%05d", $monthlycount);
$invoice = Invoice::where('booking_id', $id)->first();
$invoice->ei = 'EI-'.$generatednumber;
$invoice->edo = 'EDO-'.$generatednumber;
$invoice->save();
if(!$status) {
return response()->json(['message' => 'Unable to Update Status'], 500);
}
// Change Status to 7 if approve
// Add email event here
if ($validatedData['status'] === 'approve') {
$booking = Booking::find($id);
$booking->status = 7;
$booking->admin_status = 7;
$booking->save();
if(!$booking) {
return response()->json(['message' => 'Unable to Complete Booking. Please Approve Again'], 500);
}
}
// Response
return response()->json($status, 201);
}
public function customerToCIEFPO(Request $request, $id)
{
if (!is_numeric($id)) {
return response()->json(["message" => "Invalid id. Id needs to be a number"], 400);
}
// Booking Exist and Belongs to User or is Admin
if ($request->user()->role === 'member') {
if (!$this->isUser($id, $request->user()->id)) {
return response()->json(['message' => 'The PO Does not belongs to you.'], 403);
}
}
// Ensure Invoice Status is Approve
// if ($this->invoiceStatus($id) !== 'approve') {
// return response()->json(['message' => 'Invoice must and exist and approve status.'], 403);
// }
// Generate PO
$booking = Booking::where('id', $id)->first();
$invoice = Invoice::where('booking_id', $booking['id'])->first();
$lines = InvoiceDetails::where('invoice_id', $invoice->id)->get();
$marking = User::find($booking->user_id)->marking;
$data = [
'title' => 'Purchase Order',
'detail' => [
'date' => Carbon::createFromFormat('Y-m-d H:i:s', $booking->created_at)->format('d-m-Y'),
'po' => $invoice->po_number,
'do' => '',
'ref' => $booking->id
],
'buyer' => [
'buyer_company' => $invoice->buyer_company,
'reg_no' => $invoice->reg_no,
'address' => $invoice->address,
'gst' => '',
'phone' => $invoice->contact_no,
'marking_no' => $marking
],
'seller' => [
'seller_company' => 'CIEF Worldwide Sdn Bhd (1134596-M)',
'address' => 'Malaysia Global Innovation & Creativity Centre, Level
1 CWS, Block 3730, Persiaran APEC 63000
Cyberjaya.',
'phone' => '018 2909252',
],
'lines' => $lines,
'amount' => $invoice->amount
];
$defaultConfig = (new \Mpdf\Config\ConfigVariables())->getDefaults();
$fontDirs = $defaultConfig['fontDir'];
$defaultFontConfig = (new \Mpdf\Config\FontVariables())->getDefaults();
$fontData = $defaultFontConfig['fontdata'];
$mpdf = new \Mpdf\Mpdf([
'fontDir' => array_merge($fontDirs, [
__DIR__ . '/custom/font/directory',
]),
]);
$mpdf->shrink_tables_to_fit=1;
$mpdf->keep_table_proportions = true;
$mpdf->SetTitle('Invoice');
$html = view('pdf/po', $data);
$mpdf->Bookmark('Start of the document');
$mpdf->SetHTMLFooter('
<table width="100%">
<tr>
<td style="text-align: right; ">This is generated by computer. No signature required.</td>
<td style="text-align: right; ">Page {PAGENO} of {nbpg}</td>
</tr>
</table>
');
$mpdf->setHeader($invoice->po_number);
$mpdf->WriteHTML($html);
$mpdf->Output();
}
public function CIEFToSupplierDO(Request $request, $id)
{
if (!is_numeric($id)) {
return response()->json(["message" => "Invalid id. Id needs to be a number"], 400);
}
// Booking Exist and Belongs to User or is Admin
if ($request->user()->role === 'member') {
if (!$this->isUser($id, $request->user()->id)) {
return response()->json(['message' => 'The PO Does not belongs to you.'], 403);
}
}
// Ensure Invoice Status is Approve
// if ($this->invoiceStatus($id) !== 'approve') {
// return response()->json(['message' => 'Invoice must and exist and approve status.'], 403);
// }
// Generate PO
$booking = Booking::where('id', $id)->first();
$invoice = Invoice::where('booking_id', $booking['id'])->first();
$lines = InvoiceDetails::where('invoice_id', $invoice->id)->get();
$supplierbooking = SupplierBooking::where('booking_id', $id)->first();
$supplier = SettingSupplier::where('id', $supplierbooking->supplier_id)->first();
$data = [
'title' => 'Delivery Order',
'detail' => [
'date' => Carbon::createFromFormat('Y-m-d H:i:s', $booking->created_at)->format('d-m-Y'),
'po' => $invoice->po_number,
'do' => '',
'ref' => $booking->id
],
'buyer' => [
'buyer_company' => 'CIEF Worldwide Sdn Bhd',
'reg_no' => '1134596-M',
'address' => 'Malaysia Global Innovation & Creativity Centre, Level
1 CWS, Block 3730, Persiaran APEC 63000
Cyberjaya.',
'gst' => '',
'phone' => '018 2909252',
'marking_no' => ''
],
'seller' => [
'seller_company' => $supplier->company_name,
'address' => '',
'phone' => '',
],
'lines' => $lines,
'amount' => $invoice->amount
];
$defaultConfig = (new \Mpdf\Config\ConfigVariables())->getDefaults();
$fontDirs = $defaultConfig['fontDir'];
$defaultFontConfig = (new \Mpdf\Config\FontVariables())->getDefaults();
$fontData = $defaultFontConfig['fontdata'];
$mpdf = new \Mpdf\Mpdf([
'fontDir' => array_merge($fontDirs, [
__DIR__ . '/custom/font/directory',
]),
]);
$mpdf->shrink_tables_to_fit=1;
$mpdf->keep_table_proportions = true;
$mpdf->SetTitle('Invoice');
$html = view('pdf/po', $data);
$mpdf->Bookmark('Start of the document');
$mpdf->SetHTMLFooter('
<table width="100%">
<tr>
<td style="text-align: right; ">This is generated by computer. No signature required.</td>
<td style="text-align: right; ">Page {PAGENO} of {nbpg}</td>
</tr>
</table>
');
$mpdf->setHeader($invoice->po_number);
$mpdf->WriteHTML($html);
$mpdf->Output();
}
public function CIEFToCustomerInvoice(Request $request, $id)
{
if (!is_numeric($id)) {
return response()->json(["message" => "Invalid id. Id needs to be a number"], 400);
}
// only allow if belongs or is admin
if ($request->user()->role === 'member') {
if (!$this->isUser($id, $request->user()->id)) {
return response()->json(['message' => 'The Invoice Does not belongs to you.'], 403);
}
}
$booking = Booking::where('id', $id)->first();
$invoice = Invoice::where('booking_id', $booking['id'])->first();
$lines = InvoiceDetails::where('invoice_id', $invoice->id)->get();
$data = [
'title' => 'Invoice',
'detail' => [
'date' => Carbon::createFromFormat('Y-m-d H:i:s', $booking->created_at)->format('d-m-Y'),
'ei' => $invoice->ei,
'edo' => null,
'ref' => $booking->id
],
'billto' => [
'buyer_company' => $invoice->buyer_company,
'reg_no' => $invoice->reg_no,
'address' => $invoice->address,
'gst' => '',
'phone' => $invoice->contact_no,
'marking_no' => ''
],
'total_page' => (count($lines) / 10),
'lines' => $lines,
'amount' => $invoice->amount
];
$defaultConfig = (new \Mpdf\Config\ConfigVariables())->getDefaults();
$fontDirs = $defaultConfig['fontDir'];
$defaultFontConfig = (new \Mpdf\Config\FontVariables())->getDefaults();
$fontData = $defaultFontConfig['fontdata'];
$mpdf = new \Mpdf\Mpdf([
'fontDir' => array_merge($fontDirs, [
__DIR__ . '/custom/font/directory',
]),
]);
$mpdf->shrink_tables_to_fit=1;
$mpdf->keep_table_proportions = true;
$mpdf->SetTitle('Invoice');
$html = view('pdf/invoice', $data);
$mpdf->Bookmark('Start of the document');
$mpdf->SetHTMLFooter('
<table width="100%">
<tr>
<td style="text-align: right; ">This is generated by computer. No signature required.</td>
<td style="text-align: right; ">Page {PAGENO} of {nbpg}</td>
</tr>
</table>
');
$mpdf->setHeader($invoice->ei);
$mpdf->WriteHTML($html);
$mpdf->Output();
}
public function CIEFToCustomerDO(Request $request, $id)
{
if (!is_numeric($id)) {
return response()->json(["message" => "Invalid id. Id needs to be a number"], 400);
}
// only allow if belongs or is admin
if ($request->user()->role === 'member') {
if (!$this->isUser($id, $request->user()->id)) {
return response()->json(['message' => 'The Invoice Does not belongs to you.'], 403);
}
}
// Generate PO
$booking = Booking::where('id', $id)->first();
$invoice = Invoice::where('booking_id', $booking['id'])->first();
$lines = InvoiceDetails::where('invoice_id', $invoice->id)->get();
$data = [
'title' => 'Delivery Order',
'detail' => [
'date' => Carbon::createFromFormat('Y-m-d H:i:s', $booking->created_at)->format('d-m-Y'),
'ei' => '',
'edo' => $invoice->edo,
'ref' => $booking->id
],
'billto' => [
'buyer_company' => $invoice->buyer_company,
'reg_no' => $invoice->reg_no,
'address' => $invoice->address,
'gst' => '',
'phone' => $invoice->contact_no,
'marking_no' => ''
],
'lines' => $lines,
'amount' => $invoice->amount
];
$defaultConfig = (new \Mpdf\Config\ConfigVariables())->getDefaults();
$fontDirs = $defaultConfig['fontDir'];
$defaultFontConfig = (new \Mpdf\Config\FontVariables())->getDefaults();
$fontData = $defaultFontConfig['fontdata'];
$mpdf = new \Mpdf\Mpdf([
'fontDir' => array_merge($fontDirs, [
__DIR__ . '/custom/font/directory',
]),
]);
$mpdf->shrink_tables_to_fit=1;
$mpdf->keep_table_proportions = true;
$mpdf->SetTitle('do');
$html = view('pdf/invoice', $data);
$mpdf->Bookmark('Start of the document');
$mpdf->SetHTMLFooter('
<table width="100%">
<tr>
<td style="text-align: right; ">This is generated by computer. No signature required.</td>
<td style="text-align: right; ">Page {PAGENO} of {nbpg}</td>
</tr>
</table>
');
$mpdf->setHeader($invoice->edo);
$mpdf->WriteHTML($html);
$mpdf->Output();
}
private function isUser($booking_id, $user_id) {
$booking = Booking::where([
['id', '=', $booking_id],
['user_id', '=', $user_id]
])->first();
if ($booking) {
return true;
} else {
return false;
}
}
private function invoiceStatus($booking_id) {
$invoice = Invoice::where('booking_id', $booking_id)->first();
if (!$invoice) {
return;
}
$currentstatus = InvoiceStatuses::where('invoice_id', $invoice['id'])->latest('created_at')->first()->status;
return $currentstatus;
}
}
+10 -2
View File
@@ -6,9 +6,17 @@ use Illuminate\Database\Eloquent\Model;
class Invoice extends Model
{
protected $fillable = ['invoice_url','amount','booking_id'];
protected $fillable = ['invoice_url','amount','booking_id', 'buyer_company', 'address', 'contact_no', 'po_number'];
public function booking(){
return $this->hasOne('App\Booking');
return $this->belongsTo('App\Booking');
}
public function invoiceDetails() {
return $this->hasOne('App\InvoiceDetails');
}
public function invoiceStatuses() {
return $this->hasMany('App\InvoiceStatuses');
}
}
+14
View File
@@ -0,0 +1,14 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class InvoiceDetails extends Model
{
protected $fillable = ['invoice_id', 'order','description','quantity', 'stock_code', 'unit_price_rmb', 'unit_price_rm', 'total'];
public function invoice() {
return $this->belongsTo('App/Invoice');
}
}
+14
View File
@@ -0,0 +1,14 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class InvoiceStatuses extends Model
{
protected $fillable = ['status','comment', 'invoice_id'];
public function invoice() {
return $this->belongsTo('App/Invoice');
}
}
+3
View File
@@ -6,6 +6,7 @@
"type": "project",
"require": {
"php": "^7.1.3",
"barryvdh/laravel-dompdf": "^0.8.6",
"doctrine/dbal": "^2.7",
"fideloper/proxy": "^4.0",
"intervention/image": "^2.4",
@@ -14,11 +15,13 @@
"laravel/tinker": "~1.0",
"laravelcollective/html": "^5.6",
"maatwebsite/excel": "^3.1",
"mpdf/mpdf": "^8.0",
"pusher/pusher-php-server": "~3.0",
"tymon/jwt-auth": "^1.0.0-rc.2",
"zizaco/entrust": "dev-master"
},
"require-dev": {
"beyondcode/laravel-er-diagram-generator": "^1.4",
"filp/whoops": "^2.0",
"fzaninotto/faker": "^1.4",
"laravel/dusk": "^3.0",
+4 -1
View File
@@ -169,7 +169,9 @@ return [
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
Tymon\JWTAuth\Providers\LaravelServiceProvider::class
Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
Barryvdh\DomPDF\ServiceProvider::class,
],
/*
@@ -222,6 +224,7 @@ return [
'Entrust' => Zizaco\Entrust\EntrustFacade::class,
'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class,
'JWTFactory' => Tymon\JWTAuth\Facades\JWTFactory::class,
'PDF' => Barryvdh\DomPDF\Facade::class
],
+3 -3
View File
@@ -43,9 +43,9 @@ return [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'database' => env('DB_DATABASE', 'exchange'),
'username' => env('DB_USERNAME', 'exchange'),
'password' => env('DB_PASSWORD', 'exchange1!Q'),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
+24
View File
@@ -0,0 +1,24 @@
<?php
return [
'mode' => 'utf-8',
'format' => 'A4',
'author' => '',
'subject' => '',
'keywords' => '',
'creator' => 'Laravel Pdf',
'display_mode' => 'fullpage',
'tempDir' => base_path('../temp/'),
'font_path' => base_path('resources/fonts/'),
'font_data' => [
'examplefont' => [
'R' => 'ExampleFont-Regular.ttf', // regular font
'B' => 'ExampleFont-Bold.ttf', // optional: bold font
'I' => 'ExampleFont-Italic.ttf', // optional: italic font
'BI' => 'ExampleFont-Bold-Italic.ttf', // optional: bold-italic font
'useOTL' => 0xFF, // required for complicated langs like Persian, Arabic and Chinese
'useKashida' => 75, // required for complicated langs like Persian, Arabic and Chinese
]
// ...add as many as you want.
]
];
@@ -0,0 +1,39 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddFieldsToInvoice extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('invoices', function (Blueprint $table) {
$table->string('buyer_company', 50);
$table->string('reg_no', 100);
$table->string('address', 120);
$table->string('contact_no', 20);
$table->string('po_number', 20);
$table->string('order_no', 20);
$table->double('tax_rate')->default(0);
$table->double('billing_charge_rate');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('invoices', function (Blueprint $table) {
//
});
}
}
@@ -0,0 +1,36 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddInvoiceDetails extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('invoice_details', function (Blueprint $table) {
$table->increments('id');
$table->integer('order');
$table->string('description');
$table->integer('quantity');
$table->double('unit_price');
$table->string('stock_code');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('invoice_details');
}
}
@@ -0,0 +1,39 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Query\Expression;
use Illuminate\Database\Migrations\Migration;
class AddForeignIdToInvoiceDetails extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('invoice_details', function (Blueprint $table) {
$table->integer('invoice_id')->unsigned();
$table->foreign('invoice_id')
->references('id')
->on('invoices')
->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('invoice_details', function (Blueprint $table) {
//
});
}
}
@@ -0,0 +1,38 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateInvoiceStatus extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('invoice_statuses', function (Blueprint $table) {
$table->increments('id');
$table->string('status', 20);
$table->string('comment');
$table->timestamps();
$table->integer('invoice_id')->unsigned();
$table->foreign('invoice_id')
->references('id')
->on('invoices')
->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('invoice_statuses');
}
}
@@ -0,0 +1,41 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddDefaultValueInvoices extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('invoices', function (Blueprint $table) {
$table->string('buyer_company', 50)->default('')->change();
$table->string('reg_no', 100)->default('')->change();
$table->string('address', 120)->default('')->change();
$table->string('contact_no', 20)->default('')->change();
$table->string('po_number', 20)->default('')->change();
$table->string('order_no', 20)->default('')->change();
$table->float('tax_rate')->default(0)->change();
$table->float('billing_charge_rate')->default(0)->change();
$table->string('invoice_path')->default('')->change();
$table->float('amount')->default(0)->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('invoices', function (Blueprint $table) {
//
});
}
}
@@ -0,0 +1,32 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class RemoveRegNoOrderNoInvoicesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('invoices', function (Blueprint $table) {
$table->dropColumn(['reg_no', 'order_no', 'tax_rate', 'billing_charge_rate']);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('invoices', function (Blueprint $table) {
//
});
}
}
@@ -0,0 +1,34 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class RemoveUnitPriceAddUnitPriceRmbRm extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('invoice_details', function (Blueprint $table) {
$table->dropColumn('unit_price');
$table->double('unit_price_rmb');
$table->double('unit_price_rm');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('invoice_details', function (Blueprint $table) {
//
});
}
}
@@ -0,0 +1,32 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddTotalInvoiceDetails extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('invoice_details', function (Blueprint $table) {
$table->double('total');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('invoice_details', function (Blueprint $table) {
//
});
}
}
@@ -0,0 +1,32 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class ChangeDefaultCommentNull extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('invoice_statuses', function (Blueprint $table) {
$table->string('comment')->default(null)->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('invoice_statuses', function (Blueprint $table) {
//
});
}
}
@@ -0,0 +1,32 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class ChangeToNullableCommentNull extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('invoice_statuses', function (Blueprint $table) {
$table->string('comment')->default(null)->nullable()->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('invoice_statuses', function (Blueprint $table) {
//
});
}
}
@@ -0,0 +1,32 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddRegNoToInvoices extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('invoices', function (Blueprint $table) {
$table->string('reg_no');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('invoices', function (Blueprint $table) {
//
});
}
}
@@ -0,0 +1,32 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class ChangeDescriptionTo256Varchar extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('invoice_details', function (Blueprint $table) {
$table->string('description', 256)->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('invoice_details', function (Blueprint $table) {
//
});
}
}
@@ -0,0 +1,33 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddEiEdoEpoToInvoice extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('invoices', function (Blueprint $table) {
$table->string('edo');
$table->string('ei');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('invoices', function (Blueprint $table) {
$table->dropColumn(['edo', 'ei']);
});
}
}
@@ -0,0 +1,33 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddDefaultNullToEdoEiAndNullable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('invoices', function (Blueprint $table) {
$table->string('edo')->default(null)->nullable()->change();
$table->string('ei')->default(null)->nullable()->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('invoices', function (Blueprint $table) {
//
});
}
}
@@ -0,0 +1,32 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class RemoveEdoEi extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('invoices', function (Blueprint $table) {
$table->dropColumn(['edo', 'ei']);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('invoices', function (Blueprint $table) {
//
});
}
}
@@ -0,0 +1,33 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateEdoEi extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('invoices', function (Blueprint $table) {
$table->string('ei')->default(null)->nullable()->unique();
$table->string('edo')->default(null)->nullable()->unique();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('invoices', function (Blueprint $table) {
//
});
}
}
@@ -0,0 +1,32 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class InvoiceDetailsDescriptionNullable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('invoice_details', function (Blueprint $table) {
$table->string('description', 256)->nullable()->default(null)->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('invoice_details', function (Blueprint $table) {
//
});
}
}
+6
View File
@@ -0,0 +1,6 @@
1. Run database migration
2. Run composer. New libraries have been added to generate pdf
3. Run npm install // I installed vuelidate for Vue Form validations
4. Run npm run prod // To build new vue files
5. Mbstring required to print chinese fonts.
6. Run composer. New libraries have been added to generate pdf.
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 344 KiB

+1
View File
@@ -43,6 +43,7 @@
"vue-loading-spinner": "^1.0.11",
"vue-meta": "^1.4.4",
"vue-router": "^3.0.1",
"vuelidate": "^0.7.5",
"vuex": "^3.0.1",
"vuex-router-sync": "^5.0.0"
},
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

+3 -3
View File
@@ -1,7 +1,7 @@
{
"/js/lang-zh-CN.c0da3973e52421a8cfe5.js": "/js/lang-zh-CN.c0da3973e52421a8cfe5.js",
"/js/lang-es.f4a1a5b4a30e92527b46.js": "/js/lang-es.f4a1a5b4a30e92527b46.js",
"/js/lang-en.0f790217417404ecc662.js": "/js/lang-en.0f790217417404ecc662.js",
"/js/lang-zh-CN.301fa7c2a76971d5e1ff.js": "/js/lang-zh-CN.301fa7c2a76971d5e1ff.js",
"/js/lang-es.672a5851ff01fcf8d1b1.js": "/js/lang-es.672a5851ff01fcf8d1b1.js",
"/js/lang-en.3d0dc40deef054cb1338.js": "/js/lang-en.3d0dc40deef054cb1338.js",
"/js/app.js": "/js/app.js",
"/css/app.css": "/css/app.css"
}
@@ -0,0 +1,777 @@
/* eslint-disable camelcase */
<template>
<div class="invoice">
<div class="header-container">
<h3 v-if="currentStatus === 'pending'" class="title">
Purchase Order (Pending Approval)
</h3>
<h3 v-else-if="currentStatus === 'approve'" class="title" >
Purchase Order (Approved)
</h3>
<h3 v-else-if="currentStatus === 'request_change'" class="title">
Purchase Order (Please Change)
<div class="error">
{{ statuses[statuses.length - 1].comment }}
</div>
</h3>
<h3 v-else class="title">
Purchase Order
</h3>
</div>
<div class="invoice-container">
<form @submit.prevent="submitForm">
<div class="buyer-detail card">
<div class="card-body">
<div class="card-title">
<h5>
My Infomation
</h5>
</div>
<div class="form-group">
<label for="marking">Marking</label>
<input id="marking" v-model="$v.form.formData.marking.$model" type="text" class="form-control" disabled>
</div>
<div class="form-group">
<label for="buyer-company">Buyer's Company</label>
<input id="buyer-company"
v-model="$v.form.formData.buyer_company.$model"
:class="{
'is-invalid': $v.form.formData.buyer_company.$invalid && $v.form.formData.buyer_company.$dirty,
'is-valid': !$v.form.formData.buyer_company.$invalid && $v.form.formData.buyer_company.$dirty
}"
:disabled="!editable"
type="text"
class="form-control"
@blur="$v.form.formData.buyer_company.$touch()">
<div class="invalid-feedback">
Buyer Company Required
</div>
</div>
<!-- <div class="form-group">
<label for="gst-id">GST ID</label>
<input id="gst-id" type="text" class="form-control" disabled>
</div> -->
<div class="form-group">
<label for="contact-number">Contact Number</label>
<input id="contact-number"
v-model.trim="$v.form.formData.contact_no.$model"
:class="{
'is-invalid': $v.form.formData.contact_no.$invalid && $v.form.formData.contact_no.$dirty,
'is-valid': !$v.form.formData.contact_no.$invalid && $v.form.formData.contact_no.$dirty
}"
:disabled="!editable"
type="tel"
class="form-control"
@blur="$v.form.formData.contact_no.$touch()">
<div class="invalid-feedback">
Contact Number Required
</div>
</div>
<div class="form-group">
<label for="reg-no">Company Registration Number</label>
<input id="reg-no"
v-model.trim="$v.form.formData.reg_no.$model"
:class="{
'is-invalid': $v.form.formData.reg_no.$invalid && $v.form.formData.reg_no.$dirty,
'is-valid': !$v.form.formData.reg_no.$invalid && $v.form.formData.reg_no.$dirty
}"
:disabled="!editable"
type="text" class="form-control"
@blur="$v.form.formData.reg_no.$touch()">
<div class="invalid-feedback">
Company Registration Number Required
</div>
</div>
<div class="form-group">
<label for="address">Address</label>
<textarea id="address"
v-model="$v.form.formData.address.$model"
:class="{
'is-invalid': $v.form.formData.address.$invalid && $v.form.formData.address.$dirty,
'is-valid': !$v.form.formData.address.$invalid && $v.form.formData.address.$dirty
}"
:disabled="!editable"
class="form-control"
cols="30"
rows="4"
@blur="$v.form.formData.address.$touch()"/>
<div class="invalid-feedback">
Address Required
</div>
</div>
</div>
</div>
<div class="conversion-rate">
<h5>
Conversion: {{ rate }}
</h5>
</div>
<div class="billing-detail-title">
<h5>Billing Detail</h5>
</div>
<div class="billing-detail-lines">
<table class="table">
<thead>
<tr>
<th class="align-middle">#</th>
<th class="align-middle">Stock Code</th>
<th class="align-middle">Description</th>
<th class="text-center align-middle">Qty</th>
<th class="text-center align-middle">Unit Price (RMB)</th>
<th class="text-center align-middle">Unit Price (RM)</th>
<th class="text-center align-middle">Total Amount (RM)</th>
<th>&nbsp;</th>
</tr>
</thead>
<tbody>
<tr>
<td>&nbsp;</td>
<td>
<div class="form-group">
<input v-model="$v.form.addLine.stock_code.$model"
:class="{
'is-invalid': $v.form.addLine.stock_code.$invalid && $v.form.addLine.stock_code.$dirty,
'is-valid': !$v.form.addLine.stock_code.$invalid && $v.form.addLine.stock_code.$dirty
}"
:disabled="!editable"
name="stockcode" type="text"
class="form-control"
@blur="$v.form.addLine.stock_code.$touch()">
<div class="invalid-feedback">
Stock Code Required
</div>
</div>
</td>
<td>
<div class="form-group">
<textarea id="description"
v-model="$v.form.addLine.description.$model"
:class="{
'is-invalid': $v.form.addLine.description.$invalid && $v.form.addLine.description.$dirty,
'is-valid': !$v.form.addLine.description.$invalid && $v.form.addLine.description.$dirty
}"
:disabled="!editable"
name="description" cols="20" rows="2"
@blur="$v.form.addLine.description.$touch()"/>
<div class="invalid-feedback">
Maximum length for description is 256 characters
</div>
</div>
</td>
<td>
<div class="form-group">
<input id="quantity"
v-model="$v.form.addLine.quantity.$model"
:class="{
'is-invalid': $v.form.addLine.quantity.$invalid && $v.form.addLine.quantity.$dirty,
'is-valid': !$v.form.addLine.quantity.$invalid && $v.form.addLine.quantity.$dirty
}"
:disabled="!editable"
type="number"
min="1"
class="form-control"
name="quantity"
@change="onUnitPriceRM()"
@blur="$v.form.addLine.quantity.$touch()">
<div class="invalid-feedback">
Quantity Required
</div>
</div>
</td>
<td>
<div class="form-group">
<input id="rmb-unit-price"
v-model="$v.form.addLine.unit_price_rmb.$model"
:class="{
'is-invalid': $v.form.addLine.unit_price_rmb.$invalid && $v.form.addLine.unit_price_rmb.$dirty,
'is-valid': !$v.form.addLine.unit_price_rmb.$invalid && $v.form.addLine.unit_price_rmb.$dirty
}"
:disabled="!editable"
type="number"
min="0"
name="rmb-unit-price"
class="form-control"
@change="onUnitPriceRMB()"
@blur="$v.form.addLine.unit_price_rmb.$touch()">
<div class="invalid-feedback">
Unit Price Required
</div>
</div>
</td>
<td>
<div class="form-group">
<input id="rm-unit-price"
v-model="$v.form.addLine.unit_price_rm.$model"
:class="{
'is-invalid': $v.form.addLine.unit_price_rm.$invalid && $v.form.addLine.unit_price_rm.$dirty,
'is-valid': !$v.form.addLine.unit_price_rm.$invalid && $v.form.addLine.unit_price_rm.$dirty
}"
:disabled="!editable"
type="number"
min="0"
name="rm-unit-price"
class="form-control"
@change="onUnitPriceRM()"
@blur="$v.form.addLine.unit_price_rm.$touch()">
<div class="invalid-feedback">
Unit Price Required
</div>
</div>
</td>
<td>
<div class="form-group">
<input id="total"
v-model="$v.form.addLine.total.$model"
type="number"
min="0"
name="subtotal"
class="form-control"
disabled>
</div>
</td>
<td>
<button :disabled="!editable" class="btn btn-success" type="button" @click="onAddLine()">
Add
</button>
</td>
</tr>
<tr v-for="(line, index) in form.formData.lines" :key="index">
<td class="line-number text-center align-middle">
{{ index + 1 }}
</td>
<td class="stock-code text-center align-middle">
{{ line.stock_code }}
</td>
<td class="description align-middle">
{{ line.description }}
</td>
<td class="quantity text-center align-middle">
{{ line.quantity }}
</td>
<td class="unit-price-rmb text-center align-middle">
{{ line.unit_price_rmb }}
</td>
<td class="unit-price-rm text-center align-middle">
{{ line.unit_price_rm }}
</td>
<td class="line-subtotal text-center align-middle">
{{ line.total }}
</td>
<td>
<button :disabled="!editable" type="button" class="btn btn-danger" @click="onRemoveLine(index)">
Remove
</button>
</td>
</tr>
</tbody>
<tfoot>
<tr class="subtotal-line">
<td colspan="5"/>
<td class="subtotal-title text-center">
Subtotal
</td>
<td class="subtotal text-center">
{{ subtotal }}
</td>
<td>
&nbsp;
</td>
</tr>
<tr v-if="tax > 0" class="gst-line">
<td colspan="5"/>
<td class="gst-title text-center">
GST
</td>
<td class="gst-total text-center">
{{ tax }}
</td>
<td>
&nbsp;
</td>
</tr>
<tr class="total-line">
<td colspan="5"/>
<td class="total-title text-center">
Total
</td>
<td class="total text-center">
{{ total }}
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td colspan="5">&nbsp;</td>
<td colspan="2">
<button :disabled="!editable" class="btn btn-success btn-block" type="submit">
Create PO
</button>
</td>
</tr>
</tfoot>
</table>
</div>
</form>
</div> <!-- invoice-container -->
<div v-if="role === 'admin'" class="admin-panel">
<div v-if="statuses.length > 0" class="comments">
<h5>Log</h5>
<table class="table comment-table">
<thead>
<tr>
<th>Date Time</th>
<th>Status</th>
<th>Comment</th>
</tr>
</thead>
<tbody>
<tr v-for="(comment, index) in statuses" :key="index">
<td>{{ comment.created_at }}</td>
<td>{{ comment.status }}</td>
<td>{{ comment.comment }}</td>
</tr>
</tbody>
</table>
</div>
<br>
<form @submit.prevent="onSubmitStatus">
<h5>Admin Panel</h5>
<div class="form-group">
<label for="action">Action</label>
<select id="action"
v-model="$v.form.postStatus.status.$model"
:class="{
'is-invalid': $v.form.postStatus.status.$invalid && $v.form.postStatus.status.$dirty,
'is-valid': !$v.form.postStatus.status.$invalid && $v.form.postStatus.status.$dirty
}"
name="action"
class="form-control">
<option value="approve">Approve</option>
<option value="request_change">Request Change</option>
</select>
<div class="invalid-feedback">
Action Required
</div>
</div>
<div class="form-group">
<label for="comment">Comment</label>
<textarea id="comment"
v-model="$v.form.postStatus.comment.$model"
:class="{
'is-invalid': $v.form.postStatus.comment.$invalid && $v.form.postStatus.comment.$dirty,
'is-valid': !$v.form.postStatus.comment.$invalid && $v.form.postStatus.comment.$dirty
}"
name="comment"
cols="30" rows="3" class="form-control" />
<div class="invalid-feedback">
Comment required if you are requesting change from customer.
</div>
</div>
<button type="submit" class="btn btn-success">Submit</button>
</form>
</div>
</div>
</template>
<style>
input {
min-width: 6em;
}
.container {
margin-left: 10% !important;
margin-right: 10% !important;
}
.el-main {
padding-left: 0 !important;
padding-right: 0 !important;
}
.title {
margin-top: 1em;
padding-left: 1.7em;
padding-bottom: 0 !important;
}
.buyer-detail {
grid-area: buyer-detail;
width: 100%;
margin-bottom: 3em;
}
.card-body {
display: flex !important;
flex-direction: row !important;
flex-wrap: wrap !important;
justify-content: space-around !important;
}
.buyer-detail .form-group {
width: 45%;
}
.card-title {
width: 100%;
}
.conversion-rate {
grid-area: conversion-rate;
}
.conversion-rate h5 {
float: right;
background-color: lightblue;
padding-left: 1em;
padding-right: 1em;
}
.billing-detail-title {
width: 100%;
grid-area: billing-detail-title;
}
.billing-detail-lines {
width: 100%;
grid-area: billing-detail-lines;
}
.invoice-container {
padding: 2em 3em;
display: grid;
grid-template-areas:
'buyer-detail buyer-detail'
'billing-detail-title conversion-rate'
'billing-detail-lines billing-detail-lines';
}
.header-container {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
}
.admin-panel {
margin-left: 3em;
margin-right: 3em;
}
.error {
color: red;
}
</style>
<script>
import Vue from 'vue'
import Vuelidate from 'vuelidate'
import { required, numeric, decimal, requiredIf, maxLength } from 'vuelidate/lib/validators'
import axios from 'axios'
Vue.use(Vuelidate)
export default {
name: 'NewComponent',
props: {
trackerConfig: {
type: Object,
default: function () {
return {
status: 5,
term: null
}
}
},
booking_id: {
type: String,
default: null
},
booking_details: {
type: Object,
default: function () {
return {
id: null,
amount: null,
bia: null,
user_bankslip_path: null,
china_bankslip_path: null,
marking: null
}
}
}
},
data: function () {
return {
form: {
formData: {
buyer_company: '',
address: '',
contact_no: '',
marking: this.booking_details.marking,
gst_id: '',
reg_no: '',
lines: []
},
addLine: {
order: null,
description: null,
quantity: null,
unit_price_rmb: null,
unit_price_rm: null,
stock_code: null,
total: null
},
postStatus: {
status: null,
comment: null
}
},
rate: 0,
service_charge: 0,
amount: 0,
invoice_total: 0,
tax: 0,
subtotal: 0,
total: 0,
role: null,
currentStatus: null,
statuses: []
}
},
computed: {
editable: function () {
// Not editable if created and not admin
return this.role === 'admin' || this.currentStatus === null || this.currentStatus === 'request_change'
}
},
validations: {
form: {
formData: {
buyer_company: {
required
},
address: {
required
},
contact_no: {
required
},
marking: {
required
},
reg_no: {
required
},
gst_id: {
}
},
addLine: {
stock_code: {
required
},
description: {
maxLength: maxLength(256)
},
quantity: {
required,
numeric
},
unit_price_rmb: {
required,
decimal
},
unit_price_rm: {
required,
decimal
},
total: {
required,
decimal
}
},
postStatus: {
status: {
required
},
comment: {
required: requiredIf(function () {
return this.form.postStatus.status === 'request_change'
})
}
}
}
},
watch: {
booking_details: function () {
const {
marking,
tax,
service_charge,
amount,
rate
} = this.booking_details
this.form.formData.marking = marking
this.tax = tax
this.service_charge = service_charge
this.amount = amount
this.rate = rate
}
},
mounted () {
this.getInvoice()
this.getUser()
},
methods: {
onAddLine: function () {
if (this.$v.form.addLine.$invalid) {
this.$v.form.addLine.$touch()
return
}
const {
order,
description,
quantity,
stock_code,
unit_price_rmb,
unit_price_rm,
total
} = this.form.addLine
const data = {
order: order,
description,
quantity,
stock_code,
unit_price_rmb,
unit_price_rm,
total
}
this.form.formData.lines.push(data)
this.setTotal()
this.clearAddLine()
},
onUnitPriceRMB: function () {
this.form.addLine.unit_price_rm = (+this.form.addLine.unit_price_rmb * +this.rate).toFixed(2)
this.form.addLine.total = (+this.form.addLine.unit_price_rm * +this.form.addLine.quantity).toFixed(2)
},
onUnitPriceRM: function () {
this.form.addLine.unit_price_rmb = (this.form.addLine.unit_price_rm / this.rate).toFixed(2)
this.form.addLine.total = (+this.form.addLine.unit_price_rm * +this.form.addLine.quantity).toFixed(2)
},
onRemoveLine: function (line) {
console.log('line', line)
this.form.formData.lines.splice(line, 1)
this.setTotal()
},
setTotal: function () {
if (this.form.formData.lines.length < 1) {
this.subtotal = 0
this.total = 0
return
}
this.subtotal = parseFloat(this.form.formData.lines.map(line => line.total).reduce((a, b) => parseFloat(a) + parseFloat(b))).toFixed(2)
this.total = parseFloat(+this.subtotal + (+this.subtotal * (+this.tax || 0) / 100)).toFixed(2)
},
clearAddLine: function () {
this.form.addLine.order = null
this.form.addLine.description = null
this.form.addLine.quantity = null
this.form.addLine.unit_price_rmb = null
this.form.addLine.unit_price_rm = null
this.form.addLine.stock_code = null
this.form.addLine.total = null
this.$v.form.addLine.$reset()
},
submitForm () {
if (this.$v.form.formData.$invalid) {
this.$v.form.formData.$touch()
console.log('form not valid')
return
}
if (this.amount != this.total) {
console.log('amount not matched')
alert(`PO Total RM${this.total} Does Not Match Expected RM${this.amount}`)
return
}
// create order in line
this.form.formData.lines
.forEach((el, i) => {
this.form.formData.lines[i].order = (i + 1)
})
if (this.currentStatus) {
console.log('edit invoice')
this.editInvoice()
} else {
console.log('create invoice')
this.createInvoice()
}
},
createInvoice () {
const url = '/api/invoice/' + this.booking_id
axios
.post(url, this.form.formData)
.then(resp => {
alert('PO Created. Pending Approval.')
this.$router.push({ name: 'home' })
})
.catch(err => {
alert(JSON.stringify(err.response.data.message))
console.error(err.response.data.message)
})
},
editInvoice () {
const url = '/api/invoice/' + this.booking_id
axios
.put(url, this.form.formData)
.then(resp => {
alert(`PO have been edited${this.role === 'admin' ? ' by admin.' : '. Pending Approval'}`)
this.$router.push({ name: 'home' })
})
.catch(err => {
alert(JSON.stringify(err.response.data.message))
console.error(err.response.data.message)
})
},
getInvoice () {
const url = '/api/invoice/' + this.booking_id
axios
.get(url)
.then(resp => {
this.form.formData.buyer_company = resp.data.buyer_company
this.form.formData.contact_no = resp.data.contact_no
this.form.formData.address = resp.data.address
this.form.formData.reg_no = resp.data.reg_no
this.form.formData.lines = []
this.statuses = []
resp.data.lines.forEach((el, i) => {
this.form.formData.lines.push(el)
})
resp.data.status.forEach((el, i) => {
this.statuses.push(el)
})
this.currentStatus = resp.data.status[resp.data.status.length - 1].status
this.setTotal()
})
},
getUser () {
const url = '/api/user'
axios
.get(url)
.then(resp => {
this.role = resp.data.role
})
},
onSubmitStatus () {
if (this.$v.form.postStatus.$invalid) {
this.$v.form.postStatus.$touch()
return
}
const url = '/api/invoice/' + this.booking_id + '/comment'
axios
.post(url, this.form.postStatus)
.then(resp => {
this.getInvoice()
this.form.postStatus.status = null
this.form.postStatus.comment = null
this.$v.form.postStatus.$reset()
alert('Status Updated')
})
}
}
}
</script>
@@ -21,11 +21,11 @@
</div>
<el-row :gutter="12" type="flex">
<el-col :span="12" align="center">
<div v-for="po in booking_details.user_po_path" :key='po'>
<a target="_blank" :href="getURL(po)">
<img v-if="isImage(po)" v-bind:src="po" class="image" style="max-width: 100%">
<div v-for="po in booking_details.user_po_path" :key="po">
<a :href="getURL(po)" target="_blank">
<img v-if="isImage(po)" :src="po" class="image" style="max-width: 100%">
<p v-else>Download</p>
<br/>
<br>
</a>
</div>
</el-col>
@@ -41,11 +41,11 @@
</div>
<el-row :gutter="12" type="flex">
<el-col :span="12" align="center">
<div v-for="cn_bankslip in booking_details.china_bankslip_path" :key='cn_bankslip'>
<a target="_blank" :href="getURL(cn_bankslip)">
<img v-if="isImage(cn_bankslip)" v-bind:src="cn_bankslip" class="image" style="max-width: 100%">
<div v-for="cn_bankslip in booking_details.china_bankslip_path" :key="cn_bankslip">
<a :href="getURL(cn_bankslip)" target="_blank">
<img v-if="isImage(cn_bankslip)" :src="cn_bankslip" class="image" style="max-width: 100%">
<p v-else>Download</p>
<br/>
<br>
</a>
</div>
</el-col>
@@ -54,21 +54,37 @@
</el-col>
<el-col :span="8">
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>Invoice</span>
<!-- <el-button style="float: right; padding: 3px 0" type="text">Operation button</el-button> -->
<div v-if="booking_details.invoice_path[0] !== '/storage/'">
<div slot="header" class="clearfix">
<span>Invoice</span>
<!-- <el-button style="float: right; padding: 3px 0" type="text">Operation button</el-button> -->
</div>
<el-row :gutter="12" type="flex">
<el-col :span="12" align="center">
<div v-for="invoice in booking_details.invoice_path" :key="invoice">
<a :href="getURL(invoice)" target="_blank">
<img v-if="isImage(invoice)" :src="invoice" class="image" style="max-width: 100%">
<p v-else>Download</p>
<br>
</a>
</div>
</el-col>
</el-row>
</div>
<div v-else>
<button class="btn btn-success" type="button" @click="onDownloadPO">
Download PO
</button>
<button class="btn btn-primary" type="button" @click="onDownloadDO">
Download DO
</button>
<button class="btn btn-info" type="button" @click="onDownloadInvoice">
Download Invoice
</button>
<button class="btn btn-warning" type="button" @click="onDownloadSupplier">
Download Supplier PO
</button>
</div>
<el-row :gutter="12" type="flex">
<el-col :span="12" align="center">
<div v-for="invoice in booking_details.invoice_path" :key='invoice'>
<a target="_blank" :href="getURL(invoice)">
<img v-if="isImage(invoice)" v-bind:src="invoice" class="image" style="max-width: 100%">
<p v-else>Download</p>
<br/>
</a>
</div>
</el-col>
</el-row>
</el-card>
</el-col>
</el-row>
@@ -143,7 +159,7 @@
<div class="cell">Beneficiary Account : </div>
</td>
<td class="el-table_2_column_10 is-left ">
<div class="cell">{{booking_details.account_name}}</div>
<div class="cell">{{ booking_details.account_name }}</div>
</td>
</tr>
<tr class="el-table__row">
@@ -151,7 +167,7 @@
<div class="cell">Beneficiary Account Number : </div>
</td>
<td class="el-table_2_column_10 is-left ">
<div class="cell">{{booking_details.account_num}}</div>
<div class="cell">{{ booking_details.account_num }}</div>
</td>
</tr>
<!---->
@@ -164,14 +180,14 @@
<!---->
<!---->
<!---->
<div class="el-table__column-resize-proxy" style="display: none;"></div>
<div class="el-table__column-resize-proxy" style="display: none;" />
</div>
</div>
<div class="el-col el-col-12" style="padding-left: 6px; padding-right: 6px;">
<div class="el-table el-table--fit el-table--enable-row-hover el-table--enable-row-transition" align="center">
<div class="hidden-columns">
<div></div>
<div></div>
<div />
<div />
</div>
<!---->
<div class="el-table__body-wrapper is-scrolling-none">
@@ -207,7 +223,7 @@
</tr>
<tr class="el-table__row">
<td class="el-table_3_column_11 is-right ">
<div class="cell"></div>
<div class="cell" />
</td>
<td class="el-table_3_column_12 is-left ">
<div class="cell">MYR {{ booking_details.bia }}</div>
@@ -223,7 +239,7 @@
</tr> -->
<tr class="el-table__row">
<td class="el-table_3_column_11 is-right ">
<div class="cell"></div>
<div class="cell" />
</td>
<td class="el-table_3_column_12 is-left ">
<div class="cell">
@@ -233,10 +249,10 @@
</tr>
<tr class="el-table__row">
<td class="el-table_3_column_11 is-right ">
<div class="cell"></div>
<div class="cell" />
</td>
<td class="el-table_3_column_12 is-left ">
<div class="cell"></div>
<div class="cell" />
</td>
</tr>
<!---->
@@ -249,7 +265,7 @@
<!---->
<!---->
<!---->
<div class="el-table__column-resize-proxy" style="display: none;"></div>
<div class="el-table__column-resize-proxy" style="display: none;" />
</div>
</div>
</div>
@@ -270,7 +286,7 @@
</el-card>
</el-row>
<br>
<el-row justify="center" align="center">
<el-row justify="center" align="center">
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>Supplier Report</span>
@@ -278,9 +294,9 @@
</div>
<el-row :gutter="12" style="text-align:center">
<el-col :span="20" style="text-align:center">
<canvas id="myCanvas" ref="myCanvas" v-insert-message="supplier_booking"></canvas>
<canvas v-insert-message="supplier_booking" id="myCanvas" ref="myCanvas"/>
<br>
<el-button @click="downloadReport()" type="text">Download Now</el-button>
<el-button type="text" @click="downloadReport()">Download Now</el-button>
</el-col>
</el-row>
</el-card>
@@ -292,8 +308,8 @@
</div>
<el-row :gutter="12">
<el-col :span="22" style="text-align:center">
<a target="_blank" :href="getURL(booking_details.user_bankslip_path)">
<img v-if="isImage(booking_details.user_bankslip_path)" v-bind:src="booking_details.user_bankslip_path" class="image" style="max-width: 100%">
<a :href="getURL(booking_details.user_bankslip_path)" target="_blank" >
<img v-if="isImage(booking_details.user_bankslip_path)" :src="booking_details.user_bankslip_path" class="image" style="max-width: 100%">
<p v-else>Download</p>
</a>
</el-col>
@@ -309,8 +325,8 @@
</div>
<el-row :gutter="12">
<el-col :span="22" style="text-align:center">
<a target="_blank" :href="getURL(booking_details.user_bankslip_path)">
<img v-if="isImage(booking_details.user_bankslip_path)" v-bind:src="booking_details.user_bankslip_path" class="image">
<a :href="getURL(booking_details.user_bankslip_path)" target="_blank">
<img v-if="isImage(booking_details.user_bankslip_path)" :src="booking_details.user_bankslip_path" class="image">
<p v-else>Download</p>
</a>
</el-col>
@@ -336,257 +352,324 @@
.image:hover {
box-shadow: 0 0 2px 1px rgba(0, 140, 186, 0.5);
}
.btn-warning {
margin-top: 0.4em !important;
}
</style>
<script>
import ProgressTrack from '~/components/AdminProgressTrack'
import X2ProgressTrack from '~/components/X2AdminProgressTrack'
import axios from 'axios'
import ProgressTrack from '~/components/AdminProgressTrack'
import X2ProgressTrack from '~/components/X2AdminProgressTrack'
import axios from 'axios'
export default {
components: {
'progress-track': ProgressTrack,
'x2-progress-track': X2ProgressTrack
},
data() {
return {
trackerConfig: {
status: 8,
term: null
},
supplier_booking:{},
loading_btn: false,
booking_details: {
id: null,
amount: null,
bia: null,
user_bankslip_path: null,
}
}
},
beforeCreate() {
const loading = this.$loading({
lock: true,
text: 'Please wait..',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
})
axios
.get('/api/admin/booking/' + this.$route.params.id + '/details')
.then((response) => {
this.booking_details = response.data
this.trackerConfig.term = response.data.term;
loading.close()
}).catch((error) => {
console.log(error)
loading.close()
this.$router.push({
name: 'notfound'
})
})
axios.get('/api/supplier-booking/' + this.$route.params.id)
.then((response) => {
this.supplier_booking = response.data
loading.close()
}).catch((error) => {
console.log(error)
this.$router.push({
name: 'notfound'
})
loading.close()
})
},
methods: {
getExtension(path){
let index = path.lastIndexOf('.') + 1;
return path.slice(index);
export default {
components: {
'progress-track': ProgressTrack,
'x2-progress-track': X2ProgressTrack
},
data () {
return {
trackerConfig: {
status: 8,
term: null
},
isImage(path){
var ext = this.getExtension(path);
return ext === 'jpg' || ext === 'jpeg' || ext === 'bmp' || ext === 'png';
},
getURL(path) {
var getUrl = window.location;
var baseUrl = getUrl.protocol + "//" + getUrl.host;
return baseUrl + path;
}
},
directives: {
insertMessage: function (canvasElement, binding) {
setTimeout(function (canvasElement, binding) {
////////////////// variable //////////////////////////
var canvasWidth = 450;
var rowHeight = [20, 40, 60, 80, 100, 120, 140, 170, 190, 210, 230, 250, 270, 290, 310, 330, 350, 390,
410,
470, 490, 510, 610, 630
]
const canvasHeight = rowHeight[rowHeight.length - 1];
var column1X = 220;
var column2X = 320;
var column3X = 420;
///////////////////Canvast Init////////////////////
var canvas = document.getElementById("myCanvas");
canvas.width = canvasWidth;
canvas.height = canvasHeight;
// Get canvas context
var ctx = canvasElement.getContext("2d");
// Clear the canvas
ctx.clearRect(0, 0, 300, 150);
ctx.fillStyle = "#FFFFFF";
ctx.fillRect(0, 0, canvasWidth, rowHeight[0]);
for (var i = 1; i < rowHeight.length; i++) {
if (i % 2 == 1)
ctx.fillStyle = "#A9D08E";
else
ctx.fillStyle = "#FFFFFF";
ctx.fillRect(0, rowHeight[i - 1], canvasWidth, rowHeight[i]);
}
///////////// fillup with text////////////////
//// config canvas
ctx.fillStyle = "#000000";
ctx.font = "13px Arial";
ctx.textAlign = "right";
//// Row 1
ctx.fillText("Ref No. :", column1X, rowHeight[1] - 5);
ctx.fillText(binding.value.booking_id, column3X, rowHeight[1] - 5);
//// Row 2
ctx.fillText("Date :", column1X, rowHeight[2] - 5);
ctx.fillText(binding.value.date, column3X, rowHeight[2] - 5);
//// Row 3
ctx.fillText("Marking :", column1X, rowHeight[3] - 5);
ctx.font = "bold 14px Arial";
ctx.fillStyle = "#0070D5";
ctx.fillText(binding.value.marking, column3X, rowHeight[3] - 5);
ctx.fillStyle = "#000000";
ctx.font = "13px Arial";
//// Row 4
ctx.fillText("Payment For(Order No.) :", column1X, rowHeight[4] - 5);
ctx.fillText(binding.value.order_no, column3X, rowHeight[4] - 5);
//// Row 4
ctx.fillText("Payment For :", column1X, rowHeight[5] - 5);
ctx.fillText(binding.value.payment_for, column3X, rowHeight[5] - 5);
//// Row 5
ctx.fillText("Payment Method :", column1X, rowHeight[6] - 5);
ctx.fillText(binding.value.payment_method, column3X, rowHeight[6] - 5);
//// Row 6
ctx.fillText("Remark :", column1X, rowHeight[7] - 10);
//// Row 7
// Empty
//// Row 8
ctx.fillText("MYR/RM :", column1X, rowHeight[9] - 5);
ctx.fillText("MYR", column2X, rowHeight[9] - 5);
ctx.font = "bold 14px Arial";
ctx.fillText(binding.value.amount_in_myr, column3X, rowHeight[9] - 5);
ctx.font = "13px Arial";
//// Row 8
ctx.fillText("* RATE :", column1X, rowHeight[10] - 5);
ctx.fillText(binding.value.rate, column3X, rowHeight[10] - 5);
//// Row 9
ctx.fillText("REBATE :", column1X, rowHeight[11] - 5);
ctx.fillText("MYR", column2X, rowHeight[11] - 5);
ctx.font = "14px Arial";
ctx.fillText(binding.value.rebate, column3X, rowHeight[11] - 5);
ctx.font = "13px Arial";
//// Row 10
ctx.font = "bold 14px Arial";
ctx.fillText("CNY", column2X, rowHeight[12] - 5);
ctx.fillText(binding.value.amountInRMB, column3X, rowHeight[12] - 5);
ctx.font = "13px Arial";
//line
ctx.beginPath();
ctx.lineWidth = 1;
ctx.moveTo(column1X + 30, rowHeight[11]);
ctx.lineTo(column3X + 20, rowHeight[11]);
ctx.stroke();
ctx.beginPath();
ctx.lineWidth = 2;
ctx.moveTo(column1X + 30, rowHeight[12]);
ctx.lineTo(column3X + 20, rowHeight[12]);
ctx.stroke();
//// Row 11
ctx.fillText("MYR/RM :", column1X, rowHeight[14] - 5);
ctx.fillText("MYR", column2X, rowHeight[14] - 5);
ctx.fillText(binding.value.amount_in_myr, column3X, rowHeight[14] - 5);
//// Row 12
// ctx.fillText("Billing(1.0%) :", column1X, rowHeight[15] - 5);
// ctx.fillText("MYR", column2X, rowHeight[15] - 5);
// ctx.fillText(binding.value.billing_amount, column3X, rowHeight[15] - 5);
//// Row 13
ctx.fillText("+ TAX " + (Math.round((binding.value.tax_rate * 100 - 100) * 100) / 100) + "% :",
column1X, rowHeight[16] - 5); // TODO : Change to percentage
ctx.fillText("MYR", column2X, rowHeight[16] - 5);
ctx.fillText(binding.value.salestax_amount, column3X, rowHeight[16] - 5);
// //// Row 14
// ctx.fillText("+ GST 6% :", column1X, rowHeight[17] - 15);
// ctx.fillText("MYR", column2X, rowHeight[17] - 15);
// ctx.fillText("289.84", column3X, rowHeight[17] - 15);
//// Row 15
ctx.font = "bold 14px Arial";
ctx.fillText("Bank In Amount :", column1X, rowHeight[18] - 5);
ctx.fillStyle = "#0070D5";
ctx.fillText("MYR", column2X, rowHeight[18] - 5);
ctx.fillText(binding.value.amount_after_tax, column3X, rowHeight[18] - 5);
ctx.fillStyle = "#000000";
ctx.font = "13px Arial";
//line
ctx.lineWidth = 1;
ctx.beginPath();
ctx.moveTo(column1X + 30, rowHeight[17]);
ctx.lineTo(column3X + 20, rowHeight[17]);
ctx.stroke();
ctx.beginPath();
ctx.moveTo(column1X + 30, rowHeight[18] + 1);
ctx.lineTo(column3X + 20, rowHeight[18] + 1);
ctx.stroke();
ctx.beginPath();
ctx.moveTo(column1X + 30, rowHeight[18] - 2);
ctx.lineTo(column3X + 20, rowHeight[18] - 2);
ctx.stroke();
//// Row 16
// ctx.fillText("Rebate :", column1X, rowHeight[19] - 25);
// ctx.fillText("CNY", column2X, rowHeight[19] - 25);
// ctx.fillText("224.68", column3X, rowHeight[19] - 25);
//// Row 16
ctx.font = "bold 14px Arial";
ctx.fillText("Bank In to Account Below :", column1X, rowHeight[20] - 5);
ctx.font = "bold italic 15px Arial";
ctx.fillStyle = "#0070D5";
ctx.fillText("CNY", column2X, rowHeight[20] - 5);
ctx.fillText(binding.value.amountInRMB, column3X - 20, rowHeight[20] - 5);
ctx.fillStyle = "#000000";
ctx.font = "13px Arial";
//// Row 17
//// Row 18
//// Row 19
// var img = new Image();
// img.src = "/banklogo.png";
// img.crossOrigin = "anonymous";
// var maxwidth = 70;
// var ratio = maxwidth / img.width;
// var offset = ((rowHeight[22] - rowHeight[21]) / 2) - (img.height * ratio / 2);
// var y = rowHeight[21] + offset; // to make it always center
// img.onload=function(){
// ctx.drawImage(img, 50, 530, 80, 50);
// };
// text
ctx.font = "bold 14px Arial";
ctx.textAlign = "center";
ctx.fillText("China beneficiary Account", column2X - 40, rowHeight[22] - 80);
ctx.fillText("户名 : " + binding.value.acc_name, column2X - 40, rowHeight[22] - 60);
ctx.fillText(binding.value.acc_no, column2X - 40, rowHeight[22] - 40);
ctx.fillText(binding.value.bank_name, column2X - 40, rowHeight[22] - 20);
ctx.fillText(binding.value.bank_branch, column2X - 40, rowHeight[22] - 2);
ctx.font = "13px Arial";
}, 1000, canvasElement, binding);
supplier_booking: {},
loading_btn: false,
booking_details: {
id: null,
amount: null,
bia: null,
user_bankslip_path: null
}
}
},
beforeCreate () {
const loading = this.$loading({
lock: true,
text: 'Please wait..',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
})
axios
.get('/api/admin/booking/' + this.$route.params.id + '/details')
.then((response) => {
this.booking_details = response.data
this.trackerConfig.term = response.data.term
loading.close()
}).catch((error) => {
console.log(error)
loading.close()
this.$router.push({
name: 'notfound'
})
})
axios.get('/api/supplier-booking/' + this.$route.params.id)
.then((response) => {
this.supplier_booking = response.data
loading.close()
}).catch((error) => {
console.log(error)
this.$router.push({
name: 'notfound'
})
loading.close()
})
},
methods: {
getExtension (path) {
let index = path.lastIndexOf('.') + 1
return path.slice(index)
},
isImage (path) {
var ext = this.getExtension(path)
return ext === 'jpg' || ext === 'jpeg' || ext === 'bmp' || ext === 'png'
},
getURL (path) {
var getUrl = window.location
var baseUrl = getUrl.protocol + '//' + getUrl.host
return baseUrl + path
},
onDownloadPO () {
const url = '/api/invoice/' + this.booking_details.id + '/po'
axios({
url: url,
method: 'GET',
responseType: 'blob' // important
}).then(resp => {
const url = window.URL.createObjectURL(new Blob([resp.data]))
const link = document.createElement('a')
link.href = url
link.setAttribute('download', 'po.pdf')
document.body.appendChild(link)
link.click()
})
.catch(err => console.error(JSON.stringify(err)))
},
onDownloadDO () {
const url = '/api/invoice/' + this.booking_details.id + '/do'
axios({
url: url,
method: 'GET',
responseType: 'blob' // important
}).then(resp => {
const url = window.URL.createObjectURL(new Blob([resp.data]))
const link = document.createElement('a')
link.href = url
link.setAttribute('download', 'do.pdf')
document.body.appendChild(link)
link.click()
})
.catch(err => console.error(JSON.stringify(err)))
},
onDownloadSupplier () {
const url = '/api/invoice/' + this.booking_details.id + '/supplierdo'
axios({
url: url,
method: 'GET',
responseType: 'blob' // important
}).then(resp => {
const url = window.URL.createObjectURL(new Blob([resp.data]))
const link = document.createElement('a')
link.href = url
link.setAttribute('download', 'supplier-do.pdf')
document.body.appendChild(link)
link.click()
})
.catch(err => console.error(JSON.stringify(err)))
},
onDownloadInvoice () {
const url = '/api/invoice/' + this.booking_details.id + '/invoice'
axios({
url: url,
method: 'GET',
responseType: 'blob' // important
}).then(resp => {
const url = window.URL.createObjectURL(new Blob([resp.data]))
const link = document.createElement('a')
link.href = url
link.setAttribute('download', 'invoice.pdf')
document.body.appendChild(link)
link.click()
})
.catch(err => console.error(JSON.stringify(err)))
}
},
directives: {
insertMessage: function (canvasElement, binding) {
setTimeout(function (canvasElement, binding) {
// //////////////// variable //////////////////////////
var canvasWidth = 450;
var rowHeight = [20, 40, 60, 80, 100, 120, 140, 170, 190, 210, 230, 250, 270, 290, 310, 330, 350, 390,
410,
470, 490, 510, 610, 630
]
const canvasHeight = rowHeight[rowHeight.length - 1];
var column1X = 220;
var column2X = 320;
var column3X = 420;
// /////////////////Canvast Init////////////////////
var canvas = document.getElementById("myCanvas");
canvas.width = canvasWidth;
canvas.height = canvasHeight;
// Get canvas context
var ctx = canvasElement.getContext("2d");
// Clear the canvas
ctx.clearRect(0, 0, 300, 150);
ctx.fillStyle = "#FFFFFF";
ctx.fillRect(0, 0, canvasWidth, rowHeight[0]);
for (var i = 1; i < rowHeight.length; i++) {
if (i % 2 == 1)
ctx.fillStyle = "#A9D08E";
else
ctx.fillStyle = "#FFFFFF";
ctx.fillRect(0, rowHeight[i - 1], canvasWidth, rowHeight[i]);
}
///////////// fillup with text////////////////
//// config canvas
ctx.fillStyle = "#000000";
ctx.font = "13px Arial";
ctx.textAlign = "right";
//// Row 1
ctx.fillText("Ref No. :", column1X, rowHeight[1] - 5);
ctx.fillText(binding.value.booking_id, column3X, rowHeight[1] - 5);
//// Row 2
ctx.fillText("Date :", column1X, rowHeight[2] - 5);
ctx.fillText(binding.value.date, column3X, rowHeight[2] - 5);
//// Row 3
ctx.fillText("Marking :", column1X, rowHeight[3] - 5);
ctx.font = "bold 14px Arial";
ctx.fillStyle = "#0070D5";
ctx.fillText(binding.value.marking, column3X, rowHeight[3] - 5);
ctx.fillStyle = "#000000";
ctx.font = "13px Arial";
//// Row 4
ctx.fillText("Payment For(Order No.) :", column1X, rowHeight[4] - 5);
ctx.fillText(binding.value.order_no, column3X, rowHeight[4] - 5);
//// Row 4
ctx.fillText("Payment For :", column1X, rowHeight[5] - 5);
ctx.fillText(binding.value.payment_for, column3X, rowHeight[5] - 5);
//// Row 5
ctx.fillText("Payment Method :", column1X, rowHeight[6] - 5);
ctx.fillText(binding.value.payment_method, column3X, rowHeight[6] - 5);
//// Row 6
ctx.fillText("Remark :", column1X, rowHeight[7] - 10);
//// Row 7
// Empty
//// Row 8
ctx.fillText("MYR/RM :", column1X, rowHeight[9] - 5);
ctx.fillText("MYR", column2X, rowHeight[9] - 5);
ctx.font = "bold 14px Arial";
ctx.fillText(binding.value.amount_in_myr, column3X, rowHeight[9] - 5);
ctx.font = "13px Arial";
//// Row 8
ctx.fillText("* RATE :", column1X, rowHeight[10] - 5);
ctx.fillText(binding.value.rate, column3X, rowHeight[10] - 5);
//// Row 9
ctx.fillText("REBATE :", column1X, rowHeight[11] - 5);
ctx.fillText("MYR", column2X, rowHeight[11] - 5);
ctx.font = "14px Arial";
ctx.fillText(binding.value.rebate, column3X, rowHeight[11] - 5);
ctx.font = "13px Arial";
//// Row 10
ctx.font = "bold 14px Arial";
ctx.fillText("CNY", column2X, rowHeight[12] - 5);
ctx.fillText(binding.value.amountInRMB, column3X, rowHeight[12] - 5);
ctx.font = "13px Arial";
//line
ctx.beginPath();
ctx.lineWidth = 1;
ctx.moveTo(column1X + 30, rowHeight[11]);
ctx.lineTo(column3X + 20, rowHeight[11]);
ctx.stroke();
ctx.beginPath();
ctx.lineWidth = 2;
ctx.moveTo(column1X + 30, rowHeight[12]);
ctx.lineTo(column3X + 20, rowHeight[12]);
ctx.stroke();
//// Row 11
ctx.fillText("MYR/RM :", column1X, rowHeight[14] - 5);
ctx.fillText("MYR", column2X, rowHeight[14] - 5);
ctx.fillText(binding.value.amount_in_myr, column3X, rowHeight[14] - 5);
//// Row 12
// ctx.fillText("Billing(1.0%) :", column1X, rowHeight[15] - 5);
// ctx.fillText("MYR", column2X, rowHeight[15] - 5);
// ctx.fillText(binding.value.billing_amount, column3X, rowHeight[15] - 5);
//// Row 13
ctx.fillText("+ TAX " + (Math.round((binding.value.tax_rate * 100 - 100) * 100) / 100) + "% :",
column1X, rowHeight[16] - 5); // TODO : Change to percentage
ctx.fillText("MYR", column2X, rowHeight[16] - 5);
ctx.fillText(binding.value.salestax_amount, column3X, rowHeight[16] - 5);
// //// Row 14
// ctx.fillText("+ GST 6% :", column1X, rowHeight[17] - 15);
// ctx.fillText("MYR", column2X, rowHeight[17] - 15);
// ctx.fillText("289.84", column3X, rowHeight[17] - 15);
//// Row 15
ctx.font = "bold 14px Arial";
ctx.fillText("Bank In Amount :", column1X, rowHeight[18] - 5);
ctx.fillStyle = "#0070D5";
ctx.fillText("MYR", column2X, rowHeight[18] - 5);
ctx.fillText(binding.value.amount_after_tax, column3X, rowHeight[18] - 5);
ctx.fillStyle = "#000000";
ctx.font = "13px Arial";
//line
ctx.lineWidth = 1;
ctx.beginPath();
ctx.moveTo(column1X + 30, rowHeight[17]);
ctx.lineTo(column3X + 20, rowHeight[17]);
ctx.stroke();
ctx.beginPath();
ctx.moveTo(column1X + 30, rowHeight[18] + 1);
ctx.lineTo(column3X + 20, rowHeight[18] + 1);
ctx.stroke();
ctx.beginPath();
ctx.moveTo(column1X + 30, rowHeight[18] - 2);
ctx.lineTo(column3X + 20, rowHeight[18] - 2);
ctx.stroke();
//// Row 16
// ctx.fillText("Rebate :", column1X, rowHeight[19] - 25);
// ctx.fillText("CNY", column2X, rowHeight[19] - 25);
// ctx.fillText("224.68", column3X, rowHeight[19] - 25);
//// Row 16
ctx.font = "bold 14px Arial";
ctx.fillText("Bank In to Account Below :", column1X, rowHeight[20] - 5);
ctx.font = "bold italic 15px Arial";
ctx.fillStyle = "#0070D5";
ctx.fillText("CNY", column2X, rowHeight[20] - 5);
ctx.fillText(binding.value.amountInRMB, column3X - 20, rowHeight[20] - 5);
ctx.fillStyle = "#000000";
ctx.font = "13px Arial";
//// Row 17
//// Row 18
//// Row 19
// var img = new Image();
// img.src = "/banklogo.png";
// img.crossOrigin = "anonymous";
// var maxwidth = 70;
// var ratio = maxwidth / img.width;
// var offset = ((rowHeight[22] - rowHeight[21]) / 2) - (img.height * ratio / 2);
// var y = rowHeight[21] + offset; // to make it always center
// img.onload=function(){
// ctx.drawImage(img, 50, 530, 80, 50);
// };
// text
ctx.font = "bold 14px Arial";
ctx.textAlign = "center";
ctx.fillText("China beneficiary Account", column2X - 40, rowHeight[22] - 80);
ctx.fillText("户名 : " + binding.value.acc_name, column2X - 40, rowHeight[22] - 60);
ctx.fillText(binding.value.acc_no, column2X - 40, rowHeight[22] - 40);
ctx.fillText(binding.value.bank_name, column2X - 40, rowHeight[22] - 20);
ctx.fillText(binding.value.bank_branch, column2X - 40, rowHeight[22] - 2);
ctx.font = "13px Arial";
}, 1000, canvasElement, binding);
}
}
}
</script>
File diff suppressed because it is too large Load Diff
+112 -52
View File
@@ -11,12 +11,12 @@
<div class="col">
<div class="card">
<div class="card-header">Purchase Order</div>
<div class="row" v-for="po in booking_details.user_po_path" :key='po'>
<div v-for="po in booking_details.user_po_path" :key="po" class="row">
<div class="col">
<a target="_blank" :href="getURL(po)">
<img v-if="isImage(po)" v-bind:src="po" class="image" style="max-width: 100%">
<a :href="getURL(po)" target="_blank">
<img v-if="isImage(po)" :src="po" class="image" style="max-width: 100%">
<p v-else>Download</p>
<br/>
<br>
</a>
</div>
</div>
@@ -25,36 +25,49 @@
<div class="col">
<div class="card">
<div class="card-header">China Bank Slip</div>
<div class="row" v-for="cn_bankslip in booking_details.china_bankslip_path" :key='cn_bankslip'>
<div v-for="cn_bankslip in booking_details.china_bankslip_path" :key="cn_bankslip" class="row" >
<div class="col">
<a target="_blank" :href="getURL(cn_bankslip)">
<img v-if="isImage(cn_bankslip)" v-bind:src="cn_bankslip" class="image" style="max-width: 100%">
<a :href="getURL(cn_bankslip)" target="_blank">
<img v-if="isImage(cn_bankslip)" :src="cn_bankslip" class="image" style="max-width: 100%">
<p v-else>Download</p>
<br/>
<br>
</a>
</div>
</div>
</div>
</div>
<div class="col">
<div class="card">
<div v-if="booking_details.invoice_path[0] !== '/storage/'" class="card" >
<div class="card-header">Invoice</div>
<div class="row" v-for="invoice in booking_details.invoice_path" :key='invoice'>
<div class="col">
<a target="_blank" :href="getURL(invoice)">
<img v-if="isImage(invoice)" v-bind:src="invoice" class="image" style="max-width: 100%">
<p v-else>Download</p>
<br/>
</a>
<div >
<div v-for="invoice in booking_details.invoice_path" :key="invoice" class="row" >
<div class="col">
<a :href="getURL(invoice)" target="_blank">
<img v-if="isImage(invoice)" :src="invoice" class="image" style="max-width: 100%">
<p v-else>Download</p>
<br>
</a>
</div>
</div>
</div>
</div>
<div v-else>
<button class="btn btn-success" type="button" @click="onDownloadPO">
Download PO
</button>
<button class="btn btn-primary" type="button" @click="onDownloadDO">
Download DO
</button>
<button class="btn btn-info" type="button" @click="onDownloadInvoice">
Download Invoice
</button>
</div>
</div>
</div>
<!-- order details -->
<div class="card">
<div class="card-header">Order Details</div>
<div class="card-body">
<div class="card-header">Order Details</div>
<div class="card-body">
<div class="row">
<div class="col">
<table class="table table-striped">
@@ -65,11 +78,11 @@
</tr>
<tr>
<td>Date :</td>
<td>{{ booking_details.created_at }}</td>
<td>{{ booking_details.created_at }}</td>
</tr>
<tr>
<td>Customer Marking :</td>
<td>{{ booking_details.marking }}</td>
<td>{{ booking_details.marking }}</td>
</tr>
<tr>
<td>Term: </td>
@@ -87,14 +100,14 @@
</tr>
<tr>
<td>+ Service Charge :</td>
<td>CNY {{ booking_details.service_charge }}</td>
<td>CNY {{ booking_details.service_charge }}</td>
</tr>
<tr>
<td>RATE :</td>
<td>{{ booking_details.rate }}</td>
<td>{{ booking_details.rate }}</td>
</tr>
<tr>
<td></td>
<td/>
<td><b>MYR {{ booking_details.bia }}</b></td>
</tr>
</tbody>
@@ -107,10 +120,10 @@
<div class="card-header">Order Bankin Slip</div>
<div class="row">
<div class="card-body">
<a target="_blank" :href="getURL(booking_details.user_bankslip_path)">
<img v-if="isImage(booking_details.user_bankslip_path)" v-bind:src="booking_details.user_bankslip_path" class="image" style="max-width: 100%">
<a :href="getURL(booking_details.user_bankslip_path)" target="_blank" >
<img v-if="isImage(booking_details.user_bankslip_path)" :src="booking_details.user_bankslip_path" class="image" style="max-width: 100%">
<p v-else>Download</p>
</a>
</a>
</div>
</div>
</div>
@@ -142,13 +155,13 @@
margin-bottom: 3%;
}
@media screen and (max-width: 767px) {
.table {
font-size: 3.5vmin;
}
h1 {
.table {
font-size: 3.5vmin;
}
h1 {
font-size: 1em;
}
}
}
</style>
<script>
import ProgressTrack from '~/components/ProgressTrack'
@@ -162,17 +175,17 @@ export default {
},
data () {
return {
trackerConfig :{
status: 7,
term: null,
trackerConfig: {
status: 7,
term: null
},
loading_btn: false,
booking_details:{
id: null,
amount: null,
bia: null,
user_bankslip_path: null,
}
booking_details: {
id: null,
amount: null,
bia: null,
user_bankslip_path: null
}
}
},
beforeCreate () {
@@ -188,8 +201,7 @@ export default {
.then((response) => {
this.booking_details = response.data
this.trackerConfig.term = response.data.term
loading.close();
loading.close()
}).catch((error) => {
console.log(error)
loading.close()
@@ -199,18 +211,66 @@ export default {
})
},
methods: {
getExtension(path){
let index = path.lastIndexOf('.') + 1;
return path.slice(index);
getExtension (path) {
let index = path.lastIndexOf('.') + 1
return path.slice(index)
},
isImage(path){
var ext = this.getExtension(path);
return ext === 'jpg' || ext === 'jpeg' || ext === 'bmp' || ext === 'png';
isImage (path) {
var ext = this.getExtension(path)
return ext === 'jpg' || ext === 'jpeg' || ext === 'bmp' || ext === 'png'
},
getURL(path){
var getUrl = window.location;
var baseUrl = getUrl.protocol + "//" + getUrl.host;
return baseUrl + path;
getURL (path) {
var getUrl = window.location
var baseUrl = getUrl.protocol + '//' + getUrl.host
return baseUrl + path
},
onDownloadPO () {
const url = '/api/invoice/' + this.booking_details.id + '/po'
axios({
url: url,
method: 'GET',
responseType: 'blob' // important
}).then(resp => {
const url = window.URL.createObjectURL(new Blob([resp.data]))
const link = document.createElement('a')
link.href = url
link.setAttribute('download', 'po.pdf')
document.body.appendChild(link)
link.click()
})
.catch(err => console.error(JSON.stringify(err)))
},
onDownloadDO () {
const url = '/api/invoice/' + this.booking_details.id + '/do'
axios({
url: url,
method: 'GET',
responseType: 'blob' // important
}).then(resp => {
const url = window.URL.createObjectURL(new Blob([resp.data]))
const link = document.createElement('a')
link.href = url
link.setAttribute('download', 'do.pdf')
document.body.appendChild(link)
link.click()
})
.catch(err => console.error(JSON.stringify(err)))
},
onDownloadInvoice () {
const url = '/api/invoice/' + this.booking_details.id + '/invoice'
axios({
url: url,
method: 'GET',
responseType: 'blob' // important
}).then(resp => {
const url = window.URL.createObjectURL(new Blob([resp.data]))
const link = document.createElement('a')
link.href = url
link.setAttribute('download', 'invoice.pdf')
document.body.appendChild(link)
link.click()
})
.catch(err => console.error(JSON.stringify(err)))
}
}
}
+250 -244
View File
@@ -2,124 +2,126 @@
<el-main>
<x2-progress-track v-if="(trackerConfig.term == 'x2_cash' || trackerConfig.term == 'x2_cheque' || trackerConfig.term == 'x2_ba')" v-model="trackerConfig" />
<progress-track v-else v-model="trackerConfig" />
<h1>Transfer Completed</h1>
<h2> Please upload your purchase order </h2>
<!-- upload card -->
<div class="row">
<div class="col">
<div class="card">
<div class="card-header">Upload PO
<a href="/CIEF-X-Plan-PO-Format-15.0.xlsm" target="_blank">(Download Po Format)</a>
</div>
<!-- upload image -->
<div class="card-body">
<el-upload :action="'/api/booking/' + booking_id + '/upload-po'" :auto-upload="false" :on-change="beforeFileUpload" :on-exceed="handleExceed" :on-preview="handlePreview" :on-remove="handleRemove"
:on-error="uploadError" class="upload-demo uploadAreaOne" accept=".jpeg, .jpg, .png, .bmp, .doc, .docx, .xls, .xlsx, .pdf"
drag multiple>
<i class="el-icon-upload" />
<div class="el-upload__text">Drop file here or
<em>click to upload</em>
</div>
<div slot="tip" class="el-upload__tip">bmp/jpeg/jpg/png/pdf/xls/xlxs/doc/docx files with a size less than 3MB</div>
</el-upload>
<el-upload class="upload-demo uploadAreaTwo" :action="'/api/booking/' + booking_id + '/upload-po'" :on-preview="handlePreview"
:on-remove="handleRemove" :before-remove="beforeRemove" multiple :file-list="fileList">
<el-button size="small" type="primary">Click to upload</el-button>
<div slot="tip" class="el-upload__tip">jpg/png files with a size less than 500kb</div>
</el-upload>
<div class="bottom clearfix" style="text-align:right;">
<el-button :loading="loading_btn" type="primary" @click="uploadPo">Submit</el-button>
<div v-if="isLegacy" id="legacy-invoice">
<h1>Transfer Completed</h1>
<h2> Please upload your purchase order </h2>
<!-- upload card -->
<div class="row">
<div class="col">
<div class="card">
<div class="card-header">Upload PO
<a href="/CIEF-X-Plan-PO-Format-15.0.xlsm" target="_blank">(Download Po Format)</a>
</div>
<!-- upload image -->
<div class="card-body">
<el-upload :action="'/api/booking/' + booking_id + '/upload-po'" :auto-upload="false" :on-change="beforeFileUpload" :on-exceed="handleExceed" :on-preview="handlePreview" :on-remove="handleRemove" :on-error="uploadError" class="upload-demo uploadAreaOne" accept=".jpeg, .jpg, .png, .bmp, .doc, .docx, .xls, .xlsx, .pdf" drag multiple>
<i class="el-icon-upload" />
<div class="el-upload__text">Drop file here or
<em>click to upload</em>
</div>
<div slot="tip" class="el-upload__tip">bmp/jpeg/jpg/png/pdf/xls/xlxs/doc/docx files with a size less than 3MB</div>
</el-upload>
<el-upload :action="'/api/booking/' + booking_id + '/upload-po'" :on-preview="handlePreview" :on-remove="handleRemove" :before-remove="beforeRemove" :file-list="fileList" multiple class="upload-demo uploadAreaTwo" >
<el-button size="small" type="primary">Click to upload</el-button>
<div slot="tip" class="el-upload__tip">jpg/png files with a size less than 500kb</div>
</el-upload>
<div class="bottom clearfix" style="text-align:right;">
<el-button :loading="loading_btn" type="primary" @click="uploadPo">Submit</el-button>
</div>
<!-- upload image end -->
</div>
</div>
</div>
<div class="col">
<div class="card">
<div class="card-header">China Bank Slip</div>
<div class="card-body">
<a :href="getURL(booking_details.china_bankslip_path)" target="_blank" >
<img v-if="isImage(booking_details.china_bankslip_path)" :src="booking_details.china_bankslip_path" class="image">
<p v-else>Download</p>
</a>
</div>
<!-- upload image end -->
</div>
</div>
</div>
<div class="col">
<div class="card">
<div class="card-header">China Bank Slip</div>
<!-- order details -->
<div class="card">
<div class="card-header">Order Details</div>
<div class="card-body">
<div class="row">
<div class="col">
<table class="table table-striped">
<tbody>
<tr>
<td>Ref No :</td>
<td>{{ booking_details.id }}</td>
</tr>
<tr>
<td>Date :</td>
<td>{{ booking_details.created_at }}</td>
</tr>
<tr>
<td>Customer Marking :</td>
<td>{{ booking_details.marking }}</td>
</tr>
<tr>
<td>Term: </td>
<td>{{ booking_details.term }}</td>
</tr>
<tr>
<td>Beneficiary Account : </td>
<td>{{ booking_details.account_name }}</td>
</tr>
</tbody>
</table>
</div>
<div class="col">
<table class="table table-striped">
<tbody>
<tr>
<td>CNY/RMB :</td>
<td>CNY {{ booking_details.amount }}</td>
</tr>
<tr>
<td>+ Service Charge :</td>
<td>CNY {{ booking_details.service_charge }}</td>
</tr>
<tr>
<td>RATE :</td>
<td>{{ booking_details.rate }}</td>
</tr>
<tr>
<td/>
<td>
<b>MYR {{ booking_details.bia }}</b>
</td>
</tr>
<tr>
<td>Beneficiary Account Number : </td>
<td>{{ booking_details.account_num }}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header">Order Bankin Slip</div>
<div class="row">
<div class="card-body">
<a target="_blank" :href="getURL(booking_details.china_bankslip_path)">
<img v-if="isImage(booking_details.china_bankslip_path)" v-bind:src="booking_details.china_bankslip_path" class="image">
<a :href="getURL(booking_details.user_bankslip_path)" target="_blank" >
<img v-if="isImage(booking_details.user_bankslip_path)" :src="booking_details.user_bankslip_path" class="image">
<p v-else>Download</p>
</a>
</div>
</div>
</div>
</div>
<!-- order details -->
<div class="card">
<div class="card-header">Order Details</div>
<div class="card-body">
<div class="row">
<div class="col">
<table class="table table-striped">
<tbody>
<tr>
<td>Ref No :</td>
<td>{{ booking_details.id }}</td>
</tr>
<tr>
<td>Date :</td>
<td>{{ booking_details.created_at }}</td>
</tr>
<tr>
<td>Customer Marking :</td>
<td>{{ booking_details.marking }}</td>
</tr>
<tr>
<td>Term: </td>
<td>{{ booking_details.term }}</td>
</tr>
<tr>
<td>Beneficiary Account : </td>
<td>{{ booking_details.account_name }}</td>
</tr>
</tbody>
</table>
</div>
<div class="col">
<table class="table table-striped">
<tbody>
<tr>
<td>CNY/RMB :</td>
<td>CNY {{ booking_details.amount }}</td>
</tr>
<tr>
<td>+ Service Charge :</td>
<td>CNY {{ booking_details.service_charge }}</td>
</tr>
<tr>
<td>RATE :</td>
<td>{{ booking_details.rate }}</td>
</tr>
<tr>
<td></td>
<td>
<b>MYR {{ booking_details.bia }}</b>
</td>
</tr>
<tr>
<td>Beneficiary Account Number : </td>
<td>{{ booking_details.account_num }}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header">Order Bankin Slip</div>
<div class="row">
<div class="card-body">
<a target="_blank" :href="getURL(booking_details.user_bankslip_path)">
<img v-if="isImage(booking_details.user_bankslip_path)" v-bind:src="booking_details.user_bankslip_path" class="image">
<p v-else>Download</p>
</a>
</div>
</div>
<div v-else id="new-invoice">
<new-invoice :booking_details="booking_details" :booking_id="booking_id.toString()"/>
</div>
</el-main>
</template>
@@ -184,152 +186,156 @@
}
</style>
<script>
import ProgressTrack from '~/components/ProgressTrack'
import ProgressTrack from '~/components/ProgressTrack'
import X2ProgressTrack from '~/components/X2ProgressTrack'
import NewInvoice from '~/components/NewInvoice'
import axios from 'axios'
import ImageCompressor from 'image-compressor.js'
export default {
components: {
'progress-track': ProgressTrack,
'x2-progress-track': X2ProgressTrack
'x2-progress-track': X2ProgressTrack,
'new-invoice': NewInvoice
},
data() {
return {
booking_id: this.$route.params.id,
trackerConfig :{
status: 5,
term: null
},
purchaseOrderArray: [],
loading_btn: false,
booking_details: {
id: null,
amount: null,
bia: null,
user_bankslip_path: null,
china_bankslip_path: null,
}
}
},
beforeCreate() {
const loading = this.$loading({
lock: true,
text: 'Please wait..',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
})
axios
.get('/api/booking/' + this.$route.params.id)
.then((response) => {
this.booking_details = response.data
this.trackerConfig.term = response.data.term
loading.close()
}).catch((error) => {
console.log(error)
loading.close()
this.$router.push({
name: 'notfound'
})
})
},
methods: {
uploadPo() {
this.loading_btn = true
console.log(this.purchaseOrderArray);
axios
.post('/api/booking/' + this.$route.params.id + '/confirm-po', { images: this.purchaseOrderArray})
.then((response) => {
this.$message({
showClose: true,
message: 'Your PO has been uploaded. We are processing the Invoice.',
type: 'success',
duration: 5000
})
this.$router.push({
name: 'home'
})
this.loading_btn = false
}).catch((error) => {
this.$message({
showClose: true,
message: "Please upload your purchase order",
type: 'error',
duration: 30000
})
this.loading_btn = false
})
data () {
return {
booking_id: this.$route.params.id,
trackerConfig: {
status: 5,
term: null
},
beforeFileUpload(file, fileList) {
this.purchaseOrderArray = [];
var vm = this;
for (var i in fileList) {
var filetype = fileList[i].raw.type.split("/")[0];
if(filetype === 'image'){
new ImageCompressor(fileList[i].raw, {
quality: .4,
convertSize: 1500000,
success(result) {
vm.convertFile(result)
},
error(e) {
console.log(e.message);
}
});
} else {
this.convertFile(fileList[i].raw)
}
}
},
convertFile(file){
var vm = this,
reader = new FileReader();
reader.readAsDataURL(file);
reader.onloadend = function() {
vm.purchaseOrderArray.push(reader.result);
console.log(vm.purchaseOrderArray);
}
},
handleRemove(file, fileList) {
console.log(file, fileList)
// Should send some reqeust to controller to delete the file
},
handlePreview(file) {
console.log(file)
},
handleExceed(files, fileList) {
this.$message.warning(
`The limit is 3, you selected ${files.length} files this time, add up to ${files.length + fileList.length} totally`
)
},
beforeRemove(file, fileList) {
return this.$confirm(`确定移除 ${file.name}`)
},
uploadError(file, fileList) {
this.$message.warning(`Incorrect file format or file size too big.`)
},
getExtension(path) {
return path.slice(-3);
},
isImage(path) {
if(path != null){
var ext = this.getExtension(path);
return ext === 'jpg' || ext === 'jpeg' || ext === 'bmp' || ext === 'png';
} else {
return false;
}
},
getURL(path) {
var getUrl = window.location;
var baseUrl = getUrl.protocol + "//" + getUrl.host;
return baseUrl + path;
purchaseOrderArray: [],
loading_btn: false,
booking_details: {
id: null,
amount: null,
bia: null,
user_bankslip_path: null,
china_bankslip_path: null
}
}
},
computed: {
isLegacy: function () {
return this.booking_details.user_po_path && this.booking_details.user_po_path.length > 0
}
},
beforeCreate () {
const loading = this.$loading({
lock: true,
text: 'Please wait..',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
})
axios
.get('/api/booking/' + this.$route.params.id)
.then((response) => {
console.log(response)
this.booking_details = response.data
this.trackerConfig.term = response.data.term
loading.close()
}).catch((error) => {
console.log(error)
loading.close()
this.$router.push({
name: 'notfound'
})
})
},
methods: {
uploadPo () {
this.loading_btn = true
console.log(this.purchaseOrderArray)
axios
.post('/api/booking/' + this.$route.params.id + '/confirm-po', { images: this.purchaseOrderArray })
.then((response) => {
this.$message({
showClose: true,
message: 'Your PO has been uploaded. We are processing the Invoice.',
type: 'success',
duration: 5000
})
this.$router.push({
name: 'home'
})
this.loading_btn = false
}).catch((error) => {
console.error(error)
this.$message({
showClose: true,
message: 'Please upload your purchase order',
type: 'error',
duration: 30000
})
this.loading_btn = false
})
},
beforeFileUpload (file, fileList) {
this.purchaseOrderArray = []
const vm = this
for (let i in fileList) {
const filetype = fileList[i].raw.type.split('/')[0]
if (filetype === 'image') {
ImageCompressor(fileList[i].raw, {
quality: 0.4,
convertSize: 1500000,
success (result) {
vm.convertFile(result)
},
error (e) {
console.error(e.message)
}
})
} else {
this.convertFile(fileList[i].raw)
}
}
},
convertFile (file) {
let vm = this
const reader = new FileReader()
reader.readAsDataURL(file)
reader.onloadend = function () {
vm.purchaseOrderArray.push(reader.result)
console.log(vm.purchaseOrderArray)
}
},
handleRemove (file, fileList) {
console.log(file, fileList)
// Should send some reqeust to controller to delete the file
},
handlePreview (file) {
console.log(file)
},
handleExceed (files, fileList) {
this.$message.warning(
`The limit is 3, you selected ${files.length} files this time, add up to ${files.length + fileList.length} totally`
)
},
beforeRemove (file, fileList) {
return this.$confirm(`确定移除 ${file.name}`)
},
uploadError (file, fileList) {
this.$message.warning(`Incorrect file format or file size too big.`)
},
getExtension (path) {
return path.slice(-3)
},
isImage (path) {
if (path != null) {
const ext = this.getExtension(path)
return ext === 'jpg' || ext === 'jpeg' || ext === 'bmp' || ext === 'png'
} else {
return false
}
},
getURL (path) {
const getUrl = window.location
const baseUrl = getUrl.protocol + '//' + getUrl.host
return baseUrl + path
}
}
</script>
}
</script>
+194
View File
@@ -0,0 +1,194 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Document</title>
<style>
body {
font-family: sun-extA;
}
img.logo {
top: 10px;
}
img {
height: 7em;
width: 18%;
}
.title {
font-size: 2em;
font-weight: 1200;
}
.details {
display: inline-block;
position: relative;
}
.sub-title {
font-size: 1.3em;
font-weight: bold;
}
.label {
font-size: 1.1em;
font-weight: bold;
}
.bill-to {
margin-top: 30px;
}
table {
width: 100%;
vertical-align: top;
}
th {
border-bottom: 1px solid black;
}
td {
padding: 0.4em;
text-align: center;
}
td.description, th.description {
text-align: justify;
max-width: 40em;
}
td.stock-code, th.stock-code {
text-align: center;
}
th {
vertical-align: middle;
}
td, th {
margin-top: 0.6em;
margin-right: 0.6em;
}
.subtotal td {
border-top: 1px solid black;
}
.total {
border-top: 1px solid black;
border-bottom: 3px double black;
font-weight: bolder;
}
.address {
} */
td.header-logo {
text-align: left;
width: fit-content;
}
td.header-cief-address {
text-align: left;
}
td.header-details {
text-align: left;
vertical-align: top;
}
td.bill-to {
text-align: left;
}
td.address {
text-align: left;
}
</style>
</head>
<body>
<table>
<tr>
<td class="header-logo">
<img src="https://firebasestorage.googleapis.com/v0/b/edmondtm-1d8ed.appspot.com/o/logo.png?alt=media&token=e8458dc5-b9cd-4db4-b2c9-b953c0b9d09e" alt="logo" id="logo" class="">
</td>
<td class="header-cief-address">
<span class="company-name">
<strong>
CIEF WORLDWIDE SDN BHD
</strong>
</span>
<span class="company-reg">(1134596-M)</span><br>
Malaysian Global Innovation &amp; Creativity Center <br>
Level 1 CWS, Block 3730, Persiaran APEC, <br>
63000 Cyberjaya, Malaysian. <br>
Tel: 018-2909252
</td>
<td class="header-details">
<div class="title">
<strong>
{{$title}}
</strong>
</div>
@if($detail['ei'])
<div class="number">EI#: {{$detail['ei']}}</div>
@endif
@if($detail['edo'])
<div class="number">EDO#: {{$detail['edo']}}</div>
@endif
<div class="ref">Ref#: {{$detail['ref']}}</div>
<div class="date">Date: {{$detail['date']}}</div>
<div>&nbsp;</div>
</div>
</td>
<tr>
<td colspan="3" class="bill-to">
<span class="sub-title">
Bill To
</span>
</td>
</tr>
<tr>
<td colspan="3" class="address">
<div class="label">
{{$billto['buyer_company']}}
</div>
<div class="address">
{{$billto['address']}}
</div>
<div>
Phone: {{$billto['phone']}}
</div>
</td>
</tr>
</table>
<br>
<br>
<table style="overflow: wrap" autosize="1">
<thead>
<tr>
<th width="5%">No</th>
<th class="stock-code" width="10%">Stock Code</th>
<th class="description">Description</th>
<th width="10%">Quantity</th>
<th width="12%">Unit Price (RM)</th>
<th width="10%">Total Amount<br>(RM)</th>
</tr>
</thead>
<tbody>
@foreach ($lines as $line)
<tr>
<td width="5%">{{$line->order}}</td>
<td class="stock-code" width="10%">{{$line->stock_code}}</td>
<td class="description" >{{$line->description}}</td>
<td width="10%">{{$line->quantity}}</td>
<td width="12%">{{number_format($line->unit_price_rm, 2)}}</td>
<td width="20%">{{number_format($line->total, 2)}}</td>
</tr>
@endforeach
</tbody>
<tfoot>
<tr class="subtotal">
<td colspan="4"></td>
<td>Subtotal</td>
<td>{{ number_format($amount, 2) }}</td>
</tr>
<tr>
<td colspan="4"></td>
<td>Total</td>
<td class="total">{{ number_format($amount, 2) }}</td>
</tr>
</tfoot>
</table>
</body>
</html>
+170
View File
@@ -0,0 +1,170 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>document</title>
<style>
body {
font-family: sun-extA;
overflow: wrap;
}
table {
width: 100%;
}
td.title {
text-align: left;
}
td.document-detail {
text-align: left;
border: 1px solid black;
padding: 1em 1em 1em 1em;
width: 16em;
}
.buyer-seller-title {
font-size: 1.2em;
font-weight: bolder;
}
td.description, th.description {
text-align: justify;
max-width: 40em;
}
td.stock-code, th.stock-code {
text-align: center;
}
th {
border-bottom: 1px solid black;
}
td.description, th.description {
text-align: justify;
}
.total {
border-top: 1px solid black;
border-bottom: 3px double black;
font-weight: bolder;
}
.center {
text-align: center;
}
.middle {
vertical-align: middle;
}
.top {
vertical-align: top;
}
td {
padding-bottom: 1em;
}
.subtotal td {
border-top: 1px solid black;
}
</style>
</head>
<body>
<table class="header">
<tr>
<td class="title">
<h1>
{{ $title }}
</h1>
</td>
<td class="document-detail">
PO#: {{$detail['po']}} <br>
Ref#: {{ $detail['ref'] }} <br>
Date: {{ $detail['date'] }}
</td>
</tr>
</table>
<br>
<table class="buyer-seller">
<tr>
<td width="50%" class="top">
<span class="buyer-seller-title">
Buyer
</span>
<br>
@if($buyer['marking_no'])
<div class="buyer-company">
Marking#: {{$buyer['marking_no']}}
</div>
@endif
<span class="buyer-company">
{{ $buyer['buyer_company'] }}
</span>
<span class="reg">
({{ $buyer['reg_no'] }})
</span>
<br>
<span class="address">
{{ $buyer['address'] }}
</span>
<br>
<span class="contact-no">
Phone: {{ $buyer['phone'] }}
</span>
</td>
<td width="50%" class="top">
<span class="buyer-seller-title">
Seller
</span>
<br>
<span class="buyer-company">
{{ $seller['seller_company'] }}
</span>
<div class="address">
{{ $seller['address'] }}
</div>
@if($seller['phone'])
<div class="contact-no">
Phone: {{ $seller['phone'] }}
</div>
@endif
</td>
</tr>
</table>
<br>
<table class="line-table" style="overflow: wrap" autosize="1">
<thead>
<tr>
<th width="5%" >No</th>
<th class="stock-code" width="10%">Stock Code</th>
<th class="description">Description</th>
<th width="10%">Quantity</th>
<th width="12%">Unit Price (RM)</th>
<th width="10%">Total Amount<br>(RM)</th>
</tr>
</thead>
<tbody>
@foreach ($lines as $line)
<tr>
<td width="5%" class="center top">{{$line->order}}</td>
<td class="stock-code top" width="10%">{{$line->stock_code}}</td>
<td class="description" >{{$line->description}}</td>
<td width="10%" class="center top">{{$line->quantity}}</td>
<td width="12%" class="center top">{{number_format($line->unit_price_rm, 2)}}</td>
<td width="20%" class="center top">{{number_format($line->total, 2)}}</td>
</tr>
@endforeach
</tbody>
<tfoot>
<tr class="subtotal">
<td colspan="4"></td>
<td class="center middle">Subtotal</td>
<td class="center middle">{{ number_format($amount, 2) }}</td>
</tr>
<tr>
<td colspan="4"></td>
<td class="center center middle">Total</td>
<td class="total center middle">{{ number_format($amount, 2) }}</td>
</tr>
</tfoot>
</table>
</body>
</html>
+17 -1
View File
@@ -49,6 +49,14 @@ Route::group(['middleware' => 'auth:api'], function () {
Route::patch('settings/profile', 'Settings\ProfileController@update');
Route::patch('settings/password', 'Settings\PasswordController@update');
// New Invoice Routes
Route::get('invoice/{id}', 'InvoiceController@show');
Route::post('invoice/{id}', 'InvoiceController@create');
Route::put('invoice/{id}', 'InvoiceController@edit');
Route::get('invoice/{id}/po', 'InvoiceController@customerToCIEFPO');
Route::get('invoice/{id}/do', 'InvoiceController@CIEFToCustomerDO');
Route::get('invoice/{id}/invoice', 'InvoiceController@CIEFToCustomerInvoice');
//Route::get('notification/user', 'NotificationController@getUserMessage');
//Route::post('notification/read-notification/{notification_id}', 'NotificationController@readNotification');
@@ -60,6 +68,8 @@ Route::group(['middleware' => 'auth:api'], function () {
});
Route::group(['middleware' => 'guest:api'], function () {
Route::get('showinvoice', 'InvoiceController@showinvoice');
Route::post('login', 'Auth\LoginController@login')->name('login');
Route::post('register', 'Auth\RegisterController@create');
Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLink');
@@ -128,7 +138,13 @@ Route::group(['middleware' => ['role:admin']], function() {
Route::patch('booking/{id}/update-china-bankslip','ChinaBankSlipController@update');
Route::get('booking/{id}/po', 'BookingController@showPurchaseOrder');
Route::post('booking/{id}/upload-invoice', 'BookingController@uploadInvoice');
Route::post('booking/{id}/confirm-invoice', 'BookingController@confirmInvoice');
Route::post('booking/{id}/confirm-invoice', 'BookingController@confirmInvoice');
// New routes for invoice
Route::patch('invoice/{id}/status', 'InvoiceController@updateStatus');
Route::get('invoice/{id}/supplierdo', 'InvoiceController@CIEFToSupplierDO');
Route::post('invoice/{id}/comment', 'InvoiceController@postStatus');
Route::get('admin/complete-orders', 'BookingController@adminShowCompletedOrders');
// for both user and admin
+572
View File
@@ -0,0 +1,572 @@
<?php return array (
'codeToName' =>
array (
32 => 'space',
160 => 'space',
33 => 'exclam',
34 => 'quotedbl',
35 => 'numbersign',
36 => 'dollar',
37 => 'percent',
38 => 'ampersand',
146 => 'quoteright',
40 => 'parenleft',
41 => 'parenright',
42 => 'asterisk',
43 => 'plus',
44 => 'comma',
45 => 'hyphen',
173 => 'hyphen',
46 => 'period',
47 => 'slash',
48 => 'zero',
49 => 'one',
50 => 'two',
51 => 'three',
52 => 'four',
53 => 'five',
54 => 'six',
55 => 'seven',
56 => 'eight',
57 => 'nine',
58 => 'colon',
59 => 'semicolon',
60 => 'less',
61 => 'equal',
62 => 'greater',
63 => 'question',
64 => 'at',
65 => 'A',
66 => 'B',
67 => 'C',
68 => 'D',
69 => 'E',
70 => 'F',
71 => 'G',
72 => 'H',
73 => 'I',
74 => 'J',
75 => 'K',
76 => 'L',
77 => 'M',
78 => 'N',
79 => 'O',
80 => 'P',
81 => 'Q',
82 => 'R',
83 => 'S',
84 => 'T',
85 => 'U',
86 => 'V',
87 => 'W',
88 => 'X',
89 => 'Y',
90 => 'Z',
91 => 'bracketleft',
92 => 'backslash',
93 => 'bracketright',
94 => 'asciicircum',
95 => 'underscore',
145 => 'quoteleft',
97 => 'a',
98 => 'b',
99 => 'c',
100 => 'd',
101 => 'e',
102 => 'f',
103 => 'g',
104 => 'h',
105 => 'i',
106 => 'j',
107 => 'k',
108 => 'l',
109 => 'm',
110 => 'n',
111 => 'o',
112 => 'p',
113 => 'q',
114 => 'r',
115 => 's',
116 => 't',
117 => 'u',
118 => 'v',
119 => 'w',
120 => 'x',
121 => 'y',
122 => 'z',
123 => 'braceleft',
124 => 'bar',
125 => 'braceright',
126 => 'asciitilde',
161 => 'exclamdown',
162 => 'cent',
163 => 'sterling',
165 => 'yen',
131 => 'florin',
167 => 'section',
164 => 'currency',
39 => 'quotesingle',
147 => 'quotedblleft',
171 => 'guillemotleft',
139 => 'guilsinglleft',
155 => 'guilsinglright',
150 => 'endash',
134 => 'dagger',
135 => 'daggerdbl',
183 => 'periodcentered',
182 => 'paragraph',
149 => 'bullet',
130 => 'quotesinglbase',
132 => 'quotedblbase',
148 => 'quotedblright',
187 => 'guillemotright',
133 => 'ellipsis',
137 => 'perthousand',
191 => 'questiondown',
96 => 'grave',
180 => 'acute',
136 => 'circumflex',
152 => 'tilde',
175 => 'macron',
168 => 'dieresis',
184 => 'cedilla',
151 => 'emdash',
198 => 'AE',
170 => 'ordfeminine',
216 => 'Oslash',
140 => 'OE',
186 => 'ordmasculine',
230 => 'ae',
248 => 'oslash',
156 => 'oe',
223 => 'germandbls',
207 => 'Idieresis',
233 => 'eacute',
159 => 'Ydieresis',
247 => 'divide',
221 => 'Yacute',
194 => 'Acircumflex',
225 => 'aacute',
219 => 'Ucircumflex',
253 => 'yacute',
234 => 'ecircumflex',
220 => 'Udieresis',
218 => 'Uacute',
203 => 'Edieresis',
169 => 'copyright',
229 => 'aring',
224 => 'agrave',
227 => 'atilde',
154 => 'scaron',
237 => 'iacute',
251 => 'ucircumflex',
226 => 'acircumflex',
231 => 'ccedilla',
222 => 'Thorn',
179 => 'threesuperior',
210 => 'Ograve',
192 => 'Agrave',
215 => 'multiply',
250 => 'uacute',
255 => 'ydieresis',
238 => 'icircumflex',
202 => 'Ecircumflex',
228 => 'adieresis',
235 => 'edieresis',
205 => 'Iacute',
177 => 'plusminus',
166 => 'brokenbar',
174 => 'registered',
200 => 'Egrave',
142 => 'Zcaron',
208 => 'Eth',
199 => 'Ccedilla',
193 => 'Aacute',
196 => 'Adieresis',
232 => 'egrave',
211 => 'Oacute',
243 => 'oacute',
239 => 'idieresis',
212 => 'Ocircumflex',
217 => 'Ugrave',
254 => 'thorn',
178 => 'twosuperior',
214 => 'Odieresis',
181 => 'mu',
236 => 'igrave',
190 => 'threequarters',
153 => 'trademark',
204 => 'Igrave',
189 => 'onehalf',
244 => 'ocircumflex',
241 => 'ntilde',
201 => 'Eacute',
188 => 'onequarter',
138 => 'Scaron',
176 => 'degree',
242 => 'ograve',
249 => 'ugrave',
209 => 'Ntilde',
245 => 'otilde',
195 => 'Atilde',
197 => 'Aring',
213 => 'Otilde',
206 => 'Icircumflex',
172 => 'logicalnot',
246 => 'odieresis',
252 => 'udieresis',
240 => 'eth',
158 => 'zcaron',
185 => 'onesuperior',
128 => 'Euro',
),
'isUnicode' => false,
'FontName' => 'Courier-Bold',
'FullName' => 'Courier Bold',
'FamilyName' => 'Courier',
'Weight' => 'Bold',
'ItalicAngle' => '0',
'IsFixedPitch' => 'true',
'CharacterSet' => 'ExtendedRoman',
'FontBBox' =>
array (
0 => '-113',
1 => '-250',
2 => '749',
3 => '801',
),
'UnderlinePosition' => '-100',
'UnderlineThickness' => '50',
'Version' => '003.000',
'EncodingScheme' => 'WinAnsiEncoding',
'CapHeight' => '562',
'XHeight' => '439',
'Ascender' => '629',
'Descender' => '-157',
'StdHW' => '84',
'StdVW' => '106',
'StartCharMetrics' => '317',
'C' =>
array (
32 => 600.0,
160 => 600.0,
33 => 600.0,
34 => 600.0,
35 => 600.0,
36 => 600.0,
37 => 600.0,
38 => 600.0,
146 => 600.0,
40 => 600.0,
41 => 600.0,
42 => 600.0,
43 => 600.0,
44 => 600.0,
45 => 600.0,
173 => 600.0,
46 => 600.0,
47 => 600.0,
48 => 600.0,
49 => 600.0,
50 => 600.0,
51 => 600.0,
52 => 600.0,
53 => 600.0,
54 => 600.0,
55 => 600.0,
56 => 600.0,
57 => 600.0,
58 => 600.0,
59 => 600.0,
60 => 600.0,
61 => 600.0,
62 => 600.0,
63 => 600.0,
64 => 600.0,
65 => 600.0,
66 => 600.0,
67 => 600.0,
68 => 600.0,
69 => 600.0,
70 => 600.0,
71 => 600.0,
72 => 600.0,
73 => 600.0,
74 => 600.0,
75 => 600.0,
76 => 600.0,
77 => 600.0,
78 => 600.0,
79 => 600.0,
80 => 600.0,
81 => 600.0,
82 => 600.0,
83 => 600.0,
84 => 600.0,
85 => 600.0,
86 => 600.0,
87 => 600.0,
88 => 600.0,
89 => 600.0,
90 => 600.0,
91 => 600.0,
92 => 600.0,
93 => 600.0,
94 => 600.0,
95 => 600.0,
145 => 600.0,
97 => 600.0,
98 => 600.0,
99 => 600.0,
100 => 600.0,
101 => 600.0,
102 => 600.0,
103 => 600.0,
104 => 600.0,
105 => 600.0,
106 => 600.0,
107 => 600.0,
108 => 600.0,
109 => 600.0,
110 => 600.0,
111 => 600.0,
112 => 600.0,
113 => 600.0,
114 => 600.0,
115 => 600.0,
116 => 600.0,
117 => 600.0,
118 => 600.0,
119 => 600.0,
120 => 600.0,
121 => 600.0,
122 => 600.0,
123 => 600.0,
124 => 600.0,
125 => 600.0,
126 => 600.0,
161 => 600.0,
162 => 600.0,
163 => 600.0,
'fraction' => 600.0,
165 => 600.0,
131 => 600.0,
167 => 600.0,
164 => 600.0,
39 => 600.0,
147 => 600.0,
171 => 600.0,
139 => 600.0,
155 => 600.0,
'fi' => 600.0,
'fl' => 600.0,
150 => 600.0,
134 => 600.0,
135 => 600.0,
183 => 600.0,
182 => 600.0,
149 => 600.0,
130 => 600.0,
132 => 600.0,
148 => 600.0,
187 => 600.0,
133 => 600.0,
137 => 600.0,
191 => 600.0,
96 => 600.0,
180 => 600.0,
136 => 600.0,
152 => 600.0,
175 => 600.0,
'breve' => 600.0,
'dotaccent' => 600.0,
168 => 600.0,
'ring' => 600.0,
184 => 600.0,
'hungarumlaut' => 600.0,
'ogonek' => 600.0,
'caron' => 600.0,
151 => 600.0,
198 => 600.0,
170 => 600.0,
'Lslash' => 600.0,
216 => 600.0,
140 => 600.0,
186 => 600.0,
230 => 600.0,
'dotlessi' => 600.0,
'lslash' => 600.0,
248 => 600.0,
156 => 600.0,
223 => 600.0,
207 => 600.0,
233 => 600.0,
'abreve' => 600.0,
'uhungarumlaut' => 600.0,
'ecaron' => 600.0,
159 => 600.0,
247 => 600.0,
221 => 600.0,
194 => 600.0,
225 => 600.0,
219 => 600.0,
253 => 600.0,
'scommaaccent' => 600.0,
234 => 600.0,
'Uring' => 600.0,
220 => 600.0,
'aogonek' => 600.0,
218 => 600.0,
'uogonek' => 600.0,
203 => 600.0,
'Dcroat' => 600.0,
'commaaccent' => 600.0,
169 => 600.0,
'Emacron' => 600.0,
'ccaron' => 600.0,
229 => 600.0,
'Ncommaaccent' => 600.0,
'lacute' => 600.0,
224 => 600.0,
'Tcommaaccent' => 600.0,
'Cacute' => 600.0,
227 => 600.0,
'Edotaccent' => 600.0,
154 => 600.0,
'scedilla' => 600.0,
237 => 600.0,
'lozenge' => 600.0,
'Rcaron' => 600.0,
'Gcommaaccent' => 600.0,
251 => 600.0,
226 => 600.0,
'Amacron' => 600.0,
'rcaron' => 600.0,
231 => 600.0,
'Zdotaccent' => 600.0,
222 => 600.0,
'Omacron' => 600.0,
'Racute' => 600.0,
'Sacute' => 600.0,
'dcaron' => 600.0,
'Umacron' => 600.0,
'uring' => 600.0,
179 => 600.0,
210 => 600.0,
192 => 600.0,
'Abreve' => 600.0,
215 => 600.0,
250 => 600.0,
'Tcaron' => 600.0,
'partialdiff' => 600.0,
255 => 600.0,
'Nacute' => 600.0,
238 => 600.0,
202 => 600.0,
228 => 600.0,
235 => 600.0,
'cacute' => 600.0,
'nacute' => 600.0,
'umacron' => 600.0,
'Ncaron' => 600.0,
205 => 600.0,
177 => 600.0,
166 => 600.0,
174 => 600.0,
'Gbreve' => 600.0,
'Idotaccent' => 600.0,
'summation' => 600.0,
200 => 600.0,
'racute' => 600.0,
'omacron' => 600.0,
'Zacute' => 600.0,
142 => 600.0,
'greaterequal' => 600.0,
208 => 600.0,
199 => 600.0,
'lcommaaccent' => 600.0,
'tcaron' => 600.0,
'eogonek' => 600.0,
'Uogonek' => 600.0,
193 => 600.0,
196 => 600.0,
232 => 600.0,
'zacute' => 600.0,
'iogonek' => 600.0,
211 => 600.0,
243 => 600.0,
'amacron' => 600.0,
'sacute' => 600.0,
239 => 600.0,
212 => 600.0,
217 => 600.0,
'Delta' => 600.0,
254 => 600.0,
178 => 600.0,
214 => 600.0,
181 => 600.0,
236 => 600.0,
'ohungarumlaut' => 600.0,
'Eogonek' => 600.0,
'dcroat' => 600.0,
190 => 600.0,
'Scedilla' => 600.0,
'lcaron' => 600.0,
'Kcommaaccent' => 600.0,
'Lacute' => 600.0,
153 => 600.0,
'edotaccent' => 600.0,
204 => 600.0,
'Imacron' => 600.0,
'Lcaron' => 600.0,
189 => 600.0,
'lessequal' => 600.0,
244 => 600.0,
241 => 600.0,
'Uhungarumlaut' => 600.0,
201 => 600.0,
'emacron' => 600.0,
'gbreve' => 600.0,
188 => 600.0,
138 => 600.0,
'Scommaaccent' => 600.0,
'Ohungarumlaut' => 600.0,
176 => 600.0,
242 => 600.0,
'Ccaron' => 600.0,
249 => 600.0,
'radical' => 600.0,
'Dcaron' => 600.0,
'rcommaaccent' => 600.0,
209 => 600.0,
245 => 600.0,
'Rcommaaccent' => 600.0,
'Lcommaaccent' => 600.0,
195 => 600.0,
'Aogonek' => 600.0,
197 => 600.0,
213 => 600.0,
'zdotaccent' => 600.0,
'Ecaron' => 600.0,
'Iogonek' => 600.0,
'kcommaaccent' => 600.0,
'minus' => 600.0,
206 => 600.0,
'ncaron' => 600.0,
'tcommaaccent' => 600.0,
172 => 600.0,
246 => 600.0,
252 => 600.0,
'notequal' => 600.0,
'gcommaaccent' => 600.0,
240 => 600.0,
158 => 600.0,
'ncommaaccent' => 600.0,
185 => 600.0,
'imacron' => 600.0,
128 => 600.0,
),
'CIDtoGID_Compressed' => true,
'CIDtoGID' => 'eJwDAAAAAAE=',
'_version_' => 6,
);
+572
View File
@@ -0,0 +1,572 @@
<?php return array (
'codeToName' =>
array (
32 => 'space',
160 => 'space',
33 => 'exclam',
34 => 'quotedbl',
35 => 'numbersign',
36 => 'dollar',
37 => 'percent',
38 => 'ampersand',
146 => 'quoteright',
40 => 'parenleft',
41 => 'parenright',
42 => 'asterisk',
43 => 'plus',
44 => 'comma',
45 => 'hyphen',
173 => 'hyphen',
46 => 'period',
47 => 'slash',
48 => 'zero',
49 => 'one',
50 => 'two',
51 => 'three',
52 => 'four',
53 => 'five',
54 => 'six',
55 => 'seven',
56 => 'eight',
57 => 'nine',
58 => 'colon',
59 => 'semicolon',
60 => 'less',
61 => 'equal',
62 => 'greater',
63 => 'question',
64 => 'at',
65 => 'A',
66 => 'B',
67 => 'C',
68 => 'D',
69 => 'E',
70 => 'F',
71 => 'G',
72 => 'H',
73 => 'I',
74 => 'J',
75 => 'K',
76 => 'L',
77 => 'M',
78 => 'N',
79 => 'O',
80 => 'P',
81 => 'Q',
82 => 'R',
83 => 'S',
84 => 'T',
85 => 'U',
86 => 'V',
87 => 'W',
88 => 'X',
89 => 'Y',
90 => 'Z',
91 => 'bracketleft',
92 => 'backslash',
93 => 'bracketright',
94 => 'asciicircum',
95 => 'underscore',
145 => 'quoteleft',
97 => 'a',
98 => 'b',
99 => 'c',
100 => 'd',
101 => 'e',
102 => 'f',
103 => 'g',
104 => 'h',
105 => 'i',
106 => 'j',
107 => 'k',
108 => 'l',
109 => 'm',
110 => 'n',
111 => 'o',
112 => 'p',
113 => 'q',
114 => 'r',
115 => 's',
116 => 't',
117 => 'u',
118 => 'v',
119 => 'w',
120 => 'x',
121 => 'y',
122 => 'z',
123 => 'braceleft',
124 => 'bar',
125 => 'braceright',
126 => 'asciitilde',
161 => 'exclamdown',
162 => 'cent',
163 => 'sterling',
165 => 'yen',
131 => 'florin',
167 => 'section',
164 => 'currency',
39 => 'quotesingle',
147 => 'quotedblleft',
171 => 'guillemotleft',
139 => 'guilsinglleft',
155 => 'guilsinglright',
150 => 'endash',
134 => 'dagger',
135 => 'daggerdbl',
183 => 'periodcentered',
182 => 'paragraph',
149 => 'bullet',
130 => 'quotesinglbase',
132 => 'quotedblbase',
148 => 'quotedblright',
187 => 'guillemotright',
133 => 'ellipsis',
137 => 'perthousand',
191 => 'questiondown',
96 => 'grave',
180 => 'acute',
136 => 'circumflex',
152 => 'tilde',
175 => 'macron',
168 => 'dieresis',
184 => 'cedilla',
151 => 'emdash',
198 => 'AE',
170 => 'ordfeminine',
216 => 'Oslash',
140 => 'OE',
186 => 'ordmasculine',
230 => 'ae',
248 => 'oslash',
156 => 'oe',
223 => 'germandbls',
207 => 'Idieresis',
233 => 'eacute',
159 => 'Ydieresis',
247 => 'divide',
221 => 'Yacute',
194 => 'Acircumflex',
225 => 'aacute',
219 => 'Ucircumflex',
253 => 'yacute',
234 => 'ecircumflex',
220 => 'Udieresis',
218 => 'Uacute',
203 => 'Edieresis',
169 => 'copyright',
229 => 'aring',
224 => 'agrave',
227 => 'atilde',
154 => 'scaron',
237 => 'iacute',
251 => 'ucircumflex',
226 => 'acircumflex',
231 => 'ccedilla',
222 => 'Thorn',
179 => 'threesuperior',
210 => 'Ograve',
192 => 'Agrave',
215 => 'multiply',
250 => 'uacute',
255 => 'ydieresis',
238 => 'icircumflex',
202 => 'Ecircumflex',
228 => 'adieresis',
235 => 'edieresis',
205 => 'Iacute',
177 => 'plusminus',
166 => 'brokenbar',
174 => 'registered',
200 => 'Egrave',
142 => 'Zcaron',
208 => 'Eth',
199 => 'Ccedilla',
193 => 'Aacute',
196 => 'Adieresis',
232 => 'egrave',
211 => 'Oacute',
243 => 'oacute',
239 => 'idieresis',
212 => 'Ocircumflex',
217 => 'Ugrave',
254 => 'thorn',
178 => 'twosuperior',
214 => 'Odieresis',
181 => 'mu',
236 => 'igrave',
190 => 'threequarters',
153 => 'trademark',
204 => 'Igrave',
189 => 'onehalf',
244 => 'ocircumflex',
241 => 'ntilde',
201 => 'Eacute',
188 => 'onequarter',
138 => 'Scaron',
176 => 'degree',
242 => 'ograve',
249 => 'ugrave',
209 => 'Ntilde',
245 => 'otilde',
195 => 'Atilde',
197 => 'Aring',
213 => 'Otilde',
206 => 'Icircumflex',
172 => 'logicalnot',
246 => 'odieresis',
252 => 'udieresis',
240 => 'eth',
158 => 'zcaron',
185 => 'onesuperior',
128 => 'Euro',
),
'isUnicode' => false,
'FontName' => 'Courier',
'FullName' => 'Courier',
'FamilyName' => 'Courier',
'Weight' => 'Medium',
'ItalicAngle' => '0',
'IsFixedPitch' => 'true',
'CharacterSet' => 'ExtendedRoman',
'FontBBox' =>
array (
0 => '-23',
1 => '-250',
2 => '715',
3 => '805',
),
'UnderlinePosition' => '-100',
'UnderlineThickness' => '50',
'Version' => '003.000',
'EncodingScheme' => 'WinAnsiEncoding',
'CapHeight' => '562',
'XHeight' => '426',
'Ascender' => '629',
'Descender' => '-157',
'StdHW' => '51',
'StdVW' => '51',
'StartCharMetrics' => '317',
'C' =>
array (
32 => 600.0,
160 => 600.0,
33 => 600.0,
34 => 600.0,
35 => 600.0,
36 => 600.0,
37 => 600.0,
38 => 600.0,
146 => 600.0,
40 => 600.0,
41 => 600.0,
42 => 600.0,
43 => 600.0,
44 => 600.0,
45 => 600.0,
173 => 600.0,
46 => 600.0,
47 => 600.0,
48 => 600.0,
49 => 600.0,
50 => 600.0,
51 => 600.0,
52 => 600.0,
53 => 600.0,
54 => 600.0,
55 => 600.0,
56 => 600.0,
57 => 600.0,
58 => 600.0,
59 => 600.0,
60 => 600.0,
61 => 600.0,
62 => 600.0,
63 => 600.0,
64 => 600.0,
65 => 600.0,
66 => 600.0,
67 => 600.0,
68 => 600.0,
69 => 600.0,
70 => 600.0,
71 => 600.0,
72 => 600.0,
73 => 600.0,
74 => 600.0,
75 => 600.0,
76 => 600.0,
77 => 600.0,
78 => 600.0,
79 => 600.0,
80 => 600.0,
81 => 600.0,
82 => 600.0,
83 => 600.0,
84 => 600.0,
85 => 600.0,
86 => 600.0,
87 => 600.0,
88 => 600.0,
89 => 600.0,
90 => 600.0,
91 => 600.0,
92 => 600.0,
93 => 600.0,
94 => 600.0,
95 => 600.0,
145 => 600.0,
97 => 600.0,
98 => 600.0,
99 => 600.0,
100 => 600.0,
101 => 600.0,
102 => 600.0,
103 => 600.0,
104 => 600.0,
105 => 600.0,
106 => 600.0,
107 => 600.0,
108 => 600.0,
109 => 600.0,
110 => 600.0,
111 => 600.0,
112 => 600.0,
113 => 600.0,
114 => 600.0,
115 => 600.0,
116 => 600.0,
117 => 600.0,
118 => 600.0,
119 => 600.0,
120 => 600.0,
121 => 600.0,
122 => 600.0,
123 => 600.0,
124 => 600.0,
125 => 600.0,
126 => 600.0,
161 => 600.0,
162 => 600.0,
163 => 600.0,
'fraction' => 600.0,
165 => 600.0,
131 => 600.0,
167 => 600.0,
164 => 600.0,
39 => 600.0,
147 => 600.0,
171 => 600.0,
139 => 600.0,
155 => 600.0,
'fi' => 600.0,
'fl' => 600.0,
150 => 600.0,
134 => 600.0,
135 => 600.0,
183 => 600.0,
182 => 600.0,
149 => 600.0,
130 => 600.0,
132 => 600.0,
148 => 600.0,
187 => 600.0,
133 => 600.0,
137 => 600.0,
191 => 600.0,
96 => 600.0,
180 => 600.0,
136 => 600.0,
152 => 600.0,
175 => 600.0,
'breve' => 600.0,
'dotaccent' => 600.0,
168 => 600.0,
'ring' => 600.0,
184 => 600.0,
'hungarumlaut' => 600.0,
'ogonek' => 600.0,
'caron' => 600.0,
151 => 600.0,
198 => 600.0,
170 => 600.0,
'Lslash' => 600.0,
216 => 600.0,
140 => 600.0,
186 => 600.0,
230 => 600.0,
'dotlessi' => 600.0,
'lslash' => 600.0,
248 => 600.0,
156 => 600.0,
223 => 600.0,
207 => 600.0,
233 => 600.0,
'abreve' => 600.0,
'uhungarumlaut' => 600.0,
'ecaron' => 600.0,
159 => 600.0,
247 => 600.0,
221 => 600.0,
194 => 600.0,
225 => 600.0,
219 => 600.0,
253 => 600.0,
'scommaaccent' => 600.0,
234 => 600.0,
'Uring' => 600.0,
220 => 600.0,
'aogonek' => 600.0,
218 => 600.0,
'uogonek' => 600.0,
203 => 600.0,
'Dcroat' => 600.0,
'commaaccent' => 600.0,
169 => 600.0,
'Emacron' => 600.0,
'ccaron' => 600.0,
229 => 600.0,
'Ncommaaccent' => 600.0,
'lacute' => 600.0,
224 => 600.0,
'Tcommaaccent' => 600.0,
'Cacute' => 600.0,
227 => 600.0,
'Edotaccent' => 600.0,
154 => 600.0,
'scedilla' => 600.0,
237 => 600.0,
'lozenge' => 600.0,
'Rcaron' => 600.0,
'Gcommaaccent' => 600.0,
251 => 600.0,
226 => 600.0,
'Amacron' => 600.0,
'rcaron' => 600.0,
231 => 600.0,
'Zdotaccent' => 600.0,
222 => 600.0,
'Omacron' => 600.0,
'Racute' => 600.0,
'Sacute' => 600.0,
'dcaron' => 600.0,
'Umacron' => 600.0,
'uring' => 600.0,
179 => 600.0,
210 => 600.0,
192 => 600.0,
'Abreve' => 600.0,
215 => 600.0,
250 => 600.0,
'Tcaron' => 600.0,
'partialdiff' => 600.0,
255 => 600.0,
'Nacute' => 600.0,
238 => 600.0,
202 => 600.0,
228 => 600.0,
235 => 600.0,
'cacute' => 600.0,
'nacute' => 600.0,
'umacron' => 600.0,
'Ncaron' => 600.0,
205 => 600.0,
177 => 600.0,
166 => 600.0,
174 => 600.0,
'Gbreve' => 600.0,
'Idotaccent' => 600.0,
'summation' => 600.0,
200 => 600.0,
'racute' => 600.0,
'omacron' => 600.0,
'Zacute' => 600.0,
142 => 600.0,
'greaterequal' => 600.0,
208 => 600.0,
199 => 600.0,
'lcommaaccent' => 600.0,
'tcaron' => 600.0,
'eogonek' => 600.0,
'Uogonek' => 600.0,
193 => 600.0,
196 => 600.0,
232 => 600.0,
'zacute' => 600.0,
'iogonek' => 600.0,
211 => 600.0,
243 => 600.0,
'amacron' => 600.0,
'sacute' => 600.0,
239 => 600.0,
212 => 600.0,
217 => 600.0,
'Delta' => 600.0,
254 => 600.0,
178 => 600.0,
214 => 600.0,
181 => 600.0,
236 => 600.0,
'ohungarumlaut' => 600.0,
'Eogonek' => 600.0,
'dcroat' => 600.0,
190 => 600.0,
'Scedilla' => 600.0,
'lcaron' => 600.0,
'Kcommaaccent' => 600.0,
'Lacute' => 600.0,
153 => 600.0,
'edotaccent' => 600.0,
204 => 600.0,
'Imacron' => 600.0,
'Lcaron' => 600.0,
189 => 600.0,
'lessequal' => 600.0,
244 => 600.0,
241 => 600.0,
'Uhungarumlaut' => 600.0,
201 => 600.0,
'emacron' => 600.0,
'gbreve' => 600.0,
188 => 600.0,
138 => 600.0,
'Scommaaccent' => 600.0,
'Ohungarumlaut' => 600.0,
176 => 600.0,
242 => 600.0,
'Ccaron' => 600.0,
249 => 600.0,
'radical' => 600.0,
'Dcaron' => 600.0,
'rcommaaccent' => 600.0,
209 => 600.0,
245 => 600.0,
'Rcommaaccent' => 600.0,
'Lcommaaccent' => 600.0,
195 => 600.0,
'Aogonek' => 600.0,
197 => 600.0,
213 => 600.0,
'zdotaccent' => 600.0,
'Ecaron' => 600.0,
'Iogonek' => 600.0,
'kcommaaccent' => 600.0,
'minus' => 600.0,
206 => 600.0,
'ncaron' => 600.0,
'tcommaaccent' => 600.0,
172 => 600.0,
246 => 600.0,
252 => 600.0,
'notequal' => 600.0,
'gcommaaccent' => 600.0,
240 => 600.0,
158 => 600.0,
'ncommaaccent' => 600.0,
185 => 600.0,
'imacron' => 600.0,
128 => 600.0,
),
'CIDtoGID_Compressed' => true,
'CIDtoGID' => 'eJwDAAAAAAE=',
'_version_' => 6,
);
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
Binary file not shown.
+572
View File
@@ -0,0 +1,572 @@
<?php return array (
'codeToName' =>
array (
32 => 'space',
160 => 'space',
33 => 'exclam',
34 => 'quotedbl',
35 => 'numbersign',
36 => 'dollar',
37 => 'percent',
38 => 'ampersand',
146 => 'quoteright',
40 => 'parenleft',
41 => 'parenright',
42 => 'asterisk',
43 => 'plus',
44 => 'comma',
45 => 'hyphen',
173 => 'hyphen',
46 => 'period',
47 => 'slash',
48 => 'zero',
49 => 'one',
50 => 'two',
51 => 'three',
52 => 'four',
53 => 'five',
54 => 'six',
55 => 'seven',
56 => 'eight',
57 => 'nine',
58 => 'colon',
59 => 'semicolon',
60 => 'less',
61 => 'equal',
62 => 'greater',
63 => 'question',
64 => 'at',
65 => 'A',
66 => 'B',
67 => 'C',
68 => 'D',
69 => 'E',
70 => 'F',
71 => 'G',
72 => 'H',
73 => 'I',
74 => 'J',
75 => 'K',
76 => 'L',
77 => 'M',
78 => 'N',
79 => 'O',
80 => 'P',
81 => 'Q',
82 => 'R',
83 => 'S',
84 => 'T',
85 => 'U',
86 => 'V',
87 => 'W',
88 => 'X',
89 => 'Y',
90 => 'Z',
91 => 'bracketleft',
92 => 'backslash',
93 => 'bracketright',
94 => 'asciicircum',
95 => 'underscore',
145 => 'quoteleft',
97 => 'a',
98 => 'b',
99 => 'c',
100 => 'd',
101 => 'e',
102 => 'f',
103 => 'g',
104 => 'h',
105 => 'i',
106 => 'j',
107 => 'k',
108 => 'l',
109 => 'm',
110 => 'n',
111 => 'o',
112 => 'p',
113 => 'q',
114 => 'r',
115 => 's',
116 => 't',
117 => 'u',
118 => 'v',
119 => 'w',
120 => 'x',
121 => 'y',
122 => 'z',
123 => 'braceleft',
124 => 'bar',
125 => 'braceright',
126 => 'asciitilde',
161 => 'exclamdown',
162 => 'cent',
163 => 'sterling',
165 => 'yen',
131 => 'florin',
167 => 'section',
164 => 'currency',
39 => 'quotesingle',
147 => 'quotedblleft',
171 => 'guillemotleft',
139 => 'guilsinglleft',
155 => 'guilsinglright',
150 => 'endash',
134 => 'dagger',
135 => 'daggerdbl',
183 => 'periodcentered',
182 => 'paragraph',
149 => 'bullet',
130 => 'quotesinglbase',
132 => 'quotedblbase',
148 => 'quotedblright',
187 => 'guillemotright',
133 => 'ellipsis',
137 => 'perthousand',
191 => 'questiondown',
96 => 'grave',
180 => 'acute',
136 => 'circumflex',
152 => 'tilde',
175 => 'macron',
168 => 'dieresis',
184 => 'cedilla',
151 => 'emdash',
198 => 'AE',
170 => 'ordfeminine',
216 => 'Oslash',
140 => 'OE',
186 => 'ordmasculine',
230 => 'ae',
248 => 'oslash',
156 => 'oe',
223 => 'germandbls',
207 => 'Idieresis',
233 => 'eacute',
159 => 'Ydieresis',
247 => 'divide',
221 => 'Yacute',
194 => 'Acircumflex',
225 => 'aacute',
219 => 'Ucircumflex',
253 => 'yacute',
234 => 'ecircumflex',
220 => 'Udieresis',
218 => 'Uacute',
203 => 'Edieresis',
169 => 'copyright',
229 => 'aring',
224 => 'agrave',
227 => 'atilde',
154 => 'scaron',
237 => 'iacute',
251 => 'ucircumflex',
226 => 'acircumflex',
231 => 'ccedilla',
222 => 'Thorn',
179 => 'threesuperior',
210 => 'Ograve',
192 => 'Agrave',
215 => 'multiply',
250 => 'uacute',
255 => 'ydieresis',
238 => 'icircumflex',
202 => 'Ecircumflex',
228 => 'adieresis',
235 => 'edieresis',
205 => 'Iacute',
177 => 'plusminus',
166 => 'brokenbar',
174 => 'registered',
200 => 'Egrave',
142 => 'Zcaron',
208 => 'Eth',
199 => 'Ccedilla',
193 => 'Aacute',
196 => 'Adieresis',
232 => 'egrave',
211 => 'Oacute',
243 => 'oacute',
239 => 'idieresis',
212 => 'Ocircumflex',
217 => 'Ugrave',
254 => 'thorn',
178 => 'twosuperior',
214 => 'Odieresis',
181 => 'mu',
236 => 'igrave',
190 => 'threequarters',
153 => 'trademark',
204 => 'Igrave',
189 => 'onehalf',
244 => 'ocircumflex',
241 => 'ntilde',
201 => 'Eacute',
188 => 'onequarter',
138 => 'Scaron',
176 => 'degree',
242 => 'ograve',
249 => 'ugrave',
209 => 'Ntilde',
245 => 'otilde',
195 => 'Atilde',
197 => 'Aring',
213 => 'Otilde',
206 => 'Icircumflex',
172 => 'logicalnot',
246 => 'odieresis',
252 => 'udieresis',
240 => 'eth',
158 => 'zcaron',
185 => 'onesuperior',
128 => 'Euro',
),
'isUnicode' => false,
'FontName' => 'Helvetica-Bold',
'FullName' => 'Helvetica Bold',
'FamilyName' => 'Helvetica',
'Weight' => 'Bold',
'ItalicAngle' => '0',
'IsFixedPitch' => 'false',
'CharacterSet' => 'ExtendedRoman',
'FontBBox' =>
array (
0 => '-170',
1 => '-228',
2 => '1003',
3 => '962',
),
'UnderlinePosition' => '-100',
'UnderlineThickness' => '50',
'Version' => '002.000',
'EncodingScheme' => 'WinAnsiEncoding',
'CapHeight' => '718',
'XHeight' => '532',
'Ascender' => '718',
'Descender' => '-207',
'StdHW' => '118',
'StdVW' => '140',
'StartCharMetrics' => '317',
'C' =>
array (
32 => 278.0,
160 => 278.0,
33 => 333.0,
34 => 474.0,
35 => 556.0,
36 => 556.0,
37 => 889.0,
38 => 722.0,
146 => 278.0,
40 => 333.0,
41 => 333.0,
42 => 389.0,
43 => 584.0,
44 => 278.0,
45 => 333.0,
173 => 333.0,
46 => 278.0,
47 => 278.0,
48 => 556.0,
49 => 556.0,
50 => 556.0,
51 => 556.0,
52 => 556.0,
53 => 556.0,
54 => 556.0,
55 => 556.0,
56 => 556.0,
57 => 556.0,
58 => 333.0,
59 => 333.0,
60 => 584.0,
61 => 584.0,
62 => 584.0,
63 => 611.0,
64 => 975.0,
65 => 722.0,
66 => 722.0,
67 => 722.0,
68 => 722.0,
69 => 667.0,
70 => 611.0,
71 => 778.0,
72 => 722.0,
73 => 278.0,
74 => 556.0,
75 => 722.0,
76 => 611.0,
77 => 833.0,
78 => 722.0,
79 => 778.0,
80 => 667.0,
81 => 778.0,
82 => 722.0,
83 => 667.0,
84 => 611.0,
85 => 722.0,
86 => 667.0,
87 => 944.0,
88 => 667.0,
89 => 667.0,
90 => 611.0,
91 => 333.0,
92 => 278.0,
93 => 333.0,
94 => 584.0,
95 => 556.0,
145 => 278.0,
97 => 556.0,
98 => 611.0,
99 => 556.0,
100 => 611.0,
101 => 556.0,
102 => 333.0,
103 => 611.0,
104 => 611.0,
105 => 278.0,
106 => 278.0,
107 => 556.0,
108 => 278.0,
109 => 889.0,
110 => 611.0,
111 => 611.0,
112 => 611.0,
113 => 611.0,
114 => 389.0,
115 => 556.0,
116 => 333.0,
117 => 611.0,
118 => 556.0,
119 => 778.0,
120 => 556.0,
121 => 556.0,
122 => 500.0,
123 => 389.0,
124 => 280.0,
125 => 389.0,
126 => 584.0,
161 => 333.0,
162 => 556.0,
163 => 556.0,
'fraction' => 167.0,
165 => 556.0,
131 => 556.0,
167 => 556.0,
164 => 556.0,
39 => 238.0,
147 => 500.0,
171 => 556.0,
139 => 333.0,
155 => 333.0,
'fi' => 611.0,
'fl' => 611.0,
150 => 556.0,
134 => 556.0,
135 => 556.0,
183 => 278.0,
182 => 556.0,
149 => 350.0,
130 => 278.0,
132 => 500.0,
148 => 500.0,
187 => 556.0,
133 => 1000.0,
137 => 1000.0,
191 => 611.0,
96 => 333.0,
180 => 333.0,
136 => 333.0,
152 => 333.0,
175 => 333.0,
'breve' => 333.0,
'dotaccent' => 333.0,
168 => 333.0,
'ring' => 333.0,
184 => 333.0,
'hungarumlaut' => 333.0,
'ogonek' => 333.0,
'caron' => 333.0,
151 => 1000.0,
198 => 1000.0,
170 => 370.0,
'Lslash' => 611.0,
216 => 778.0,
140 => 1000.0,
186 => 365.0,
230 => 889.0,
'dotlessi' => 278.0,
'lslash' => 278.0,
248 => 611.0,
156 => 944.0,
223 => 611.0,
207 => 278.0,
233 => 556.0,
'abreve' => 556.0,
'uhungarumlaut' => 611.0,
'ecaron' => 556.0,
159 => 667.0,
247 => 584.0,
221 => 667.0,
194 => 722.0,
225 => 556.0,
219 => 722.0,
253 => 556.0,
'scommaaccent' => 556.0,
234 => 556.0,
'Uring' => 722.0,
220 => 722.0,
'aogonek' => 556.0,
218 => 722.0,
'uogonek' => 611.0,
203 => 667.0,
'Dcroat' => 722.0,
'commaaccent' => 250.0,
169 => 737.0,
'Emacron' => 667.0,
'ccaron' => 556.0,
229 => 556.0,
'Ncommaaccent' => 722.0,
'lacute' => 278.0,
224 => 556.0,
'Tcommaaccent' => 611.0,
'Cacute' => 722.0,
227 => 556.0,
'Edotaccent' => 667.0,
154 => 556.0,
'scedilla' => 556.0,
237 => 278.0,
'lozenge' => 494.0,
'Rcaron' => 722.0,
'Gcommaaccent' => 778.0,
251 => 611.0,
226 => 556.0,
'Amacron' => 722.0,
'rcaron' => 389.0,
231 => 556.0,
'Zdotaccent' => 611.0,
222 => 667.0,
'Omacron' => 778.0,
'Racute' => 722.0,
'Sacute' => 667.0,
'dcaron' => 743.0,
'Umacron' => 722.0,
'uring' => 611.0,
179 => 333.0,
210 => 778.0,
192 => 722.0,
'Abreve' => 722.0,
215 => 584.0,
250 => 611.0,
'Tcaron' => 611.0,
'partialdiff' => 494.0,
255 => 556.0,
'Nacute' => 722.0,
238 => 278.0,
202 => 667.0,
228 => 556.0,
235 => 556.0,
'cacute' => 556.0,
'nacute' => 611.0,
'umacron' => 611.0,
'Ncaron' => 722.0,
205 => 278.0,
177 => 584.0,
166 => 280.0,
174 => 737.0,
'Gbreve' => 778.0,
'Idotaccent' => 278.0,
'summation' => 600.0,
200 => 667.0,
'racute' => 389.0,
'omacron' => 611.0,
'Zacute' => 611.0,
142 => 611.0,
'greaterequal' => 549.0,
208 => 722.0,
199 => 722.0,
'lcommaaccent' => 278.0,
'tcaron' => 389.0,
'eogonek' => 556.0,
'Uogonek' => 722.0,
193 => 722.0,
196 => 722.0,
232 => 556.0,
'zacute' => 500.0,
'iogonek' => 278.0,
211 => 778.0,
243 => 611.0,
'amacron' => 556.0,
'sacute' => 556.0,
239 => 278.0,
212 => 778.0,
217 => 722.0,
'Delta' => 612.0,
254 => 611.0,
178 => 333.0,
214 => 778.0,
181 => 611.0,
236 => 278.0,
'ohungarumlaut' => 611.0,
'Eogonek' => 667.0,
'dcroat' => 611.0,
190 => 834.0,
'Scedilla' => 667.0,
'lcaron' => 400.0,
'Kcommaaccent' => 722.0,
'Lacute' => 611.0,
153 => 1000.0,
'edotaccent' => 556.0,
204 => 278.0,
'Imacron' => 278.0,
'Lcaron' => 611.0,
189 => 834.0,
'lessequal' => 549.0,
244 => 611.0,
241 => 611.0,
'Uhungarumlaut' => 722.0,
201 => 667.0,
'emacron' => 556.0,
'gbreve' => 611.0,
188 => 834.0,
138 => 667.0,
'Scommaaccent' => 667.0,
'Ohungarumlaut' => 778.0,
176 => 400.0,
242 => 611.0,
'Ccaron' => 722.0,
249 => 611.0,
'radical' => 549.0,
'Dcaron' => 722.0,
'rcommaaccent' => 389.0,
209 => 722.0,
245 => 611.0,
'Rcommaaccent' => 722.0,
'Lcommaaccent' => 611.0,
195 => 722.0,
'Aogonek' => 722.0,
197 => 722.0,
213 => 778.0,
'zdotaccent' => 500.0,
'Ecaron' => 667.0,
'Iogonek' => 278.0,
'kcommaaccent' => 556.0,
'minus' => 584.0,
206 => 278.0,
'ncaron' => 611.0,
'tcommaaccent' => 333.0,
172 => 584.0,
246 => 611.0,
252 => 611.0,
'notequal' => 549.0,
'gcommaaccent' => 611.0,
240 => 611.0,
158 => 500.0,
'ncommaaccent' => 611.0,
185 => 333.0,
'imacron' => 278.0,
128 => 556.0,
),
'CIDtoGID_Compressed' => true,
'CIDtoGID' => 'eJwDAAAAAAE=',
'_version_' => 6,
);
+572
View File
@@ -0,0 +1,572 @@
<?php return array (
'codeToName' =>
array (
32 => 'space',
160 => 'space',
33 => 'exclam',
34 => 'quotedbl',
35 => 'numbersign',
36 => 'dollar',
37 => 'percent',
38 => 'ampersand',
146 => 'quoteright',
40 => 'parenleft',
41 => 'parenright',
42 => 'asterisk',
43 => 'plus',
44 => 'comma',
45 => 'hyphen',
173 => 'hyphen',
46 => 'period',
47 => 'slash',
48 => 'zero',
49 => 'one',
50 => 'two',
51 => 'three',
52 => 'four',
53 => 'five',
54 => 'six',
55 => 'seven',
56 => 'eight',
57 => 'nine',
58 => 'colon',
59 => 'semicolon',
60 => 'less',
61 => 'equal',
62 => 'greater',
63 => 'question',
64 => 'at',
65 => 'A',
66 => 'B',
67 => 'C',
68 => 'D',
69 => 'E',
70 => 'F',
71 => 'G',
72 => 'H',
73 => 'I',
74 => 'J',
75 => 'K',
76 => 'L',
77 => 'M',
78 => 'N',
79 => 'O',
80 => 'P',
81 => 'Q',
82 => 'R',
83 => 'S',
84 => 'T',
85 => 'U',
86 => 'V',
87 => 'W',
88 => 'X',
89 => 'Y',
90 => 'Z',
91 => 'bracketleft',
92 => 'backslash',
93 => 'bracketright',
94 => 'asciicircum',
95 => 'underscore',
145 => 'quoteleft',
97 => 'a',
98 => 'b',
99 => 'c',
100 => 'd',
101 => 'e',
102 => 'f',
103 => 'g',
104 => 'h',
105 => 'i',
106 => 'j',
107 => 'k',
108 => 'l',
109 => 'm',
110 => 'n',
111 => 'o',
112 => 'p',
113 => 'q',
114 => 'r',
115 => 's',
116 => 't',
117 => 'u',
118 => 'v',
119 => 'w',
120 => 'x',
121 => 'y',
122 => 'z',
123 => 'braceleft',
124 => 'bar',
125 => 'braceright',
126 => 'asciitilde',
161 => 'exclamdown',
162 => 'cent',
163 => 'sterling',
165 => 'yen',
131 => 'florin',
167 => 'section',
164 => 'currency',
39 => 'quotesingle',
147 => 'quotedblleft',
171 => 'guillemotleft',
139 => 'guilsinglleft',
155 => 'guilsinglright',
150 => 'endash',
134 => 'dagger',
135 => 'daggerdbl',
183 => 'periodcentered',
182 => 'paragraph',
149 => 'bullet',
130 => 'quotesinglbase',
132 => 'quotedblbase',
148 => 'quotedblright',
187 => 'guillemotright',
133 => 'ellipsis',
137 => 'perthousand',
191 => 'questiondown',
96 => 'grave',
180 => 'acute',
136 => 'circumflex',
152 => 'tilde',
175 => 'macron',
168 => 'dieresis',
184 => 'cedilla',
151 => 'emdash',
198 => 'AE',
170 => 'ordfeminine',
216 => 'Oslash',
140 => 'OE',
186 => 'ordmasculine',
230 => 'ae',
248 => 'oslash',
156 => 'oe',
223 => 'germandbls',
207 => 'Idieresis',
233 => 'eacute',
159 => 'Ydieresis',
247 => 'divide',
221 => 'Yacute',
194 => 'Acircumflex',
225 => 'aacute',
219 => 'Ucircumflex',
253 => 'yacute',
234 => 'ecircumflex',
220 => 'Udieresis',
218 => 'Uacute',
203 => 'Edieresis',
169 => 'copyright',
229 => 'aring',
224 => 'agrave',
227 => 'atilde',
154 => 'scaron',
237 => 'iacute',
251 => 'ucircumflex',
226 => 'acircumflex',
231 => 'ccedilla',
222 => 'Thorn',
179 => 'threesuperior',
210 => 'Ograve',
192 => 'Agrave',
215 => 'multiply',
250 => 'uacute',
255 => 'ydieresis',
238 => 'icircumflex',
202 => 'Ecircumflex',
228 => 'adieresis',
235 => 'edieresis',
205 => 'Iacute',
177 => 'plusminus',
166 => 'brokenbar',
174 => 'registered',
200 => 'Egrave',
142 => 'Zcaron',
208 => 'Eth',
199 => 'Ccedilla',
193 => 'Aacute',
196 => 'Adieresis',
232 => 'egrave',
211 => 'Oacute',
243 => 'oacute',
239 => 'idieresis',
212 => 'Ocircumflex',
217 => 'Ugrave',
254 => 'thorn',
178 => 'twosuperior',
214 => 'Odieresis',
181 => 'mu',
236 => 'igrave',
190 => 'threequarters',
153 => 'trademark',
204 => 'Igrave',
189 => 'onehalf',
244 => 'ocircumflex',
241 => 'ntilde',
201 => 'Eacute',
188 => 'onequarter',
138 => 'Scaron',
176 => 'degree',
242 => 'ograve',
249 => 'ugrave',
209 => 'Ntilde',
245 => 'otilde',
195 => 'Atilde',
197 => 'Aring',
213 => 'Otilde',
206 => 'Icircumflex',
172 => 'logicalnot',
246 => 'odieresis',
252 => 'udieresis',
240 => 'eth',
158 => 'zcaron',
185 => 'onesuperior',
128 => 'Euro',
),
'isUnicode' => false,
'FontName' => 'Helvetica',
'FullName' => 'Helvetica',
'FamilyName' => 'Helvetica',
'Weight' => 'Medium',
'ItalicAngle' => '0',
'IsFixedPitch' => 'false',
'CharacterSet' => 'ExtendedRoman',
'FontBBox' =>
array (
0 => '-166',
1 => '-225',
2 => '1000',
3 => '931',
),
'UnderlinePosition' => '-100',
'UnderlineThickness' => '50',
'Version' => '002.000',
'EncodingScheme' => 'WinAnsiEncoding',
'CapHeight' => '718',
'XHeight' => '523',
'Ascender' => '718',
'Descender' => '-207',
'StdHW' => '76',
'StdVW' => '88',
'StartCharMetrics' => '317',
'C' =>
array (
32 => 278.0,
160 => 278.0,
33 => 278.0,
34 => 355.0,
35 => 556.0,
36 => 556.0,
37 => 889.0,
38 => 667.0,
146 => 222.0,
40 => 333.0,
41 => 333.0,
42 => 389.0,
43 => 584.0,
44 => 278.0,
45 => 333.0,
173 => 333.0,
46 => 278.0,
47 => 278.0,
48 => 556.0,
49 => 556.0,
50 => 556.0,
51 => 556.0,
52 => 556.0,
53 => 556.0,
54 => 556.0,
55 => 556.0,
56 => 556.0,
57 => 556.0,
58 => 278.0,
59 => 278.0,
60 => 584.0,
61 => 584.0,
62 => 584.0,
63 => 556.0,
64 => 1015.0,
65 => 667.0,
66 => 667.0,
67 => 722.0,
68 => 722.0,
69 => 667.0,
70 => 611.0,
71 => 778.0,
72 => 722.0,
73 => 278.0,
74 => 500.0,
75 => 667.0,
76 => 556.0,
77 => 833.0,
78 => 722.0,
79 => 778.0,
80 => 667.0,
81 => 778.0,
82 => 722.0,
83 => 667.0,
84 => 611.0,
85 => 722.0,
86 => 667.0,
87 => 944.0,
88 => 667.0,
89 => 667.0,
90 => 611.0,
91 => 278.0,
92 => 278.0,
93 => 278.0,
94 => 469.0,
95 => 556.0,
145 => 222.0,
97 => 556.0,
98 => 556.0,
99 => 500.0,
100 => 556.0,
101 => 556.0,
102 => 278.0,
103 => 556.0,
104 => 556.0,
105 => 222.0,
106 => 222.0,
107 => 500.0,
108 => 222.0,
109 => 833.0,
110 => 556.0,
111 => 556.0,
112 => 556.0,
113 => 556.0,
114 => 333.0,
115 => 500.0,
116 => 278.0,
117 => 556.0,
118 => 500.0,
119 => 722.0,
120 => 500.0,
121 => 500.0,
122 => 500.0,
123 => 334.0,
124 => 260.0,
125 => 334.0,
126 => 584.0,
161 => 333.0,
162 => 556.0,
163 => 556.0,
'fraction' => 167.0,
165 => 556.0,
131 => 556.0,
167 => 556.0,
164 => 556.0,
39 => 191.0,
147 => 333.0,
171 => 556.0,
139 => 333.0,
155 => 333.0,
'fi' => 500.0,
'fl' => 500.0,
150 => 556.0,
134 => 556.0,
135 => 556.0,
183 => 278.0,
182 => 537.0,
149 => 350.0,
130 => 222.0,
132 => 333.0,
148 => 333.0,
187 => 556.0,
133 => 1000.0,
137 => 1000.0,
191 => 611.0,
96 => 333.0,
180 => 333.0,
136 => 333.0,
152 => 333.0,
175 => 333.0,
'breve' => 333.0,
'dotaccent' => 333.0,
168 => 333.0,
'ring' => 333.0,
184 => 333.0,
'hungarumlaut' => 333.0,
'ogonek' => 333.0,
'caron' => 333.0,
151 => 1000.0,
198 => 1000.0,
170 => 370.0,
'Lslash' => 556.0,
216 => 778.0,
140 => 1000.0,
186 => 365.0,
230 => 889.0,
'dotlessi' => 278.0,
'lslash' => 222.0,
248 => 611.0,
156 => 944.0,
223 => 611.0,
207 => 278.0,
233 => 556.0,
'abreve' => 556.0,
'uhungarumlaut' => 556.0,
'ecaron' => 556.0,
159 => 667.0,
247 => 584.0,
221 => 667.0,
194 => 667.0,
225 => 556.0,
219 => 722.0,
253 => 500.0,
'scommaaccent' => 500.0,
234 => 556.0,
'Uring' => 722.0,
220 => 722.0,
'aogonek' => 556.0,
218 => 722.0,
'uogonek' => 556.0,
203 => 667.0,
'Dcroat' => 722.0,
'commaaccent' => 250.0,
169 => 737.0,
'Emacron' => 667.0,
'ccaron' => 500.0,
229 => 556.0,
'Ncommaaccent' => 722.0,
'lacute' => 222.0,
224 => 556.0,
'Tcommaaccent' => 611.0,
'Cacute' => 722.0,
227 => 556.0,
'Edotaccent' => 667.0,
154 => 500.0,
'scedilla' => 500.0,
237 => 278.0,
'lozenge' => 471.0,
'Rcaron' => 722.0,
'Gcommaaccent' => 778.0,
251 => 556.0,
226 => 556.0,
'Amacron' => 667.0,
'rcaron' => 333.0,
231 => 500.0,
'Zdotaccent' => 611.0,
222 => 667.0,
'Omacron' => 778.0,
'Racute' => 722.0,
'Sacute' => 667.0,
'dcaron' => 643.0,
'Umacron' => 722.0,
'uring' => 556.0,
179 => 333.0,
210 => 778.0,
192 => 667.0,
'Abreve' => 667.0,
215 => 584.0,
250 => 556.0,
'Tcaron' => 611.0,
'partialdiff' => 476.0,
255 => 500.0,
'Nacute' => 722.0,
238 => 278.0,
202 => 667.0,
228 => 556.0,
235 => 556.0,
'cacute' => 500.0,
'nacute' => 556.0,
'umacron' => 556.0,
'Ncaron' => 722.0,
205 => 278.0,
177 => 584.0,
166 => 260.0,
174 => 737.0,
'Gbreve' => 778.0,
'Idotaccent' => 278.0,
'summation' => 600.0,
200 => 667.0,
'racute' => 333.0,
'omacron' => 556.0,
'Zacute' => 611.0,
142 => 611.0,
'greaterequal' => 549.0,
208 => 722.0,
199 => 722.0,
'lcommaaccent' => 222.0,
'tcaron' => 317.0,
'eogonek' => 556.0,
'Uogonek' => 722.0,
193 => 667.0,
196 => 667.0,
232 => 556.0,
'zacute' => 500.0,
'iogonek' => 222.0,
211 => 778.0,
243 => 556.0,
'amacron' => 556.0,
'sacute' => 500.0,
239 => 278.0,
212 => 778.0,
217 => 722.0,
'Delta' => 612.0,
254 => 556.0,
178 => 333.0,
214 => 778.0,
181 => 556.0,
236 => 278.0,
'ohungarumlaut' => 556.0,
'Eogonek' => 667.0,
'dcroat' => 556.0,
190 => 834.0,
'Scedilla' => 667.0,
'lcaron' => 299.0,
'Kcommaaccent' => 667.0,
'Lacute' => 556.0,
153 => 1000.0,
'edotaccent' => 556.0,
204 => 278.0,
'Imacron' => 278.0,
'Lcaron' => 556.0,
189 => 834.0,
'lessequal' => 549.0,
244 => 556.0,
241 => 556.0,
'Uhungarumlaut' => 722.0,
201 => 667.0,
'emacron' => 556.0,
'gbreve' => 556.0,
188 => 834.0,
138 => 667.0,
'Scommaaccent' => 667.0,
'Ohungarumlaut' => 778.0,
176 => 400.0,
242 => 556.0,
'Ccaron' => 722.0,
249 => 556.0,
'radical' => 453.0,
'Dcaron' => 722.0,
'rcommaaccent' => 333.0,
209 => 722.0,
245 => 556.0,
'Rcommaaccent' => 722.0,
'Lcommaaccent' => 556.0,
195 => 667.0,
'Aogonek' => 667.0,
197 => 667.0,
213 => 778.0,
'zdotaccent' => 500.0,
'Ecaron' => 667.0,
'Iogonek' => 278.0,
'kcommaaccent' => 500.0,
'minus' => 584.0,
206 => 278.0,
'ncaron' => 556.0,
'tcommaaccent' => 278.0,
172 => 584.0,
246 => 556.0,
252 => 556.0,
'notequal' => 549.0,
'gcommaaccent' => 556.0,
240 => 556.0,
158 => 500.0,
'ncommaaccent' => 556.0,
185 => 333.0,
'imacron' => 278.0,
128 => 556.0,
),
'CIDtoGID_Compressed' => true,
'CIDtoGID' => 'eJwDAAAAAAE=',
'_version_' => 6,
);
Binary file not shown.
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
+572
View File
@@ -0,0 +1,572 @@
<?php return array (
'codeToName' =>
array (
32 => 'space',
160 => 'space',
33 => 'exclam',
34 => 'quotedbl',
35 => 'numbersign',
36 => 'dollar',
37 => 'percent',
38 => 'ampersand',
146 => 'quoteright',
40 => 'parenleft',
41 => 'parenright',
42 => 'asterisk',
43 => 'plus',
44 => 'comma',
45 => 'hyphen',
173 => 'hyphen',
46 => 'period',
47 => 'slash',
48 => 'zero',
49 => 'one',
50 => 'two',
51 => 'three',
52 => 'four',
53 => 'five',
54 => 'six',
55 => 'seven',
56 => 'eight',
57 => 'nine',
58 => 'colon',
59 => 'semicolon',
60 => 'less',
61 => 'equal',
62 => 'greater',
63 => 'question',
64 => 'at',
65 => 'A',
66 => 'B',
67 => 'C',
68 => 'D',
69 => 'E',
70 => 'F',
71 => 'G',
72 => 'H',
73 => 'I',
74 => 'J',
75 => 'K',
76 => 'L',
77 => 'M',
78 => 'N',
79 => 'O',
80 => 'P',
81 => 'Q',
82 => 'R',
83 => 'S',
84 => 'T',
85 => 'U',
86 => 'V',
87 => 'W',
88 => 'X',
89 => 'Y',
90 => 'Z',
91 => 'bracketleft',
92 => 'backslash',
93 => 'bracketright',
94 => 'asciicircum',
95 => 'underscore',
145 => 'quoteleft',
97 => 'a',
98 => 'b',
99 => 'c',
100 => 'd',
101 => 'e',
102 => 'f',
103 => 'g',
104 => 'h',
105 => 'i',
106 => 'j',
107 => 'k',
108 => 'l',
109 => 'm',
110 => 'n',
111 => 'o',
112 => 'p',
113 => 'q',
114 => 'r',
115 => 's',
116 => 't',
117 => 'u',
118 => 'v',
119 => 'w',
120 => 'x',
121 => 'y',
122 => 'z',
123 => 'braceleft',
124 => 'bar',
125 => 'braceright',
126 => 'asciitilde',
161 => 'exclamdown',
162 => 'cent',
163 => 'sterling',
165 => 'yen',
131 => 'florin',
167 => 'section',
164 => 'currency',
39 => 'quotesingle',
147 => 'quotedblleft',
171 => 'guillemotleft',
139 => 'guilsinglleft',
155 => 'guilsinglright',
150 => 'endash',
134 => 'dagger',
135 => 'daggerdbl',
183 => 'periodcentered',
182 => 'paragraph',
149 => 'bullet',
130 => 'quotesinglbase',
132 => 'quotedblbase',
148 => 'quotedblright',
187 => 'guillemotright',
133 => 'ellipsis',
137 => 'perthousand',
191 => 'questiondown',
96 => 'grave',
180 => 'acute',
136 => 'circumflex',
152 => 'tilde',
175 => 'macron',
168 => 'dieresis',
184 => 'cedilla',
151 => 'emdash',
198 => 'AE',
170 => 'ordfeminine',
216 => 'Oslash',
140 => 'OE',
186 => 'ordmasculine',
230 => 'ae',
248 => 'oslash',
156 => 'oe',
223 => 'germandbls',
207 => 'Idieresis',
233 => 'eacute',
159 => 'Ydieresis',
247 => 'divide',
221 => 'Yacute',
194 => 'Acircumflex',
225 => 'aacute',
219 => 'Ucircumflex',
253 => 'yacute',
234 => 'ecircumflex',
220 => 'Udieresis',
218 => 'Uacute',
203 => 'Edieresis',
169 => 'copyright',
229 => 'aring',
224 => 'agrave',
227 => 'atilde',
154 => 'scaron',
237 => 'iacute',
251 => 'ucircumflex',
226 => 'acircumflex',
231 => 'ccedilla',
222 => 'Thorn',
179 => 'threesuperior',
210 => 'Ograve',
192 => 'Agrave',
215 => 'multiply',
250 => 'uacute',
255 => 'ydieresis',
238 => 'icircumflex',
202 => 'Ecircumflex',
228 => 'adieresis',
235 => 'edieresis',
205 => 'Iacute',
177 => 'plusminus',
166 => 'brokenbar',
174 => 'registered',
200 => 'Egrave',
142 => 'Zcaron',
208 => 'Eth',
199 => 'Ccedilla',
193 => 'Aacute',
196 => 'Adieresis',
232 => 'egrave',
211 => 'Oacute',
243 => 'oacute',
239 => 'idieresis',
212 => 'Ocircumflex',
217 => 'Ugrave',
254 => 'thorn',
178 => 'twosuperior',
214 => 'Odieresis',
181 => 'mu',
236 => 'igrave',
190 => 'threequarters',
153 => 'trademark',
204 => 'Igrave',
189 => 'onehalf',
244 => 'ocircumflex',
241 => 'ntilde',
201 => 'Eacute',
188 => 'onequarter',
138 => 'Scaron',
176 => 'degree',
242 => 'ograve',
249 => 'ugrave',
209 => 'Ntilde',
245 => 'otilde',
195 => 'Atilde',
197 => 'Aring',
213 => 'Otilde',
206 => 'Icircumflex',
172 => 'logicalnot',
246 => 'odieresis',
252 => 'udieresis',
240 => 'eth',
158 => 'zcaron',
185 => 'onesuperior',
128 => 'Euro',
),
'isUnicode' => false,
'FontName' => 'Times-Bold',
'FullName' => 'Times Bold',
'FamilyName' => 'Times',
'Weight' => 'Bold',
'ItalicAngle' => '0',
'IsFixedPitch' => 'false',
'CharacterSet' => 'ExtendedRoman',
'FontBBox' =>
array (
0 => '-168',
1 => '-218',
2 => '1000',
3 => '935',
),
'UnderlinePosition' => '-100',
'UnderlineThickness' => '50',
'Version' => '002.000',
'EncodingScheme' => 'WinAnsiEncoding',
'CapHeight' => '676',
'XHeight' => '461',
'Ascender' => '683',
'Descender' => '-217',
'StdHW' => '44',
'StdVW' => '139',
'StartCharMetrics' => '317',
'C' =>
array (
32 => 250.0,
160 => 250.0,
33 => 333.0,
34 => 555.0,
35 => 500.0,
36 => 500.0,
37 => 1000.0,
38 => 833.0,
146 => 333.0,
40 => 333.0,
41 => 333.0,
42 => 500.0,
43 => 570.0,
44 => 250.0,
45 => 333.0,
173 => 333.0,
46 => 250.0,
47 => 278.0,
48 => 500.0,
49 => 500.0,
50 => 500.0,
51 => 500.0,
52 => 500.0,
53 => 500.0,
54 => 500.0,
55 => 500.0,
56 => 500.0,
57 => 500.0,
58 => 333.0,
59 => 333.0,
60 => 570.0,
61 => 570.0,
62 => 570.0,
63 => 500.0,
64 => 930.0,
65 => 722.0,
66 => 667.0,
67 => 722.0,
68 => 722.0,
69 => 667.0,
70 => 611.0,
71 => 778.0,
72 => 778.0,
73 => 389.0,
74 => 500.0,
75 => 778.0,
76 => 667.0,
77 => 944.0,
78 => 722.0,
79 => 778.0,
80 => 611.0,
81 => 778.0,
82 => 722.0,
83 => 556.0,
84 => 667.0,
85 => 722.0,
86 => 722.0,
87 => 1000.0,
88 => 722.0,
89 => 722.0,
90 => 667.0,
91 => 333.0,
92 => 278.0,
93 => 333.0,
94 => 581.0,
95 => 500.0,
145 => 333.0,
97 => 500.0,
98 => 556.0,
99 => 444.0,
100 => 556.0,
101 => 444.0,
102 => 333.0,
103 => 500.0,
104 => 556.0,
105 => 278.0,
106 => 333.0,
107 => 556.0,
108 => 278.0,
109 => 833.0,
110 => 556.0,
111 => 500.0,
112 => 556.0,
113 => 556.0,
114 => 444.0,
115 => 389.0,
116 => 333.0,
117 => 556.0,
118 => 500.0,
119 => 722.0,
120 => 500.0,
121 => 500.0,
122 => 444.0,
123 => 394.0,
124 => 220.0,
125 => 394.0,
126 => 520.0,
161 => 333.0,
162 => 500.0,
163 => 500.0,
'fraction' => 167.0,
165 => 500.0,
131 => 500.0,
167 => 500.0,
164 => 500.0,
39 => 278.0,
147 => 500.0,
171 => 500.0,
139 => 333.0,
155 => 333.0,
'fi' => 556.0,
'fl' => 556.0,
150 => 500.0,
134 => 500.0,
135 => 500.0,
183 => 250.0,
182 => 540.0,
149 => 350.0,
130 => 333.0,
132 => 500.0,
148 => 500.0,
187 => 500.0,
133 => 1000.0,
137 => 1000.0,
191 => 500.0,
96 => 333.0,
180 => 333.0,
136 => 333.0,
152 => 333.0,
175 => 333.0,
'breve' => 333.0,
'dotaccent' => 333.0,
168 => 333.0,
'ring' => 333.0,
184 => 333.0,
'hungarumlaut' => 333.0,
'ogonek' => 333.0,
'caron' => 333.0,
151 => 1000.0,
198 => 1000.0,
170 => 300.0,
'Lslash' => 667.0,
216 => 778.0,
140 => 1000.0,
186 => 330.0,
230 => 722.0,
'dotlessi' => 278.0,
'lslash' => 278.0,
248 => 500.0,
156 => 722.0,
223 => 556.0,
207 => 389.0,
233 => 444.0,
'abreve' => 500.0,
'uhungarumlaut' => 556.0,
'ecaron' => 444.0,
159 => 722.0,
247 => 570.0,
221 => 722.0,
194 => 722.0,
225 => 500.0,
219 => 722.0,
253 => 500.0,
'scommaaccent' => 389.0,
234 => 444.0,
'Uring' => 722.0,
220 => 722.0,
'aogonek' => 500.0,
218 => 722.0,
'uogonek' => 556.0,
203 => 667.0,
'Dcroat' => 722.0,
'commaaccent' => 250.0,
169 => 747.0,
'Emacron' => 667.0,
'ccaron' => 444.0,
229 => 500.0,
'Ncommaaccent' => 722.0,
'lacute' => 278.0,
224 => 500.0,
'Tcommaaccent' => 667.0,
'Cacute' => 722.0,
227 => 500.0,
'Edotaccent' => 667.0,
154 => 389.0,
'scedilla' => 389.0,
237 => 278.0,
'lozenge' => 494.0,
'Rcaron' => 722.0,
'Gcommaaccent' => 778.0,
251 => 556.0,
226 => 500.0,
'Amacron' => 722.0,
'rcaron' => 444.0,
231 => 444.0,
'Zdotaccent' => 667.0,
222 => 611.0,
'Omacron' => 778.0,
'Racute' => 722.0,
'Sacute' => 556.0,
'dcaron' => 672.0,
'Umacron' => 722.0,
'uring' => 556.0,
179 => 300.0,
210 => 778.0,
192 => 722.0,
'Abreve' => 722.0,
215 => 570.0,
250 => 556.0,
'Tcaron' => 667.0,
'partialdiff' => 494.0,
255 => 500.0,
'Nacute' => 722.0,
238 => 278.0,
202 => 667.0,
228 => 500.0,
235 => 444.0,
'cacute' => 444.0,
'nacute' => 556.0,
'umacron' => 556.0,
'Ncaron' => 722.0,
205 => 389.0,
177 => 570.0,
166 => 220.0,
174 => 747.0,
'Gbreve' => 778.0,
'Idotaccent' => 389.0,
'summation' => 600.0,
200 => 667.0,
'racute' => 444.0,
'omacron' => 500.0,
'Zacute' => 667.0,
142 => 667.0,
'greaterequal' => 549.0,
208 => 722.0,
199 => 722.0,
'lcommaaccent' => 278.0,
'tcaron' => 416.0,
'eogonek' => 444.0,
'Uogonek' => 722.0,
193 => 722.0,
196 => 722.0,
232 => 444.0,
'zacute' => 444.0,
'iogonek' => 278.0,
211 => 778.0,
243 => 500.0,
'amacron' => 500.0,
'sacute' => 389.0,
239 => 278.0,
212 => 778.0,
217 => 722.0,
'Delta' => 612.0,
254 => 556.0,
178 => 300.0,
214 => 778.0,
181 => 556.0,
236 => 278.0,
'ohungarumlaut' => 500.0,
'Eogonek' => 667.0,
'dcroat' => 556.0,
190 => 750.0,
'Scedilla' => 556.0,
'lcaron' => 394.0,
'Kcommaaccent' => 778.0,
'Lacute' => 667.0,
153 => 1000.0,
'edotaccent' => 444.0,
204 => 389.0,
'Imacron' => 389.0,
'Lcaron' => 667.0,
189 => 750.0,
'lessequal' => 549.0,
244 => 500.0,
241 => 556.0,
'Uhungarumlaut' => 722.0,
201 => 667.0,
'emacron' => 444.0,
'gbreve' => 500.0,
188 => 750.0,
138 => 556.0,
'Scommaaccent' => 556.0,
'Ohungarumlaut' => 778.0,
176 => 400.0,
242 => 500.0,
'Ccaron' => 722.0,
249 => 556.0,
'radical' => 549.0,
'Dcaron' => 722.0,
'rcommaaccent' => 444.0,
209 => 722.0,
245 => 500.0,
'Rcommaaccent' => 722.0,
'Lcommaaccent' => 667.0,
195 => 722.0,
'Aogonek' => 722.0,
197 => 722.0,
213 => 778.0,
'zdotaccent' => 444.0,
'Ecaron' => 667.0,
'Iogonek' => 389.0,
'kcommaaccent' => 556.0,
'minus' => 570.0,
206 => 389.0,
'ncaron' => 556.0,
'tcommaaccent' => 333.0,
172 => 570.0,
246 => 500.0,
252 => 556.0,
'notequal' => 549.0,
'gcommaaccent' => 500.0,
240 => 500.0,
158 => 444.0,
'ncommaaccent' => 556.0,
185 => 300.0,
'imacron' => 278.0,
128 => 500.0,
),
'CIDtoGID_Compressed' => true,
'CIDtoGID' => 'eJwDAAAAAAE=',
'_version_' => 6,
);
+572
View File
@@ -0,0 +1,572 @@
<?php return array (
'codeToName' =>
array (
32 => 'space',
160 => 'space',
33 => 'exclam',
34 => 'quotedbl',
35 => 'numbersign',
36 => 'dollar',
37 => 'percent',
38 => 'ampersand',
146 => 'quoteright',
40 => 'parenleft',
41 => 'parenright',
42 => 'asterisk',
43 => 'plus',
44 => 'comma',
45 => 'hyphen',
173 => 'hyphen',
46 => 'period',
47 => 'slash',
48 => 'zero',
49 => 'one',
50 => 'two',
51 => 'three',
52 => 'four',
53 => 'five',
54 => 'six',
55 => 'seven',
56 => 'eight',
57 => 'nine',
58 => 'colon',
59 => 'semicolon',
60 => 'less',
61 => 'equal',
62 => 'greater',
63 => 'question',
64 => 'at',
65 => 'A',
66 => 'B',
67 => 'C',
68 => 'D',
69 => 'E',
70 => 'F',
71 => 'G',
72 => 'H',
73 => 'I',
74 => 'J',
75 => 'K',
76 => 'L',
77 => 'M',
78 => 'N',
79 => 'O',
80 => 'P',
81 => 'Q',
82 => 'R',
83 => 'S',
84 => 'T',
85 => 'U',
86 => 'V',
87 => 'W',
88 => 'X',
89 => 'Y',
90 => 'Z',
91 => 'bracketleft',
92 => 'backslash',
93 => 'bracketright',
94 => 'asciicircum',
95 => 'underscore',
145 => 'quoteleft',
97 => 'a',
98 => 'b',
99 => 'c',
100 => 'd',
101 => 'e',
102 => 'f',
103 => 'g',
104 => 'h',
105 => 'i',
106 => 'j',
107 => 'k',
108 => 'l',
109 => 'm',
110 => 'n',
111 => 'o',
112 => 'p',
113 => 'q',
114 => 'r',
115 => 's',
116 => 't',
117 => 'u',
118 => 'v',
119 => 'w',
120 => 'x',
121 => 'y',
122 => 'z',
123 => 'braceleft',
124 => 'bar',
125 => 'braceright',
126 => 'asciitilde',
161 => 'exclamdown',
162 => 'cent',
163 => 'sterling',
165 => 'yen',
131 => 'florin',
167 => 'section',
164 => 'currency',
39 => 'quotesingle',
147 => 'quotedblleft',
171 => 'guillemotleft',
139 => 'guilsinglleft',
155 => 'guilsinglright',
150 => 'endash',
134 => 'dagger',
135 => 'daggerdbl',
183 => 'periodcentered',
182 => 'paragraph',
149 => 'bullet',
130 => 'quotesinglbase',
132 => 'quotedblbase',
148 => 'quotedblright',
187 => 'guillemotright',
133 => 'ellipsis',
137 => 'perthousand',
191 => 'questiondown',
96 => 'grave',
180 => 'acute',
136 => 'circumflex',
152 => 'tilde',
175 => 'macron',
168 => 'dieresis',
184 => 'cedilla',
151 => 'emdash',
198 => 'AE',
170 => 'ordfeminine',
216 => 'Oslash',
140 => 'OE',
186 => 'ordmasculine',
230 => 'ae',
248 => 'oslash',
156 => 'oe',
223 => 'germandbls',
207 => 'Idieresis',
233 => 'eacute',
159 => 'Ydieresis',
247 => 'divide',
221 => 'Yacute',
194 => 'Acircumflex',
225 => 'aacute',
219 => 'Ucircumflex',
253 => 'yacute',
234 => 'ecircumflex',
220 => 'Udieresis',
218 => 'Uacute',
203 => 'Edieresis',
169 => 'copyright',
229 => 'aring',
224 => 'agrave',
227 => 'atilde',
154 => 'scaron',
237 => 'iacute',
251 => 'ucircumflex',
226 => 'acircumflex',
231 => 'ccedilla',
222 => 'Thorn',
179 => 'threesuperior',
210 => 'Ograve',
192 => 'Agrave',
215 => 'multiply',
250 => 'uacute',
255 => 'ydieresis',
238 => 'icircumflex',
202 => 'Ecircumflex',
228 => 'adieresis',
235 => 'edieresis',
205 => 'Iacute',
177 => 'plusminus',
166 => 'brokenbar',
174 => 'registered',
200 => 'Egrave',
142 => 'Zcaron',
208 => 'Eth',
199 => 'Ccedilla',
193 => 'Aacute',
196 => 'Adieresis',
232 => 'egrave',
211 => 'Oacute',
243 => 'oacute',
239 => 'idieresis',
212 => 'Ocircumflex',
217 => 'Ugrave',
254 => 'thorn',
178 => 'twosuperior',
214 => 'Odieresis',
181 => 'mu',
236 => 'igrave',
190 => 'threequarters',
153 => 'trademark',
204 => 'Igrave',
189 => 'onehalf',
244 => 'ocircumflex',
241 => 'ntilde',
201 => 'Eacute',
188 => 'onequarter',
138 => 'Scaron',
176 => 'degree',
242 => 'ograve',
249 => 'ugrave',
209 => 'Ntilde',
245 => 'otilde',
195 => 'Atilde',
197 => 'Aring',
213 => 'Otilde',
206 => 'Icircumflex',
172 => 'logicalnot',
246 => 'odieresis',
252 => 'udieresis',
240 => 'eth',
158 => 'zcaron',
185 => 'onesuperior',
128 => 'Euro',
),
'isUnicode' => false,
'FontName' => 'Times-Roman',
'FullName' => 'Times Roman',
'FamilyName' => 'Times',
'Weight' => 'Roman',
'ItalicAngle' => '0',
'IsFixedPitch' => 'false',
'CharacterSet' => 'ExtendedRoman',
'FontBBox' =>
array (
0 => '-168',
1 => '-218',
2 => '1000',
3 => '898',
),
'UnderlinePosition' => '-100',
'UnderlineThickness' => '50',
'Version' => '002.00',
'EncodingScheme' => 'WinAnsiEncoding',
'CapHeight' => '662',
'XHeight' => '450',
'Ascender' => '683',
'Descender' => '-217',
'StdHW' => '28',
'StdVW' => '84',
'StartCharMetrics' => '317',
'C' =>
array (
32 => 250.0,
160 => 250.0,
33 => 333.0,
34 => 408.0,
35 => 500.0,
36 => 500.0,
37 => 833.0,
38 => 778.0,
146 => 333.0,
40 => 333.0,
41 => 333.0,
42 => 500.0,
43 => 564.0,
44 => 250.0,
45 => 333.0,
173 => 333.0,
46 => 250.0,
47 => 278.0,
48 => 500.0,
49 => 500.0,
50 => 500.0,
51 => 500.0,
52 => 500.0,
53 => 500.0,
54 => 500.0,
55 => 500.0,
56 => 500.0,
57 => 500.0,
58 => 278.0,
59 => 278.0,
60 => 564.0,
61 => 564.0,
62 => 564.0,
63 => 444.0,
64 => 921.0,
65 => 722.0,
66 => 667.0,
67 => 667.0,
68 => 722.0,
69 => 611.0,
70 => 556.0,
71 => 722.0,
72 => 722.0,
73 => 333.0,
74 => 389.0,
75 => 722.0,
76 => 611.0,
77 => 889.0,
78 => 722.0,
79 => 722.0,
80 => 556.0,
81 => 722.0,
82 => 667.0,
83 => 556.0,
84 => 611.0,
85 => 722.0,
86 => 722.0,
87 => 944.0,
88 => 722.0,
89 => 722.0,
90 => 611.0,
91 => 333.0,
92 => 278.0,
93 => 333.0,
94 => 469.0,
95 => 500.0,
145 => 333.0,
97 => 444.0,
98 => 500.0,
99 => 444.0,
100 => 500.0,
101 => 444.0,
102 => 333.0,
103 => 500.0,
104 => 500.0,
105 => 278.0,
106 => 278.0,
107 => 500.0,
108 => 278.0,
109 => 778.0,
110 => 500.0,
111 => 500.0,
112 => 500.0,
113 => 500.0,
114 => 333.0,
115 => 389.0,
116 => 278.0,
117 => 500.0,
118 => 500.0,
119 => 722.0,
120 => 500.0,
121 => 500.0,
122 => 444.0,
123 => 480.0,
124 => 200.0,
125 => 480.0,
126 => 541.0,
161 => 333.0,
162 => 500.0,
163 => 500.0,
'fraction' => 167.0,
165 => 500.0,
131 => 500.0,
167 => 500.0,
164 => 500.0,
39 => 180.0,
147 => 444.0,
171 => 500.0,
139 => 333.0,
155 => 333.0,
'fi' => 556.0,
'fl' => 556.0,
150 => 500.0,
134 => 500.0,
135 => 500.0,
183 => 250.0,
182 => 453.0,
149 => 350.0,
130 => 333.0,
132 => 444.0,
148 => 444.0,
187 => 500.0,
133 => 1000.0,
137 => 1000.0,
191 => 444.0,
96 => 333.0,
180 => 333.0,
136 => 333.0,
152 => 333.0,
175 => 333.0,
'breve' => 333.0,
'dotaccent' => 333.0,
168 => 333.0,
'ring' => 333.0,
184 => 333.0,
'hungarumlaut' => 333.0,
'ogonek' => 333.0,
'caron' => 333.0,
151 => 1000.0,
198 => 889.0,
170 => 276.0,
'Lslash' => 611.0,
216 => 722.0,
140 => 889.0,
186 => 310.0,
230 => 667.0,
'dotlessi' => 278.0,
'lslash' => 278.0,
248 => 500.0,
156 => 722.0,
223 => 500.0,
207 => 333.0,
233 => 444.0,
'abreve' => 444.0,
'uhungarumlaut' => 500.0,
'ecaron' => 444.0,
159 => 722.0,
247 => 564.0,
221 => 722.0,
194 => 722.0,
225 => 444.0,
219 => 722.0,
253 => 500.0,
'scommaaccent' => 389.0,
234 => 444.0,
'Uring' => 722.0,
220 => 722.0,
'aogonek' => 444.0,
218 => 722.0,
'uogonek' => 500.0,
203 => 611.0,
'Dcroat' => 722.0,
'commaaccent' => 250.0,
169 => 760.0,
'Emacron' => 611.0,
'ccaron' => 444.0,
229 => 444.0,
'Ncommaaccent' => 722.0,
'lacute' => 278.0,
224 => 444.0,
'Tcommaaccent' => 611.0,
'Cacute' => 667.0,
227 => 444.0,
'Edotaccent' => 611.0,
154 => 389.0,
'scedilla' => 389.0,
237 => 278.0,
'lozenge' => 471.0,
'Rcaron' => 667.0,
'Gcommaaccent' => 722.0,
251 => 500.0,
226 => 444.0,
'Amacron' => 722.0,
'rcaron' => 333.0,
231 => 444.0,
'Zdotaccent' => 611.0,
222 => 556.0,
'Omacron' => 722.0,
'Racute' => 667.0,
'Sacute' => 556.0,
'dcaron' => 588.0,
'Umacron' => 722.0,
'uring' => 500.0,
179 => 300.0,
210 => 722.0,
192 => 722.0,
'Abreve' => 722.0,
215 => 564.0,
250 => 500.0,
'Tcaron' => 611.0,
'partialdiff' => 476.0,
255 => 500.0,
'Nacute' => 722.0,
238 => 278.0,
202 => 611.0,
228 => 444.0,
235 => 444.0,
'cacute' => 444.0,
'nacute' => 500.0,
'umacron' => 500.0,
'Ncaron' => 722.0,
205 => 333.0,
177 => 564.0,
166 => 200.0,
174 => 760.0,
'Gbreve' => 722.0,
'Idotaccent' => 333.0,
'summation' => 600.0,
200 => 611.0,
'racute' => 333.0,
'omacron' => 500.0,
'Zacute' => 611.0,
142 => 611.0,
'greaterequal' => 549.0,
208 => 722.0,
199 => 667.0,
'lcommaaccent' => 278.0,
'tcaron' => 326.0,
'eogonek' => 444.0,
'Uogonek' => 722.0,
193 => 722.0,
196 => 722.0,
232 => 444.0,
'zacute' => 444.0,
'iogonek' => 278.0,
211 => 722.0,
243 => 500.0,
'amacron' => 444.0,
'sacute' => 389.0,
239 => 278.0,
212 => 722.0,
217 => 722.0,
'Delta' => 612.0,
254 => 500.0,
178 => 300.0,
214 => 722.0,
181 => 500.0,
236 => 278.0,
'ohungarumlaut' => 500.0,
'Eogonek' => 611.0,
'dcroat' => 500.0,
190 => 750.0,
'Scedilla' => 556.0,
'lcaron' => 344.0,
'Kcommaaccent' => 722.0,
'Lacute' => 611.0,
153 => 980.0,
'edotaccent' => 444.0,
204 => 333.0,
'Imacron' => 333.0,
'Lcaron' => 611.0,
189 => 750.0,
'lessequal' => 549.0,
244 => 500.0,
241 => 500.0,
'Uhungarumlaut' => 722.0,
201 => 611.0,
'emacron' => 444.0,
'gbreve' => 500.0,
188 => 750.0,
138 => 556.0,
'Scommaaccent' => 556.0,
'Ohungarumlaut' => 722.0,
176 => 400.0,
242 => 500.0,
'Ccaron' => 667.0,
249 => 500.0,
'radical' => 453.0,
'Dcaron' => 722.0,
'rcommaaccent' => 333.0,
209 => 722.0,
245 => 500.0,
'Rcommaaccent' => 667.0,
'Lcommaaccent' => 611.0,
195 => 722.0,
'Aogonek' => 722.0,
197 => 722.0,
213 => 722.0,
'zdotaccent' => 444.0,
'Ecaron' => 611.0,
'Iogonek' => 333.0,
'kcommaaccent' => 500.0,
'minus' => 564.0,
206 => 333.0,
'ncaron' => 500.0,
'tcommaaccent' => 278.0,
172 => 564.0,
246 => 500.0,
252 => 500.0,
'notequal' => 549.0,
'gcommaaccent' => 500.0,
240 => 500.0,
158 => 444.0,
'ncommaaccent' => 500.0,
185 => 300.0,
'imacron' => 278.0,
128 => 500.0,
),
'CIDtoGID_Compressed' => true,
'CIDtoGID' => 'eJwDAAAAAAE=',
'_version_' => 6,
);
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+110
View File
@@ -0,0 +1,110 @@
<?php return array (
'sans-serif' => array(
'normal' => $rootDir . '/lib/fonts/Helvetica',
'bold' => $rootDir . '/lib/fonts/Helvetica-Bold',
'italic' => $rootDir . '/lib/fonts/Helvetica-Oblique',
'bold_italic' => $rootDir . '/lib/fonts/Helvetica-BoldOblique',
),
'times' => array(
'normal' => $rootDir . '/lib/fonts/Times-Roman',
'bold' => $rootDir . '/lib/fonts/Times-Bold',
'italic' => $rootDir . '/lib/fonts/Times-Italic',
'bold_italic' => $rootDir . '/lib/fonts/Times-BoldItalic',
),
'times-roman' => array(
'normal' => $rootDir . '/lib/fonts/Times-Roman',
'bold' => $rootDir . '/lib/fonts/Times-Bold',
'italic' => $rootDir . '/lib/fonts/Times-Italic',
'bold_italic' => $rootDir . '/lib/fonts/Times-BoldItalic',
),
'courier' => array(
'normal' => $rootDir . '/lib/fonts/Courier',
'bold' => $rootDir . '/lib/fonts/Courier-Bold',
'italic' => $rootDir . '/lib/fonts/Courier-Oblique',
'bold_italic' => $rootDir . '/lib/fonts/Courier-BoldOblique',
),
'helvetica' => array(
'normal' => $rootDir . '/lib/fonts/Helvetica',
'bold' => $rootDir . '/lib/fonts/Helvetica-Bold',
'italic' => $rootDir . '/lib/fonts/Helvetica-Oblique',
'bold_italic' => $rootDir . '/lib/fonts/Helvetica-BoldOblique',
),
'zapfdingbats' => array(
'normal' => $rootDir . '/lib/fonts/ZapfDingbats',
'bold' => $rootDir . '/lib/fonts/ZapfDingbats',
'italic' => $rootDir . '/lib/fonts/ZapfDingbats',
'bold_italic' => $rootDir . '/lib/fonts/ZapfDingbats',
),
'symbol' => array(
'normal' => $rootDir . '/lib/fonts/Symbol',
'bold' => $rootDir . '/lib/fonts/Symbol',
'italic' => $rootDir . '/lib/fonts/Symbol',
'bold_italic' => $rootDir . '/lib/fonts/Symbol',
),
'serif' => array(
'normal' => $rootDir . '/lib/fonts/Times-Roman',
'bold' => $rootDir . '/lib/fonts/Times-Bold',
'italic' => $rootDir . '/lib/fonts/Times-Italic',
'bold_italic' => $rootDir . '/lib/fonts/Times-BoldItalic',
),
'monospace' => array(
'normal' => $rootDir . '/lib/fonts/Courier',
'bold' => $rootDir . '/lib/fonts/Courier-Bold',
'italic' => $rootDir . '/lib/fonts/Courier-Oblique',
'bold_italic' => $rootDir . '/lib/fonts/Courier-BoldOblique',
),
'fixed' => array(
'normal' => $rootDir . '/lib/fonts/Courier',
'bold' => $rootDir . '/lib/fonts/Courier-Bold',
'italic' => $rootDir . '/lib/fonts/Courier-Oblique',
'bold_italic' => $rootDir . '/lib/fonts/Courier-BoldOblique',
),
'dejavu sans' => array(
'bold' => $rootDir . '/lib/fonts/DejaVuSans-Bold',
'bold_italic' => $rootDir . '/lib/fonts/DejaVuSans-BoldOblique',
'italic' => $rootDir . '/lib/fonts/DejaVuSans-Oblique',
'normal' => $rootDir . '/lib/fonts/DejaVuSans',
),
'dejavu sans mono' => array(
'bold' => $rootDir . '/lib/fonts/DejaVuSansMono-Bold',
'bold_italic' => $rootDir . '/lib/fonts/DejaVuSansMono-BoldOblique',
'italic' => $rootDir . '/lib/fonts/DejaVuSansMono-Oblique',
'normal' => $rootDir . '/lib/fonts/DejaVuSansMono',
),
'dejavu serif' => array(
'bold' => $rootDir . '/lib/fonts/DejaVuSerif-Bold',
'bold_italic' => $rootDir . '/lib/fonts/DejaVuSerif-BoldItalic',
'italic' => $rootDir . '/lib/fonts/DejaVuSerif-Italic',
'normal' => $rootDir . '/lib/fonts/DejaVuSerif',
),
'cwtexkai' => array(
'500' => $fontDir . '/cwtexkai-500_f9ebc6334543dec371b780ca16a50941',
),
'fireflysung' => array(
'500' => $fontDir . '/fireflysung-500_f9ebc6334543dec371b780ca16a50941',
),
'simhei' => array(
'normal' => $fontDir . 'simhei',
'bold' => $fontDir . 'simhei',
'bold_italic' => $fontDir . 'simhei',
'italic' => $fontDir . 'simhei'
),
'droidsans' => array(
'normal' => $fontDir . '/DroidSansFallback',
'bold' => $fontDir . '/DroidSansFallback',
'italic' => $fontDir . '/DroidSansFallback',
'bold_italic' => $fontDir . '/DroidSansFallback',
),
'droidsansfallback' => array(
'normal' => $fontDir . '/DroidSansFallback',
'bold' => $fontDir . '/DroidSansFallback',
'italic' => $fontDir . '/DroidSansFallback',
'bold_italic' => $fontDir . '/DroidSansFallback',
),
'noto' => array(
'normal' => $fontDir . '/NotoSerifSC-Regular',
'bold' => $fontDir . '/NotoSerifSC-Regular',
'italic' => $fontDir . '/NotoSerifSC-Regular',
'bold_italic' => $fontDir . '/NotoSerifSC-Regular',
),
) ?>
File diff suppressed because it is too large Load Diff
Binary file not shown.
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
Submodule
+1
Submodule utils added at 47ddd6dedb