Actualizacuion de Rama Kquiroz
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
APP_NAME="La Pieza.DO"
|
||||
APP_ENV=local
|
||||
APP_KEY=base64:doBaoFE9npLSpSKbSJYDxRi9GTgV6eZyCX5eoop+hXI=
|
||||
APP_DEBUG=true
|
||||
APP_URL=http://localhost
|
||||
APP_DEBUG=false
|
||||
APP_URL="https://devs.lapieza.net"
|
||||
APP_TIMEZONE="America/Halifax"
|
||||
|
||||
DEMO_MODE="Off"
|
||||
@@ -10,11 +10,11 @@ DEMO_MODE="Off"
|
||||
LOG_CHANNEL=stack
|
||||
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=lapiezado_lapiezado
|
||||
DB_USERNAME=root
|
||||
DB_PASSWORD=
|
||||
DB_HOST="localhost"
|
||||
DB_PORT="3306"
|
||||
DB_DATABASE="lapiezado_lapiezado"
|
||||
DB_USERNAME="lapiezado_lapiezado"
|
||||
DB_PASSWORD="@LaPieza2023-24!#"
|
||||
|
||||
BROADCAST_DRIVER=log
|
||||
CACHE_DRIVER="file"
|
||||
@@ -63,11 +63,11 @@ PAYSTACK_SECRET_KEY=""
|
||||
|
||||
VOGUE_MERCHANT_ID="DEMO"
|
||||
|
||||
GOOGLE_CLIENT_ID=""
|
||||
GOOGLE_CLIENT_SECRET=""
|
||||
GOOGLE_CLIENT_ID="724795873332-h4dnpj7l5t98rtkdjdokcbs34eu4hc9t.apps.googleusercontent.com"
|
||||
GOOGLE_CLIENT_SECRET="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"
|
||||
|
||||
FACEBOOK_CLIENT_ID=""
|
||||
FACEBOOK_CLIENT_SECRET=""
|
||||
FACEBOOK_CLIENT_ID="641344891425720"
|
||||
FACEBOOK_CLIENT_SECRET="ec9df2420c4fc7a5f1a66193027f1ae1"
|
||||
|
||||
TRACKING_ID=""
|
||||
|
||||
@@ -153,6 +153,7 @@ BKASH_CHECKOUT_PASSWORD="@12345"
|
||||
MAILGUN_DOMAIN=""
|
||||
MAILGUN_SECRET=""
|
||||
|
||||
RECAPTCHA_SITE_KEY=6LeLn7MnAAAAAEG9wKdhz_h-xys05ZPohc4aPUki
|
||||
RECAPTCHA_SECRET_KEY=6LeLn7MnAAAAAOg5erYJkp8dWxIIRHMbmk9fDdLS
|
||||
|
||||
RECAPTCHA_SITE_KEY=6Le0OJsnAAAAALJsc4xJaNot1HfSmHpYgJYDzTYT
|
||||
RECAPTCHA_SECRET_KEY=6Le0OJsnAAAAAIVMI3KwkxeLsrhI8GF7BjRX9S
|
||||
GOOGLE_MAPS_API_KEY=AIzaSyClSVgBcIeXFcWA0Rt-6z6OWoJHrJPl-tI
|
||||
1
desarrollo/.gitattributes
vendored
1
desarrollo/.gitattributes
vendored
@@ -3,3 +3,4 @@
|
||||
*.scss linguist-vendored
|
||||
*.js linguist-vendored
|
||||
CHANGELOG.md export-ignore
|
||||
*.blade.php filter=lfs diff=lfs merge=lfs -text
|
||||
|
||||
16
desarrollo/.gitignore
vendored
16
desarrollo/.gitignore
vendored
@@ -1 +1,17 @@
|
||||
/public/storage
|
||||
/storage/*.key
|
||||
/vendor
|
||||
.env
|
||||
/public/uploads
|
||||
/source_code
|
||||
updates.zip
|
||||
uploads.zip
|
||||
shop.sql
|
||||
/sqlupdates
|
||||
/diseno
|
||||
/logs
|
||||
/refs
|
||||
/temp
|
||||
/info
|
||||
/hooks
|
||||
/objects
|
||||
|
||||
6
desarrollo/.vscode/settings.json
vendored
6
desarrollo/.vscode/settings.json
vendored
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"githubPullRequests.ignoredPullRequestBranches": [
|
||||
"master"
|
||||
],
|
||||
"git.ignoreLimitWarning": true
|
||||
}
|
||||
1
desarrollo/COMMIT_EDITMSG
Normal file
1
desarrollo/COMMIT_EDITMSG
Normal file
@@ -0,0 +1 @@
|
||||
corrigiendo errores en admin
|
||||
3
desarrollo/FETCH_HEAD
Normal file
3
desarrollo/FETCH_HEAD
Normal file
@@ -0,0 +1,3 @@
|
||||
f8256bd57d1ed333573ef882ced037c984592ef0 branch 'alejandro' of https://github.com/lapieza-dev/main
|
||||
fd3f3400a2919f3c89ad141f26b1771fe05519fd not-for-merge branch 'kquiroz' of https://github.com/lapieza-dev/main
|
||||
5ef9b4848a57256d3ed507b6868aacb46b840a6b not-for-merge branch 'master' of https://github.com/lapieza-dev/main
|
||||
1
desarrollo/HEAD
Normal file
1
desarrollo/HEAD
Normal file
@@ -0,0 +1 @@
|
||||
ref: refs/heads/alejandro
|
||||
1
desarrollo/ORIG_HEAD
Normal file
1
desarrollo/ORIG_HEAD
Normal file
@@ -0,0 +1 @@
|
||||
ea124233b1b915da86cde30e3cc8453e33d69fb6
|
||||
@@ -146,6 +146,7 @@ class AizUploadController extends Controller
|
||||
// Get the MIME type of the file
|
||||
$file_mime = finfo_file($finfo, base_path('public/') . $path);
|
||||
|
||||
|
||||
if ($type[$extension] == 'image' && get_setting('disable_image_optimization') != 1) {
|
||||
try {
|
||||
$img = Image::make($request->file('aiz_file')->getRealPath())->encode();
|
||||
@@ -168,8 +169,9 @@ class AizUploadController extends Controller
|
||||
}
|
||||
}
|
||||
|
||||
if (env('FILESYSTEM_DRIVER') == 's3') {
|
||||
Storage::disk('s3')->put(
|
||||
if (env('FILESYSTEM_DRIVER') != 'local') {
|
||||
|
||||
Storage::disk(env('FILESYSTEM_DRIVER'))->put(
|
||||
$path,
|
||||
file_get_contents(base_path('public/') . $path),
|
||||
[
|
||||
@@ -177,6 +179,7 @@ class AizUploadController extends Controller
|
||||
'ContentType' => $extension == 'svg' ? 'image/svg+xml' : $file_mime
|
||||
]
|
||||
);
|
||||
// dd($storage);
|
||||
if ($arr[0] != 'updates') {
|
||||
unlink(base_path('public/') . $path);
|
||||
}
|
||||
@@ -230,8 +233,8 @@ class AizUploadController extends Controller
|
||||
return back();
|
||||
}
|
||||
try {
|
||||
if (env('FILESYSTEM_DRIVER') == 's3') {
|
||||
Storage::disk('s3')->delete($upload->file_name);
|
||||
if (env('FILESYSTEM_DRIVER') != 'local') {
|
||||
Storage::disk(env('FILESYSTEM_DRIVER'))->delete($upload->file_name);
|
||||
if (file_exists(public_path() . '/' . $upload->file_name)) {
|
||||
unlink(public_path() . '/' . $upload->file_name);
|
||||
}
|
||||
@@ -281,8 +284,8 @@ class AizUploadController extends Controller
|
||||
$uploads = Upload::all();
|
||||
foreach ($uploads as $upload) {
|
||||
try {
|
||||
if (env('FILESYSTEM_DRIVER') == 's3') {
|
||||
Storage::disk('s3')->delete($upload->file_name);
|
||||
if (env('FILESYSTEM_DRIVER') != 'local') {
|
||||
Storage::disk(env('FILESYSTEM_DRIVER'))->delete($upload->file_name);
|
||||
if (file_exists(public_path() . '/' . $upload->file_name)) {
|
||||
unlink(public_path() . '/' . $upload->file_name);
|
||||
}
|
||||
|
||||
@@ -3,11 +3,14 @@
|
||||
namespace App\Http\Controllers\Api\V2;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Resources\V2\Auction\AuctionBidProducts;
|
||||
use App\Http\Resources\V2\Auction\AuctionPurchaseHistory;
|
||||
use App\Http\Resources\V2\AuctionMiniCollection;
|
||||
use App\Http\Resources\V2\AuctionProductDetailCollection;
|
||||
use App\Http\Resources\V2\ProductMiniCollection;
|
||||
use App\Models\AuctionProductBid;
|
||||
use App\Models\Product;
|
||||
use Request;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
|
||||
class AuctionProductController extends Controller
|
||||
@@ -15,7 +18,6 @@ class AuctionProductController extends Controller
|
||||
|
||||
public function index()
|
||||
{
|
||||
|
||||
$products = Product::latest()->where('published', 1)->where('auction_product', 1);
|
||||
if (get_setting('seller_auction_product') == 0) {
|
||||
$products = $products->where('added_by', 'admin');
|
||||
@@ -32,4 +34,32 @@ class AuctionProductController extends Controller
|
||||
$detailedProduct = Product::where('id', $id)->get();
|
||||
return new AuctionProductDetailCollection($detailedProduct);
|
||||
}
|
||||
|
||||
public function bided_products_list()
|
||||
{
|
||||
$own_bids = AuctionProductBid::where('user_id', auth()->id())->orderBy('id', 'desc')->pluck('product_id');
|
||||
$bided_products = Product::whereIn('id', $own_bids)->paginate(10);
|
||||
return AuctionBidProducts::collection($bided_products);
|
||||
}
|
||||
|
||||
public function user_purchase_history(Request $request)
|
||||
{
|
||||
|
||||
$orders = DB::table('orders')
|
||||
->orderBy('code', 'desc')
|
||||
->join('order_details', 'orders.id', '=', 'order_details.order_id')
|
||||
->join('products', 'order_details.product_id', '=', 'products.id')
|
||||
->where('orders.user_id', auth()->user()->id)
|
||||
->where('products.auction_product', '1');
|
||||
if ($request->payment_status != "" || $request->payment_status != null) {
|
||||
$orders = $orders->where('orders.payment_status', $request->payment_status);
|
||||
}
|
||||
if ($request->delivery_status != "" || $request->delivery_status != null) {
|
||||
$orders = $orders->where('orders.delivery_status', $request->delivery_status);
|
||||
}
|
||||
|
||||
$orders = $orders->select('order_details.order_id as id')->paginate(15);
|
||||
|
||||
return AuctionPurchaseHistory::collection($orders);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,17 +52,23 @@ class AuthController extends Controller
|
||||
if ($validator->fails()) {
|
||||
return response()->json([
|
||||
'result' => false,
|
||||
'message' => $validator->errors()
|
||||
'message' => $validator->errors()->all()
|
||||
]);
|
||||
}
|
||||
|
||||
$user = new User([
|
||||
'name' => $request->name,
|
||||
'email' => $request->register_by == 'email' ? $request->email_or_phone : '',
|
||||
'phone' => $request->register_by == 'phone' ? $request->email_or_phone : '',
|
||||
'password' => bcrypt($request->password),
|
||||
'verification_code' => rand(100000, 999999)
|
||||
]);
|
||||
$user = new User();
|
||||
$user->name = $request->name;
|
||||
if ($request->register_by == 'email') {
|
||||
|
||||
$user->email = $request->email_or_phone;
|
||||
}
|
||||
if ($request->register_by == 'phone') {
|
||||
$user->phone = $request->email_or_phone;
|
||||
}
|
||||
$user->password = bcrypt($request->password);
|
||||
$user->verification_code = rand(100000, 999999);
|
||||
$user->save();
|
||||
|
||||
|
||||
$user->email_verified_at = null;
|
||||
if ($user->email != null) {
|
||||
@@ -172,9 +178,9 @@ class AuthController extends Controller
|
||||
if (!$user->banned) {
|
||||
if (Hash::check($request->password, $user->password)) {
|
||||
|
||||
if ($user->email_verified_at == null) {
|
||||
return response()->json(['result' => false, 'message' => translate('Please verify your account'), 'user' => null], 401);
|
||||
}
|
||||
// if ($user->email_verified_at == null) {
|
||||
// return response()->json(['result' => false, 'message' => translate('Please verify your account'), 'user' => null], 401);
|
||||
// }
|
||||
return $this->loginSuccess($user);
|
||||
} else {
|
||||
return response()->json(['result' => false, 'message' => translate('Unauthorized'), 'user' => null], 401);
|
||||
|
||||
@@ -6,6 +6,8 @@ use App\Models\Cart;
|
||||
use App\Models\Product;
|
||||
use App\Models\Shop;
|
||||
use App\Models\User;
|
||||
use App\Utility\CartUtility;
|
||||
use App\Utility\NagadUtility;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
@@ -38,21 +40,21 @@ class CartController extends Controller
|
||||
}
|
||||
|
||||
$shipping_cost = $items->sum('shipping_cost');
|
||||
$sum = $subtotal + $tax + $shipping_cost;
|
||||
$discount = $items->sum('discount');
|
||||
$sum = ($subtotal + $tax + $shipping_cost) - $discount;
|
||||
|
||||
return response()->json([
|
||||
'sub_total' => format_price($subtotal),
|
||||
'tax' => format_price($tax),
|
||||
'shipping_cost' => format_price($shipping_cost ),
|
||||
'discount' => format_price($items->sum('discount')),
|
||||
'grand_total' => format_price($sum),
|
||||
'sub_total' => single_price($subtotal),
|
||||
'tax' => single_price($tax),
|
||||
'shipping_cost' => single_price($shipping_cost),
|
||||
'discount' => single_price($discount),
|
||||
'grand_total' => single_price($sum),
|
||||
'grand_total_value' => convert_price($sum),
|
||||
'coupon_code' => $items[0]->coupon_code,
|
||||
'coupon_applied' => $items[0]->coupon_applied == 1,
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
public function count()
|
||||
{
|
||||
$items = auth()->user()->carts;
|
||||
@@ -63,13 +65,13 @@ class CartController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function getList()
|
||||
{
|
||||
$owner_ids = Cart::where('user_id', auth()->user()->id)->select('owner_id')->groupBy('owner_id')->pluck('owner_id')->toArray();
|
||||
$currency_symbol = currency_symbol();
|
||||
$shops = [];
|
||||
$sub_total = 0.00;
|
||||
$grand_total = 0.00;
|
||||
if (!empty($owner_ids)) {
|
||||
foreach ($owner_ids as $owner_id) {
|
||||
$shop = array();
|
||||
@@ -78,123 +80,134 @@ class CartController extends Controller
|
||||
if (!empty($shop_items_raw_data)) {
|
||||
foreach ($shop_items_raw_data as $shop_items_raw_data_item) {
|
||||
$product = Product::where('id', $shop_items_raw_data_item["product_id"])->first();
|
||||
$price = cart_product_price($shop_items_raw_data_item, $product, false, false) * intval($shop_items_raw_data_item["quantity"]);
|
||||
$tax = cart_product_tax($shop_items_raw_data_item, $product, false);
|
||||
$shop_items_data_item["id"] = intval($shop_items_raw_data_item["id"]);
|
||||
$shop_items_data_item["owner_id"] = intval($shop_items_raw_data_item["owner_id"]);
|
||||
$shop_items_data_item["user_id"] = intval($shop_items_raw_data_item["user_id"]);
|
||||
$shop_items_data_item["product_id"] = intval($shop_items_raw_data_item["product_id"]);
|
||||
$shop_items_data_item["product_name"] = $product->getTranslation('name');
|
||||
$shop_items_data_item["auction_product"] = $product->auction_product;
|
||||
$shop_items_data_item["product_thumbnail_image"] = uploaded_asset($product->thumbnail_img);
|
||||
$shop_items_data_item["variation"] = $shop_items_raw_data_item["variation"];
|
||||
$shop_items_data_item["price"] =(double) cart_product_price($shop_items_raw_data_item, $product, false, false);
|
||||
$shop_items_data_item["price"] = (float) cart_product_price($shop_items_raw_data_item, $product, false, false);
|
||||
$shop_items_data_item["currency_symbol"] = $currency_symbol;
|
||||
$shop_items_data_item["tax"] =(double) cart_product_tax($shop_items_raw_data_item, $product,false);
|
||||
$shop_items_data_item["shipping_cost"] =(double) $shop_items_raw_data_item["shipping_cost"];
|
||||
$shop_items_data_item["tax"] = (float) cart_product_tax($shop_items_raw_data_item, $product, false);
|
||||
$shop_items_data_item["price"] = single_price($price);
|
||||
$shop_items_data_item["currency_symbol"] = $currency_symbol;
|
||||
$shop_items_data_item["tax"] = single_price($tax);
|
||||
// $shop_items_data_item["tax"] = (float) cart_product_tax($shop_items_raw_data_item, $product, false);
|
||||
$shop_items_data_item["shipping_cost"] = (float) $shop_items_raw_data_item["shipping_cost"];
|
||||
$shop_items_data_item["quantity"] = intval($shop_items_raw_data_item["quantity"]);
|
||||
$shop_items_data_item["lower_limit"] = intval($product->min_qty);
|
||||
$shop_items_data_item["upper_limit"] = intval($product->stocks->where('variant', $shop_items_raw_data_item['variation'])->first()->qty);
|
||||
|
||||
$sub_total += $price + $tax;
|
||||
$shop_items_data[] = $shop_items_data_item;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$grand_total += $sub_total;
|
||||
$shop_data = Shop::where('user_id', $owner_id)->first();
|
||||
if ($shop_data) {
|
||||
$shop['name'] = $shop_data->name;
|
||||
$shop['owner_id'] = (int) $owner_id;
|
||||
$shop['sub_total'] = single_price($sub_total);
|
||||
$shop['cart_items'] = $shop_items_data;
|
||||
} else {
|
||||
$shop['name'] = "Inhouse";
|
||||
$shop['owner_id'] = (int) $owner_id;
|
||||
$shop['sub_total'] = single_price($sub_total);
|
||||
$shop['cart_items'] = $shop_items_data;
|
||||
}
|
||||
$shops[] = $shop;
|
||||
$sub_total = 0.00;
|
||||
}
|
||||
}
|
||||
|
||||
//dd($shops);
|
||||
|
||||
return response()->json($shops);
|
||||
return response()->json([
|
||||
"grand_total" => single_price($grand_total),
|
||||
"data" =>
|
||||
$shops
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
public function add(Request $request)
|
||||
{
|
||||
$carts = Cart::where('user_id', auth()->user()->id)->get();
|
||||
$check_auction_in_cart = CartUtility::check_auction_in_cart($carts);
|
||||
$product = Product::findOrFail($request->id);
|
||||
|
||||
$variant = $request->variant;
|
||||
$tax = 0;
|
||||
|
||||
if ($variant == '')
|
||||
$price = $product->unit_price;
|
||||
else {
|
||||
$product_stock = $product->stocks->where('variant', $variant)->first();
|
||||
$price = $product_stock->price;
|
||||
}
|
||||
|
||||
//discount calculation based on flash deal and regular discount
|
||||
//calculation of taxes
|
||||
$discount_applicable = false;
|
||||
|
||||
if ($product->discount_start_date == null) {
|
||||
$discount_applicable = true;
|
||||
}
|
||||
elseif (strtotime(date('d-m-Y H:i:s')) >= $product->discount_start_date &&
|
||||
strtotime(date('d-m-Y H:i:s')) <= $product->discount_end_date) {
|
||||
$discount_applicable = true;
|
||||
}
|
||||
|
||||
if ($discount_applicable) {
|
||||
if($product->discount_type == 'percent'){
|
||||
$price -= ($price*$product->discount)/100;
|
||||
}
|
||||
elseif($product->discount_type == 'amount'){
|
||||
$price -= $product->discount;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($product->taxes as $product_tax) {
|
||||
if ($product_tax->tax_type == 'percent') {
|
||||
$tax += ($price * $product_tax->tax) / 100;
|
||||
} elseif ($product_tax->tax_type == 'amount') {
|
||||
$tax += $product_tax->tax;
|
||||
if ($check_auction_in_cart && $product->auction_product == 0) {
|
||||
return response()->json([
|
||||
'result' => false,
|
||||
'message' => translate('Remove auction product from cart to add this product.')
|
||||
], 200);
|
||||
}
|
||||
if ($check_auction_in_cart == false && count($carts) > 0 && $product->auction_product == 1) {
|
||||
return response()->json([
|
||||
'result' => false,
|
||||
'message' => translate('Remove other products from cart to add this auction product.')
|
||||
], 200);
|
||||
}
|
||||
|
||||
if ($product->min_qty > $request->quantity) {
|
||||
return response()->json(['result' => false, 'message' => translate("Minimum")." {$product->min_qty} ".translate("item(s) should be ordered")], 200);
|
||||
return response()->json([
|
||||
'result' => false,
|
||||
'message' => translate("Minimum") . " {$product->min_qty} " . translate("item(s) should be ordered")
|
||||
], 200);
|
||||
}
|
||||
|
||||
$stock = $product->stocks->where('variant', $variant)->first()->qty;
|
||||
$variant = $request->variant;
|
||||
$tax = 0;
|
||||
$quantity = $request->quantity;
|
||||
|
||||
$variant_string = $variant != null && $variant != "" ? translate("for")." ($variant)" : "";
|
||||
if ($stock < $request->quantity && $product->digital == 0) {
|
||||
if ($stock == 0) {
|
||||
return response()->json(['result' => false, 'message' => "Stock out"], 200);
|
||||
} else {
|
||||
return response()->json(['result' => false, 'message' => translate("Only") ." {$stock} ".translate("item(s) are available")." {$variant_string}"], 200);
|
||||
}
|
||||
}
|
||||
$product_stock = $product->stocks->where('variant', $variant)->first();
|
||||
|
||||
$cart_item = Cart::where('product_id', $request->id)->where("user_id",auth()->id())->first();
|
||||
if($cart_item && $cart_item->product->digital == 1) {
|
||||
return response()->json(['result' => false, 'message' => 'Already added this product' ]);
|
||||
}
|
||||
|
||||
Cart::updateOrCreate([
|
||||
$cart = Cart::firstOrNew([
|
||||
'variation' => $variant,
|
||||
'user_id' => auth()->user()->id,
|
||||
'owner_id' => $product->user_id,
|
||||
'product_id' => $request->id,
|
||||
'variation' => $variant
|
||||
], [
|
||||
'price' => $price,
|
||||
'tax' => $tax,
|
||||
'shipping_cost' => 0,
|
||||
'quantity' => DB::raw("quantity + $request->quantity")
|
||||
'product_id' => $request['id']
|
||||
]);
|
||||
|
||||
if(\App\Utility\NagadUtility::create_balance_reference($request->cost_matrix) == false){
|
||||
$variant_string = $variant != null && $variant != "" ? translate("for") . " ($variant)" : "";
|
||||
|
||||
if ($cart->exists && $product->digital == 0) {
|
||||
if ($product->auction_product == 1 && ($cart->product_id == $product->id)) {
|
||||
return response()->json([
|
||||
'result' => false,
|
||||
'message' => translate('This auction product is already added to your cart.')
|
||||
], 200);
|
||||
}
|
||||
if ($product_stock->qty < $cart->quantity + $request['quantity']) {
|
||||
if ($product_stock->qty == 0) {
|
||||
return response()->json([
|
||||
'result' => false,
|
||||
'message' => translate("Stock out")
|
||||
], 200);
|
||||
} else {
|
||||
return response()->json([
|
||||
'result' => false,
|
||||
'message' => translate("Only") . " {$product_stock->qty} " . translate("item(s) are available") . " {$variant_string}"
|
||||
], 200);
|
||||
}
|
||||
}
|
||||
if ($product->digital == 1 && ($cart->product_id == $product->id)) {
|
||||
return response()->json([
|
||||
'result' => false,
|
||||
'message' => translate('Already added this product')
|
||||
]);
|
||||
}
|
||||
$quantity = $cart->quantity + $request['quantity'];
|
||||
}
|
||||
|
||||
$price = CartUtility::get_price($product, $product_stock, $request->quantity);
|
||||
$tax = CartUtility::tax_calculation($product, $price);
|
||||
CartUtility::save_cart_data($cart, $product, $price, $tax, $quantity);
|
||||
|
||||
if (NagadUtility::create_balance_reference($request->cost_matrix) == false) {
|
||||
return response()->json(['result' => false, 'message' => 'Cost matrix error']);
|
||||
}
|
||||
|
||||
@@ -208,7 +221,10 @@ class CartController extends Controller
|
||||
{
|
||||
$cart = Cart::find($request->id);
|
||||
if ($cart != null) {
|
||||
|
||||
$product = Product::find($cart->product_id);
|
||||
if ($product->auction_product == 1) {
|
||||
return response()->json(['result' => false, 'message' => translate('Maximum available quantity reached')], 200);
|
||||
}
|
||||
if ($cart->product->stocks->where('variant', $cart->variation)->first()->qty >= $request->quantity) {
|
||||
$cart->update([
|
||||
'quantity' => $request->quantity
|
||||
@@ -244,26 +260,21 @@ class CartController extends Controller
|
||||
$cart_item->update([
|
||||
'quantity' => $cart_quantities[$i]
|
||||
]);
|
||||
|
||||
} else {
|
||||
if ($stock == 0) {
|
||||
return response()->json(['result' => false, 'message' => translate("No item is available for") . " {$product->name}{$variant_string}," . translate("remove this from cart")], 200);
|
||||
} else {
|
||||
return response()->json(['result' => false, 'message' => translate("Only") . " {$stock} " . translate("item(s) are available for") . " {$product->name}{$variant_string}"], 200);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$i++;
|
||||
}
|
||||
|
||||
return response()->json(['result' => true, 'message' => translate('Cart updated')], 200);
|
||||
|
||||
} else {
|
||||
return response()->json(['result' => false, 'message' => translate('Cart is empty')], 200);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public function destroy($id)
|
||||
|
||||
@@ -94,7 +94,7 @@ class CheckoutController
|
||||
}
|
||||
|
||||
if($coupon_discount>0){
|
||||
Cart::where('user_id', auth()->user()->id)->update([
|
||||
Cart::where('user_id', auth()->user()->id)->where('owner_id', $coupon->user_id)->update([
|
||||
'discount' => $coupon_discount / count($cart_items),
|
||||
'coupon_code' => $request->coupon_code,
|
||||
'coupon_applied' => 1
|
||||
|
||||
@@ -24,7 +24,7 @@ class DigitalProductController extends Controller
|
||||
} else {
|
||||
if (file_exists(base_path('public/' . $upload->file_name))) {
|
||||
$file = public_path() . "/$upload->file_name";
|
||||
return response()->download($file,config('app.name')."_".$upload->file_original_name);
|
||||
return response()->download($file, config('app.name') . "_" . $upload->file_original_name . "." . $upload->extension);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -32,4 +32,3 @@ class DigitalProductController extends Controller
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -31,11 +31,11 @@ class PaymentTypesController
|
||||
$payment_type['payment_type_key'] = 'paypal';
|
||||
$payment_type['image'] = static_asset('assets/img/cards/paypal.png');
|
||||
$payment_type['name'] = "Paypal";
|
||||
$payment_type['title'] = "Checkout with Paypal";
|
||||
$payment_type['title'] = translate("Checkout with Paypal");
|
||||
$payment_type['offline_payment_id'] = 0;
|
||||
$payment_type['details'] = "";
|
||||
if ($mode == 'wallet') {
|
||||
$payment_type['title'] = "Recharge with Paypal";
|
||||
$payment_type['title'] = translate("Recharge with Paypal");
|
||||
}
|
||||
|
||||
$payment_types[] = $payment_type;
|
||||
@@ -47,11 +47,11 @@ class PaymentTypesController
|
||||
$payment_type['payment_type_key'] = 'stripe';
|
||||
$payment_type['image'] = static_asset('assets/img/cards/stripe.png');
|
||||
$payment_type['name'] = "Stripe";
|
||||
$payment_type['title'] = "Checkout with Stripe";
|
||||
$payment_type['title'] = translate("Checkout with Stripe");
|
||||
$payment_type['offline_payment_id'] = 0;
|
||||
$payment_type['details'] = "";
|
||||
if ($mode == 'wallet') {
|
||||
$payment_type['title'] = "Recharge with Stripe";
|
||||
$payment_type['title'] = translate("Recharge with Stripe");
|
||||
}
|
||||
|
||||
$payment_types[] = $payment_type;
|
||||
@@ -62,11 +62,11 @@ class PaymentTypesController
|
||||
$payment_type['payment_type_key'] = 'instamojo_payment';
|
||||
$payment_type['image'] = static_asset('assets/img/cards/instamojo.png');
|
||||
$payment_type['name'] = "Instamojo";
|
||||
$payment_type['title'] = "Checkout with Instamojo";
|
||||
$payment_type['title'] = translate("Checkout with Instamojo");
|
||||
$payment_type['offline_payment_id'] = 0;
|
||||
$payment_type['details'] = "";
|
||||
if ($mode == 'wallet') {
|
||||
$payment_type['title'] = "Recharge with Stripe";
|
||||
$payment_type['title'] = translate("Recharge with Instamojo");
|
||||
}
|
||||
|
||||
$payment_types[] = $payment_type;
|
||||
@@ -78,11 +78,11 @@ class PaymentTypesController
|
||||
$payment_type['payment_type_key'] = 'razorpay';
|
||||
$payment_type['image'] = static_asset('assets/img/cards/rozarpay.png');
|
||||
$payment_type['name'] = "Razorpay";
|
||||
$payment_type['title'] = "Checkout with Razorpay";
|
||||
$payment_type['title'] = translate("Checkout with Razorpay");
|
||||
$payment_type['offline_payment_id'] = 0;
|
||||
$payment_type['details'] = "";
|
||||
if ($mode == 'wallet') {
|
||||
$payment_type['title'] = "Recharge with Razorpay";
|
||||
$payment_type['title'] = translate("Recharge with Razorpay");
|
||||
}
|
||||
|
||||
$payment_types[] = $payment_type;
|
||||
@@ -94,11 +94,11 @@ class PaymentTypesController
|
||||
$payment_type['payment_type_key'] = 'paystack';
|
||||
$payment_type['image'] = static_asset('assets/img/cards/paystack.png');
|
||||
$payment_type['name'] = "Paystack";
|
||||
$payment_type['title'] = "Checkout with Paystack";
|
||||
$payment_type['title'] = translate("Checkout with Paystack");
|
||||
$payment_type['offline_payment_id'] = 0;
|
||||
$payment_type['details'] = "";
|
||||
if ($mode == 'wallet') {
|
||||
$payment_type['title'] = "Recharge with Paystack";
|
||||
$payment_type['title'] = translate("Recharge with Paystack");
|
||||
}
|
||||
|
||||
$payment_types[] = $payment_type;
|
||||
@@ -110,11 +110,11 @@ class PaymentTypesController
|
||||
$payment_type['payment_type_key'] = 'iyzico';
|
||||
$payment_type['image'] = static_asset('assets/img/cards/iyzico.png');
|
||||
$payment_type['name'] = "Iyzico";
|
||||
$payment_type['title'] = "Checkout with Iyzico";
|
||||
$payment_type['title'] = translate("Checkout with Iyzico");
|
||||
$payment_type['offline_payment_id'] = 0;
|
||||
$payment_type['details'] = "";
|
||||
if ($mode == 'wallet') {
|
||||
$payment_type['title'] = "Recharge with Iyzico";
|
||||
$payment_type['title'] = translate("Recharge with Iyzico");
|
||||
}
|
||||
|
||||
$payment_types[] = $payment_type;
|
||||
@@ -126,11 +126,11 @@ class PaymentTypesController
|
||||
$payment_type['payment_type_key'] = 'bkash';
|
||||
$payment_type['image'] = static_asset('assets/img/cards/bkash.png');
|
||||
$payment_type['name'] = "Bkash";
|
||||
$payment_type['title'] = "Checkout with Bkash";
|
||||
$payment_type['title'] = translate("Checkout with Bkash");
|
||||
$payment_type['offline_payment_id'] = 0;
|
||||
$payment_type['details'] = "";
|
||||
if ($mode == 'wallet') {
|
||||
$payment_type['title'] = "Recharge with Bkash";
|
||||
$payment_type['title'] = translate("Recharge with Bkash");
|
||||
}
|
||||
|
||||
$payment_types[] = $payment_type;
|
||||
@@ -142,11 +142,11 @@ class PaymentTypesController
|
||||
$payment_type['payment_type_key'] = 'nagad';
|
||||
$payment_type['image'] = static_asset('assets/img/cards/nagad.png');
|
||||
$payment_type['name'] = "Nagad";
|
||||
$payment_type['title'] = "Checkout with Nagad";
|
||||
$payment_type['title'] = translate("Checkout with Nagad");
|
||||
$payment_type['offline_payment_id'] = 0;
|
||||
$payment_type['details'] = "";
|
||||
if ($mode == 'wallet') {
|
||||
$payment_type['title'] = "Recharge with Nagad";
|
||||
$payment_type['title'] = translate("Recharge with Nagad");
|
||||
}
|
||||
|
||||
$payment_types[] = $payment_type;
|
||||
@@ -158,11 +158,11 @@ class PaymentTypesController
|
||||
$payment_type['payment_type_key'] = 'sslcommerz';
|
||||
$payment_type['image'] = static_asset('assets/img/cards/sslcommerz.png');
|
||||
$payment_type['name'] = "Sslcommerz";
|
||||
$payment_type['title'] = "Checkout with Sslcommerz";
|
||||
$payment_type['title'] = translate("Checkout with Sslcommerz");
|
||||
$payment_type['offline_payment_id'] = 0;
|
||||
$payment_type['details'] = "";
|
||||
if ($mode == 'wallet') {
|
||||
$payment_type['title'] = "Recharge with Sslcommerz";
|
||||
$payment_type['title'] = translate("Recharge with Sslcommerz");
|
||||
}
|
||||
|
||||
$payment_types[] = $payment_type;
|
||||
@@ -176,11 +176,11 @@ class PaymentTypesController
|
||||
$payment_type['payment_type_key'] = 'flutterwave';
|
||||
$payment_type['image'] = static_asset('assets/img/cards/flutterwave.png');
|
||||
$payment_type['name'] = "Flutterwave";
|
||||
$payment_type['title'] = "Checkout with Flutterwave";
|
||||
$payment_type['title'] = translate("Checkout with Flutterwave");
|
||||
$payment_type['offline_payment_id'] = 0;
|
||||
$payment_type['details'] = "";
|
||||
if ($mode == 'wallet') {
|
||||
$payment_type['title'] = "Recharge with Flutterwave";
|
||||
$payment_type['title'] = translate("Recharge with Flutterwave");
|
||||
}
|
||||
|
||||
$payment_types[] = $payment_type;
|
||||
@@ -194,11 +194,11 @@ class PaymentTypesController
|
||||
$payment_type['payment_type_key'] = 'paytm';
|
||||
$payment_type['image'] = static_asset('assets/img/cards/paytm.jpg');
|
||||
$payment_type['name'] = "Paytm";
|
||||
$payment_type['title'] = "Checkout with Paytm";
|
||||
$payment_type['title'] = translate("Checkout with Paytm");
|
||||
$payment_type['offline_payment_id'] = 0;
|
||||
$payment_type['details'] = "";
|
||||
if ($mode == 'wallet') {
|
||||
$payment_type['title'] = "Recharge with Paytm";
|
||||
$payment_type['title'] = translate("Recharge with Paytm");
|
||||
}
|
||||
|
||||
$payment_types[] = $payment_type;
|
||||
@@ -209,11 +209,11 @@ class PaymentTypesController
|
||||
$payment_type['payment_type_key'] = 'khalti';
|
||||
$payment_type['image'] = static_asset('assets/img/cards/khalti.png');
|
||||
$payment_type['name'] = "Khalti";
|
||||
$payment_type['title'] = "Checkout with Khalti";
|
||||
$payment_type['title'] = translate("Checkout with Khalti");
|
||||
$payment_type['offline_payment_id'] = 0;
|
||||
$payment_type['details'] = "";
|
||||
if ($mode == 'wallet') {
|
||||
$payment_type['title'] = "Recharge with Khalti";
|
||||
$payment_type['title'] = translate("Recharge with Khalti");
|
||||
}
|
||||
|
||||
$payment_types[] = $payment_type;
|
||||
@@ -229,7 +229,7 @@ class PaymentTypesController
|
||||
$payment_type['payment_type_key'] = 'wallet';
|
||||
$payment_type['image'] = static_asset('assets/img/cards/wallet.png');
|
||||
$payment_type['name'] = "Wallet";
|
||||
$payment_type['title'] = "Wallet Payment";
|
||||
$payment_type['title'] = translate("Wallet Payment");
|
||||
$payment_type['offline_payment_id'] = 0;
|
||||
$payment_type['details'] = "";
|
||||
|
||||
@@ -257,7 +257,7 @@ class PaymentTypesController
|
||||
$payment_type['payment_type_key'] = 'cash_on_delivery';
|
||||
$payment_type['image'] = static_asset('assets/img/cards/cod.png');
|
||||
$payment_type['name'] = "Cash Payment";
|
||||
$payment_type['title'] = "Cash on delivery";
|
||||
$payment_type['title'] = translate("Cash on delivery");
|
||||
$payment_type['offline_payment_id'] = 0;
|
||||
$payment_type['details'] = "";
|
||||
|
||||
|
||||
@@ -6,11 +6,13 @@ use App\Http\Resources\V2\PurchasedResource;
|
||||
use App\Http\Resources\V2\PurchaseHistoryMiniCollection;
|
||||
use App\Http\Resources\V2\PurchaseHistoryCollection;
|
||||
use App\Http\Resources\V2\PurchaseHistoryItemsCollection;
|
||||
use App\Models\Cart;
|
||||
use App\Models\Order;
|
||||
use App\Models\OrderDetail;
|
||||
use App\Models\Product;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\User;
|
||||
use App\Utility\CartUtility;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class PurchaseHistoryController extends Controller
|
||||
@@ -77,4 +79,87 @@ class PurchaseHistoryController extends Controller
|
||||
|
||||
return PurchasedResource::collection($order_detail_products);
|
||||
}
|
||||
|
||||
public function re_order($id)
|
||||
{
|
||||
$user_id = auth()->user()->id;
|
||||
$success_msgs = [];
|
||||
$failed_msgs = [];
|
||||
|
||||
$carts = Cart::where('user_id', auth()->user()->id)->get();
|
||||
$check_auction_in_cart = CartUtility::check_auction_in_cart($carts);
|
||||
if ($check_auction_in_cart) {
|
||||
array_push($failed_msgs, translate('Remove auction product from cart to add products.'));
|
||||
return response()->json([
|
||||
'success_msgs' => $success_msgs,
|
||||
'failed_msgs' => $failed_msgs
|
||||
]);
|
||||
}
|
||||
|
||||
$order = Order::findOrFail($id);
|
||||
|
||||
$data['user_id'] = $user_id;
|
||||
foreach ($order->orderDetails as $key => $orderDetail) {
|
||||
$product = $orderDetail->product;
|
||||
|
||||
if (
|
||||
!$product || $product->published == 0 ||
|
||||
$product->approved == 0 || ($product->wholesale_product && !addon_is_activated("wholesale"))
|
||||
) {
|
||||
array_push($failed_msgs, translate('An item from this order is not available now.'));
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($product->auction_product == 1) {
|
||||
array_push($failed_msgs, translate('You can not re order an auction product.'));
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// If product min qty is greater then the ordered qty, then update the order qty
|
||||
$order_qty = $orderDetail->quantity;
|
||||
if ($product->digital == 0 && $order_qty < $product->min_qty) {
|
||||
$order_qty = $product->min_qty;
|
||||
}
|
||||
|
||||
$cart = Cart::firstOrNew([
|
||||
'variation' => $orderDetail->variation,
|
||||
'user_id' => $user_id,
|
||||
'product_id' => $product->id
|
||||
]);
|
||||
|
||||
$product_stock = $product->stocks->where('variant', $orderDetail->variation)->first();
|
||||
if ($product_stock) {
|
||||
$quantity = 1;
|
||||
|
||||
if ($product->digital != 1) {
|
||||
$quantity = $product_stock->qty;
|
||||
if ($quantity > 0) {
|
||||
if ($cart->exists) {
|
||||
$order_qty = $cart->quantity + $order_qty;
|
||||
}
|
||||
//If order qty is greater then the product stock, set order qty = current product stock qty
|
||||
$quantity = ($quantity >= $order_qty) ? $order_qty : $quantity;
|
||||
} else {
|
||||
array_push($failed_msgs, $product->getTranslation('name') . ' ' . translate('is stock out.'));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
$price = CartUtility::get_price($product, $product_stock, $quantity);
|
||||
$tax = CartUtility::tax_calculation($product, $price);
|
||||
|
||||
CartUtility::save_cart_data($cart, $product, $price, $tax, $quantity);
|
||||
array_push($success_msgs, $product->getTranslation('name') . ' ' . translate('added to cart.'));
|
||||
} else {
|
||||
array_push($failed_msgs, $product->getTranslation('name') . ' ' . translate(' is stock out.'));
|
||||
}
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'success_msgs' => $success_msgs,
|
||||
'failed_msgs' => $failed_msgs
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,157 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\V2\Seller;
|
||||
|
||||
use App\Http\Controllers\Api\V2\Controller;
|
||||
use App\Http\Resources\V2\Seller\DigitalProductCollection;
|
||||
use App\Http\Resources\V2\Seller\CategoriesCollection;
|
||||
use App\Http\Resources\V2\Seller\DigitalProductDetailsResource;
|
||||
use App\Models\Category;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Product;
|
||||
use App\Models\ProductTax;
|
||||
use App\Models\ProductTranslation;
|
||||
use App\Models\Upload;
|
||||
use Auth;
|
||||
|
||||
|
||||
use App\Services\ProductService;
|
||||
use App\Services\ProductStockService;
|
||||
use App\Services\ProductTaxService;
|
||||
use Artisan;
|
||||
|
||||
class DigitalProductController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$products = Product::where('digital', 1)->where('user_id', Auth::user()->id)->orderBy('created_at', 'desc');
|
||||
return new DigitalProductCollection($products->paginate(10));
|
||||
}
|
||||
|
||||
public function getCategory()
|
||||
{
|
||||
$categories = Category::where('parent_id', 0)
|
||||
->where('digital', 1)
|
||||
->with('childrenCategories')
|
||||
->get();
|
||||
return CategoriesCollection::collection($categories);
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
if (addon_is_activated('seller_subscription')) {
|
||||
if (!seller_package_validity_check(auth()->user()->id)) {
|
||||
return $this->failed(translate('Please upgrade your package.'));
|
||||
}
|
||||
}
|
||||
|
||||
if (auth()->user()->user_type != 'seller') {
|
||||
return $this->failed(translate('Unauthenticated User.'));
|
||||
}
|
||||
|
||||
// Product Store
|
||||
$product = (new ProductService)->store($request->except([
|
||||
'_token', 'tax_id', 'tax', 'tax_type'
|
||||
]));
|
||||
|
||||
$request->merge(['product_id' => $product->id, 'current_stock' => 0]);
|
||||
|
||||
//Product Stock
|
||||
(new ProductStockService)->store($request->only([
|
||||
'unit_price', 'current_stock', 'product_id'
|
||||
]), $product);
|
||||
|
||||
//VAT & Tax
|
||||
if ($request->tax_id) {
|
||||
(new ProductTaxService)->store($request->only([
|
||||
'tax_id', 'tax', 'tax_type', 'product_id'
|
||||
]));
|
||||
}
|
||||
|
||||
// Product Translations
|
||||
$request->merge(['lang' => env('DEFAULT_LANGUAGE')]);
|
||||
ProductTranslation::create($request->only([
|
||||
'lang', 'name', 'unit', 'description', 'product_id'
|
||||
]));
|
||||
|
||||
return $this->success(translate('Digital Product has been inserted successfully'));
|
||||
}
|
||||
|
||||
public function edit(Request $request, $id)
|
||||
{
|
||||
$product = Product::findOrFail($id);
|
||||
$product->lang = $request->lang == null ? env("DEFAULT_LANGUAGE") : $request->lang;
|
||||
|
||||
return new DigitalProductDetailsResource($product);
|
||||
}
|
||||
|
||||
public function update(Request $request, Product $product)
|
||||
{
|
||||
//Product Update
|
||||
$product = (new ProductService)->update($request->except([
|
||||
'_token', 'tax_id', 'tax', 'tax_type'
|
||||
]), $product);
|
||||
|
||||
//Product Stock
|
||||
foreach ($product->stocks as $key => $stock) {
|
||||
$stock->delete();
|
||||
}
|
||||
|
||||
$request->merge(['product_id' => $product->id, 'current_stock' => 0]);
|
||||
|
||||
(new ProductStockService)->store($request->only([
|
||||
'unit_price', 'current_stock', 'product_id'
|
||||
]), $product);
|
||||
|
||||
//VAT & Tax
|
||||
if ($request->tax_id) {
|
||||
ProductTax::where('product_id', $product->id)->delete();
|
||||
(new ProductTaxService)->store($request->only([
|
||||
'tax_id', 'tax', 'tax_type', 'product_id'
|
||||
]));
|
||||
}
|
||||
|
||||
// Product Translations
|
||||
ProductTranslation::updateOrCreate(
|
||||
$request->only(['lang', 'product_id']),
|
||||
$request->only(['name', 'description'])
|
||||
);
|
||||
|
||||
return $this->success(translate('Digital Product has been Updated successfully'));
|
||||
}
|
||||
|
||||
public function destroy($id)
|
||||
{
|
||||
$product_destroy = (new ProductService)->destroy($id);
|
||||
|
||||
if ($product_destroy) {
|
||||
Artisan::call('view:clear');
|
||||
Artisan::call('cache:clear');
|
||||
return $this->success(translate('Digital Product deleted successfully'));
|
||||
}
|
||||
return $this->failed(translate('Something Went Wrong.'));
|
||||
}
|
||||
|
||||
// Digital Product File Download
|
||||
public function download($id)
|
||||
{
|
||||
if (auth()->user()->user_type != 'seller') {
|
||||
return $this->failed(translate('Unauthenticated User.'));
|
||||
}
|
||||
|
||||
$product = Product::where('id', $id)->where('user_id', auth()->user()->id)->first();
|
||||
if (!$product) {
|
||||
return $this->failed(translate('This product is not yours'));
|
||||
}
|
||||
|
||||
$upload = Upload::findOrFail($product->file_name);
|
||||
if (env('FILESYSTEM_DRIVER') == "s3") {
|
||||
return \Storage::disk('s3')->download($upload->file_name, $upload->file_original_name . "." . $upload->extension);
|
||||
} else {
|
||||
if (file_exists(base_path('public/' . $upload->file_name))) {
|
||||
$file = public_path() . "/$upload->file_name";
|
||||
return response()->download($file, config('app.name') . "_" . $upload->file_original_name . "." . $upload->extension);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -196,6 +196,12 @@ class ProductController extends Controller
|
||||
|
||||
public function change_status(Request $request)
|
||||
{
|
||||
if (addon_is_activated('seller_subscription')) {
|
||||
if (!seller_package_validity_check()) {
|
||||
return $this->failed(translate('Please upgrade your package'));
|
||||
}
|
||||
}
|
||||
|
||||
$product = Product::where('user_id', auth()->user()->id)
|
||||
->where('id', $request->id)
|
||||
->update([
|
||||
|
||||
@@ -122,12 +122,11 @@ class ShopController extends Controller
|
||||
->select(DB::raw("sum(grand_total) as total, DATE_FORMAT(created_at, '%b-%d') as date"))
|
||||
->groupBy(DB::raw("DATE_FORMAT(created_at, '%Y-%m-%d')"))
|
||||
->get()->toArray();
|
||||
//dd($data->toArray());
|
||||
|
||||
//$array_date = [];
|
||||
$sales_array = [];
|
||||
for ($i = 0; $i < 7; $i++) {
|
||||
$new_date = date("M-d", strtotime(($i + 1) . " days ago"));
|
||||
for ($i = 1; $i < 8; $i++) {
|
||||
$new_date = date("M-d", strtotime(($i - 1) . " days ago"));
|
||||
//$array_date[] = date("M-d", strtotime($i." days ago"));
|
||||
|
||||
$sales_array[$i]['date'] = $new_date;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\V2;
|
||||
|
||||
use App\Models\Order;
|
||||
@@ -6,12 +7,15 @@ use Illuminate\Http\Request;
|
||||
use App\Http\Resources\V2\PurchaseHistoryMiniCollection;
|
||||
use App\Http\Resources\V2\PurchaseHistoryCollection;
|
||||
use App\Http\Resources\V2\PurchaseHistoryItemsCollection;
|
||||
use App\Http\Resources\V2\ShopCollection;
|
||||
use App\Models\OrderDetail;
|
||||
|
||||
class SellerController extends Controller {
|
||||
|
||||
|
||||
|
||||
class SellerController extends Controller
|
||||
{
|
||||
|
||||
public function topSellers()
|
||||
{
|
||||
$best_selers = get_best_sellers(5);
|
||||
return new ShopCollection($best_selers);
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -56,7 +56,7 @@ class ShippingController extends Controller
|
||||
|
||||
//Total shipping cost $calculate_shipping
|
||||
$total_shipping_cost = Cart::where('user_id', auth()->user()->id)->sum('shipping_cost');
|
||||
return response()->json(['result' => true, 'shipping_type' => get_setting('shipping_type'), 'value' => convert_price($total_shipping_cost), 'value_string' => format_price($total_shipping_cost)], 200);
|
||||
return response()->json(['result' => true, 'shipping_type' => get_setting('shipping_type'), 'value' => convert_price($total_shipping_cost), 'value_string' => format_price(convert_price($total_shipping_cost))], 200);
|
||||
}
|
||||
|
||||
|
||||
@@ -79,6 +79,7 @@ class ShippingController extends Controller
|
||||
$shop_items_data_item["product_id"] = intval($shop_items_raw_data_item["product_id"]);
|
||||
$shop_items_data_item["product_name"] = $product->getTranslation('name');
|
||||
$shop_items_data_item["product_thumbnail_image"] = uploaded_asset($product->thumbnail_img);
|
||||
$shop_items_data_item["product_is_digital"] = $product->digital == 1;
|
||||
/*
|
||||
$shop_items_data_item["variation"] = $shop_items_raw_data_item["variation"];
|
||||
$shop_items_data_item["price"] =(double) cart_product_price($shop_items_raw_data_item, $product, false, false);
|
||||
@@ -90,7 +91,6 @@ class ShippingController extends Controller
|
||||
$shop_items_data_item["upper_limit"] = intval($product->stocks->where('variant', $shop_items_raw_data_item['variation'])->first()->qty) ;
|
||||
*/
|
||||
$shop_items_data[] = $shop_items_data_item;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -102,12 +102,10 @@ class ShippingController extends Controller
|
||||
$shop['name'] = $shop_data->name;
|
||||
$shop['owner_id'] = (int) $owner_id;
|
||||
$shop['cart_items'] = $shop_items_data;
|
||||
|
||||
} else {
|
||||
$shop['name'] = "Inhouse";
|
||||
$shop['owner_id'] = (int) $owner_id;
|
||||
$shop['cart_items'] = $shop_items_data;
|
||||
|
||||
}
|
||||
$shop['carriers'] = seller_base_carrier_list($owner_id);
|
||||
$shop['pickup_points'] = [];
|
||||
|
||||
@@ -14,7 +14,7 @@ class WalletController extends Controller
|
||||
$user = User::find(auth()->user()->id);
|
||||
$latest = Wallet::where('user_id', auth()->user()->id)->latest()->first();
|
||||
return response()->json([
|
||||
'balance' => format_price($user->balance),
|
||||
'balance' => single_price($user->balance),
|
||||
'last_recharged' => $latest == null ? "Not Available" : $latest->created_at->diffForHumans(),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -44,134 +44,134 @@ class RegisterController extends Controller
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
// protected $redirectTo = '/';
|
||||
protected $redirectTo = '/';
|
||||
|
||||
// /**
|
||||
// * Create a new controller instance.
|
||||
// *
|
||||
// * @return void
|
||||
// */
|
||||
// public function __construct()
|
||||
// {
|
||||
// $this->middleware('guest');
|
||||
// }
|
||||
|
||||
// /**
|
||||
// * Get a validator for an incoming registration request.
|
||||
// *
|
||||
// * @param array $data
|
||||
// * @return \Illuminate\Contracts\Validation\Validator
|
||||
// */
|
||||
// protected function validator(array $data)
|
||||
// {
|
||||
// return Validator::make($data, [
|
||||
// 'name' => 'required|string|max:255',
|
||||
// 'password' => 'required|string|min:6|confirmed',
|
||||
// 'g-recaptcha-response' => [
|
||||
// Rule::when(get_setting('google_recaptcha') == 1, ['required', new Recaptcha()], ['sometimes'])
|
||||
// ]
|
||||
// ]);
|
||||
// }
|
||||
|
||||
// /**
|
||||
// * Create a new user instance after a valid registration.
|
||||
// *
|
||||
// * @param array $data
|
||||
// * @return \App\Models\User
|
||||
// */
|
||||
// protected function create(array $data)
|
||||
// {
|
||||
// if (filter_var($data['email'], FILTER_VALIDATE_EMAIL)) {
|
||||
// $user = User::create([
|
||||
// 'name' => $data['name'],
|
||||
// 'email' => $data['email'],
|
||||
// 'password' => Hash::make($data['password']),
|
||||
// ]);
|
||||
// }
|
||||
// else {
|
||||
// if (addon_is_activated('otp_system')){
|
||||
// $user = User::create([
|
||||
// 'name' => $data['name'],
|
||||
// 'phone' => '+'.$data['country_code'].$data['phone'],
|
||||
// 'password' => Hash::make($data['password']),
|
||||
// 'verification_code' => rand(100000, 999999)
|
||||
// ]);
|
||||
|
||||
// $otpController = new OTPVerificationController;
|
||||
// $otpController->send_code($user);
|
||||
// }
|
||||
// }
|
||||
|
||||
// if(session('temp_user_id') != null){
|
||||
// Cart::where('temp_user_id', session('temp_user_id'))
|
||||
// ->update([
|
||||
// 'user_id' => $user->id,
|
||||
// 'temp_user_id' => null
|
||||
// ]);
|
||||
|
||||
// Session::forget('temp_user_id');
|
||||
// }
|
||||
|
||||
// if(Cookie::has('referral_code')){
|
||||
// $referral_code = Cookie::get('referral_code');
|
||||
// $referred_by_user = User::where('referral_code', $referral_code)->first();
|
||||
// if($referred_by_user != null){
|
||||
// $user->referred_by = $referred_by_user->id;
|
||||
// $user->save();
|
||||
// }
|
||||
// }
|
||||
|
||||
// return $user;
|
||||
// }
|
||||
|
||||
// public function register(Request $request)
|
||||
// {
|
||||
// if (filter_var($request->email, FILTER_VALIDATE_EMAIL)) {
|
||||
// if(User::where('email', $request->email)->first() != null){
|
||||
// flash(translate('Email or Phone already exists.'));
|
||||
// return back();
|
||||
// }
|
||||
// }
|
||||
// elseif (User::where('phone', '+'.$request->country_code.$request->phone)->first() != null) {
|
||||
// flash(translate('Phone already exists.'));
|
||||
// return back();
|
||||
// }
|
||||
|
||||
// $this->validator($request->all())->validate();
|
||||
|
||||
// $user = $this->create($request->all());
|
||||
|
||||
// $this->guard()->login($user);
|
||||
|
||||
// if($user->email != null){
|
||||
// if(BusinessSetting::where('type', 'email_verification')->first()->value != 1){
|
||||
// $user->email_verified_at = date('Y-m-d H:m:s');
|
||||
// $user->save();
|
||||
// flash(translate('Registration successful.'))->success();
|
||||
// }
|
||||
// else {
|
||||
// try {
|
||||
// $user->sendEmailVerificationNotification();
|
||||
// flash(translate('Registration successful. Please verify your email.'))->success();
|
||||
// } catch (\Throwable $th) {
|
||||
// $user->delete();
|
||||
// flash(translate('Registration failed. Please try again later.'))->error();
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// return $this->registered($request, $user)
|
||||
// ?: redirect($this->redirectPath());
|
||||
// }
|
||||
|
||||
// protected function registered(Request $request, $user)
|
||||
// {
|
||||
// if ($user->email == null) {
|
||||
// return redirect()->route('verification');
|
||||
// }elseif(session('link') != null){
|
||||
// return redirect(session('link'));
|
||||
// }else {
|
||||
// return redirect()->route('home');
|
||||
// }
|
||||
// }
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('guest');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a validator for an incoming registration request.
|
||||
*
|
||||
* @param array $data
|
||||
* @return \Illuminate\Contracts\Validation\Validator
|
||||
*/
|
||||
protected function validator(array $data)
|
||||
{
|
||||
return Validator::make($data, [
|
||||
'name' => 'required|string|max:255',
|
||||
'password' => 'required|string|min:6|confirmed',
|
||||
'g-recaptcha-response' => [
|
||||
Rule::when(get_setting('google_recaptcha') == 1, ['required', new Recaptcha()], ['sometimes'])
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new user instance after a valid registration.
|
||||
*
|
||||
* @param array $data
|
||||
* @return \App\Models\User
|
||||
*/
|
||||
protected function create(array $data)
|
||||
{
|
||||
if (filter_var($data['email'], FILTER_VALIDATE_EMAIL)) {
|
||||
$user = User::create([
|
||||
'name' => $data['name'],
|
||||
'email' => $data['email'],
|
||||
'password' => Hash::make($data['password']),
|
||||
]);
|
||||
}
|
||||
else {
|
||||
if (addon_is_activated('otp_system')){
|
||||
$user = User::create([
|
||||
'name' => $data['name'],
|
||||
'phone' => '+'.$data['country_code'].$data['phone'],
|
||||
'password' => Hash::make($data['password']),
|
||||
'verification_code' => rand(100000, 999999)
|
||||
]);
|
||||
|
||||
$otpController = new OTPVerificationController;
|
||||
$otpController->send_code($user);
|
||||
}
|
||||
}
|
||||
|
||||
if(session('temp_user_id') != null){
|
||||
Cart::where('temp_user_id', session('temp_user_id'))
|
||||
->update([
|
||||
'user_id' => $user->id,
|
||||
'temp_user_id' => null
|
||||
]);
|
||||
|
||||
Session::forget('temp_user_id');
|
||||
}
|
||||
|
||||
if(Cookie::has('referral_code')){
|
||||
$referral_code = Cookie::get('referral_code');
|
||||
$referred_by_user = User::where('referral_code', $referral_code)->first();
|
||||
if($referred_by_user != null){
|
||||
$user->referred_by = $referred_by_user->id;
|
||||
$user->save();
|
||||
}
|
||||
}
|
||||
|
||||
return $user;
|
||||
}
|
||||
|
||||
public function register(Request $request)
|
||||
{
|
||||
if (filter_var($request->email, FILTER_VALIDATE_EMAIL)) {
|
||||
if(User::where('email', $request->email)->first() != null){
|
||||
flash(translate('Email or Phone already exists.'));
|
||||
return back();
|
||||
}
|
||||
}
|
||||
elseif (User::where('phone', '+'.$request->country_code.$request->phone)->first() != null) {
|
||||
flash(translate('Phone already exists.'));
|
||||
return back();
|
||||
}
|
||||
|
||||
$this->validator($request->all())->validate();
|
||||
|
||||
$user = $this->create($request->all());
|
||||
|
||||
$this->guard()->login($user);
|
||||
|
||||
if($user->email != null){
|
||||
if(BusinessSetting::where('type', 'email_verification')->first()->value != 1){
|
||||
$user->email_verified_at = date('Y-m-d H:m:s');
|
||||
$user->save();
|
||||
flash(translate('Registration successful.'))->success();
|
||||
}
|
||||
else {
|
||||
try {
|
||||
$user->sendEmailVerificationNotification();
|
||||
flash(translate('Registration successful. Please verify your email.'))->success();
|
||||
} catch (\Throwable $th) {
|
||||
$user->delete();
|
||||
flash(translate('Registration failed. Please try again later.'))->error();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $this->registered($request, $user)
|
||||
?: redirect($this->redirectPath());
|
||||
}
|
||||
|
||||
protected function registered(Request $request, $user)
|
||||
{
|
||||
if ($user->email == null) {
|
||||
return redirect()->route('verification');
|
||||
}elseif(session('link') != null){
|
||||
return redirect(session('link'));
|
||||
}else {
|
||||
return redirect()->route('home');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,31 +8,95 @@ use App\Models\User;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\OTPVerificationController;
|
||||
|
||||
class VerificationController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Email Verification Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller is responsible for handling email verification for any
|
||||
| user that recently registered with the application. Emails may also
|
||||
| be re-sent if the user didn't receive the original email message.
|
||||
|
|
||||
*/
|
||||
|
||||
public function verify(Request $request, $id, $hash)
|
||||
use VerifiesEmails;
|
||||
|
||||
/**
|
||||
* Where to redirect users after verification.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $redirectTo = '/';
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
// Aquí debes implementar la lógica para verificar el token y marcar el correo electrónico como verificado
|
||||
// Puedes usar el $id y $hash para buscar el usuario en la base de datos y realizar la verificación
|
||||
//$this->middleware('auth');
|
||||
$this->middleware('signed')->only('verify');
|
||||
$this->middleware('throttle:6,1')->only('verify', 'resend');
|
||||
}
|
||||
|
||||
// Ejemplo de implementación:
|
||||
$user = User::find($id);
|
||||
/**
|
||||
* Show the email verification notice.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function show(Request $request)
|
||||
{
|
||||
if ($request->user()->email != null) {
|
||||
return $request->user()->hasVerifiedEmail()
|
||||
? redirect($this->redirectPath())
|
||||
: view('auth.verify');
|
||||
}
|
||||
else {
|
||||
$otpController = new OTPVerificationController;
|
||||
$otpController->send_code($request->user());
|
||||
return redirect()->route('verification');
|
||||
}
|
||||
}
|
||||
|
||||
if ($user && hash_equals($hash, $user->confirmation_code)) {
|
||||
$user->email_verified_at = now();
|
||||
|
||||
/**
|
||||
* Resend the email verification notification.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function resend(Request $request)
|
||||
{
|
||||
if ($request->user()->hasVerifiedEmail()) {
|
||||
return redirect($this->redirectPath());
|
||||
}
|
||||
|
||||
$request->user()->sendEmailVerificationNotification();
|
||||
|
||||
return back()->with('resent', true);
|
||||
}
|
||||
|
||||
public function verification_confirmation($code){
|
||||
$user = User::where('verification_code', $code)->first();
|
||||
if($user != null){
|
||||
$user->email_verified_at = Carbon::now();
|
||||
$user->save();
|
||||
|
||||
// Inicia sesión al usuario si lo deseas
|
||||
auth()->login($user);
|
||||
|
||||
// Redirige al usuario a la página de éxito o a donde desees
|
||||
return redirect()->route('shop.view.signup.complete');
|
||||
auth()->login($user, true);
|
||||
flash(translate('Your email has been verified successfully'))->success();
|
||||
}
|
||||
else {
|
||||
flash(translate('Sorry, we could not verifiy you. Please try again'))->error();
|
||||
}
|
||||
|
||||
// Si la verificación falla, puedes redirigir al usuario a una página de error o mostrar un mensaje de error
|
||||
return redirect()->route('shop.view.email.verification');
|
||||
if($user->user_type == 'seller') {
|
||||
return redirect()->route('seller.dashboard');
|
||||
}
|
||||
|
||||
|
||||
return redirect()->route('dashboard');
|
||||
}
|
||||
}
|
||||
@@ -489,11 +489,8 @@ class BusinessSettingsController extends Controller
|
||||
}
|
||||
|
||||
}
|
||||
elseif ($request->type == 'FILESYSTEM_DRIVER' && $request->value == '1') {
|
||||
$this->overWriteEnvFile($request->type, 's3');
|
||||
}
|
||||
elseif ($request->type == 'FILESYSTEM_DRIVER' && $request->value == '0') {
|
||||
$this->overWriteEnvFile($request->type, 'local');
|
||||
elseif ($request->type == 'FILESYSTEM_DRIVER') {
|
||||
$this->overWriteEnvFile($request->type, $request->value);
|
||||
}
|
||||
|
||||
return '1';
|
||||
|
||||
@@ -7,6 +7,7 @@ use App\Models\Product;
|
||||
use App\Models\Category;
|
||||
use App\Models\Cart;
|
||||
use Auth;
|
||||
use App\Utility\CartUtility;
|
||||
use Session;
|
||||
use Cookie;
|
||||
|
||||
@@ -51,32 +52,23 @@ class CartController extends Controller
|
||||
|
||||
public function addToCart(Request $request)
|
||||
{
|
||||
$carts = Cart::where('user_id', auth()->user()->id)->get();
|
||||
$check_auction_in_cart = CartUtility::check_auction_in_cart($carts);
|
||||
$product = Product::find($request->id);
|
||||
$carts = array();
|
||||
$data = array();
|
||||
|
||||
if(auth()->user() != null) {
|
||||
$user_id = Auth::user()->id;
|
||||
$data['user_id'] = $user_id;
|
||||
$carts = Cart::where('user_id', $user_id)->get();
|
||||
} else {
|
||||
if($request->session()->get('temp_user_id')) {
|
||||
$temp_user_id = $request->session()->get('temp_user_id');
|
||||
} else {
|
||||
$temp_user_id = bin2hex(random_bytes(10));
|
||||
$request->session()->put('temp_user_id', $temp_user_id);
|
||||
}
|
||||
$data['temp_user_id'] = $temp_user_id;
|
||||
$carts = Cart::where('temp_user_id', $temp_user_id)->get();
|
||||
if($check_auction_in_cart && $product->auction_product == 0) {
|
||||
return array(
|
||||
'status' => 0,
|
||||
'cart_count' => count($carts),
|
||||
'modal_view' => view('frontend.partials.removeAuctionProductFromCart')->render(),
|
||||
'nav_cart_view' => view('frontend.partials.cart')->render(),
|
||||
);
|
||||
}
|
||||
|
||||
$data['product_id'] = $product->id;
|
||||
$data['owner_id'] = $product->user_id;
|
||||
$quantity = $request['quantity'];
|
||||
|
||||
$str = '';
|
||||
$tax = 0;
|
||||
if($product->auction_product == 0){
|
||||
if($product->digital != 1 && $request->quantity < $product->min_qty) {
|
||||
if ($quantity < $product->min_qty) {
|
||||
return array(
|
||||
'status' => 0,
|
||||
'cart_count' => count($carts),
|
||||
@@ -86,98 +78,17 @@ class CartController extends Controller
|
||||
}
|
||||
|
||||
//check the color enabled or disabled for the product
|
||||
if($request->has('color')) {
|
||||
$str = $request['color'];
|
||||
}
|
||||
|
||||
if ($product->digital != 1) {
|
||||
//Gets all the choice values of customer choice option and generate a string like Black-S-Cotton
|
||||
foreach (json_decode($product->choice_options) as $key => $choice) {
|
||||
if($str != null){
|
||||
$str .= '-'.str_replace(' ', '', $request['attribute_id_'.$choice->attribute_id]);
|
||||
}
|
||||
else{
|
||||
$str .= str_replace(' ', '', $request['attribute_id_'.$choice->attribute_id]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$data['variation'] = $str;
|
||||
|
||||
$str = CartUtility::create_cart_variant($product, $request->all());
|
||||
$product_stock = $product->stocks->where('variant', $str)->first();
|
||||
$price = $product_stock->price;
|
||||
|
||||
if($product->wholesale_product){
|
||||
$wholesalePrice = $product_stock->wholesalePrices->where('min_qty', '<=', $request->quantity)->where('max_qty', '>=', $request->quantity)->first();
|
||||
if($wholesalePrice){
|
||||
$price = $wholesalePrice->price;
|
||||
}
|
||||
}
|
||||
$cart = Cart::firstOrNew([
|
||||
'variation' => $str,
|
||||
'user_id' => auth()->user()->id,
|
||||
'product_id' => $request['id']
|
||||
]);
|
||||
|
||||
$quantity = $product_stock->qty;
|
||||
|
||||
if($quantity < $request['quantity']) {
|
||||
return array(
|
||||
'status' => 0,
|
||||
'cart_count' => count($carts),
|
||||
'modal_view' => view('frontend.partials.outOfStockCart')->render(),
|
||||
'nav_cart_view' => view('frontend.partials.cart')->render(),
|
||||
);
|
||||
}
|
||||
|
||||
//discount calculation
|
||||
$discount_applicable = false;
|
||||
|
||||
if ($product->discount_start_date == null) {
|
||||
$discount_applicable = true;
|
||||
}
|
||||
elseif (strtotime(date('d-m-Y H:i:s')) >= $product->discount_start_date &&
|
||||
strtotime(date('d-m-Y H:i:s')) <= $product->discount_end_date) {
|
||||
$discount_applicable = true;
|
||||
}
|
||||
|
||||
if ($discount_applicable) {
|
||||
if($product->discount_type == 'percent'){
|
||||
$price -= ($price*$product->discount)/100;
|
||||
}
|
||||
elseif($product->discount_type == 'amount'){
|
||||
$price -= $product->discount;
|
||||
}
|
||||
}
|
||||
|
||||
//calculation of taxes
|
||||
foreach ($product->taxes as $product_tax) {
|
||||
if($product_tax->tax_type == 'percent'){
|
||||
$tax += ($price * $product_tax->tax) / 100;
|
||||
}
|
||||
elseif($product_tax->tax_type == 'amount'){
|
||||
$tax += $product_tax->tax;
|
||||
}
|
||||
}
|
||||
|
||||
$data['quantity'] = $request['quantity'];
|
||||
$data['price'] = $price;
|
||||
$data['tax'] = $tax;
|
||||
//$data['shipping'] = 0;
|
||||
$data['shipping_cost'] = 0;
|
||||
$data['product_referral_code'] = null;
|
||||
$data['cash_on_delivery'] = $product->cash_on_delivery;
|
||||
$data['digital'] = $product->digital;
|
||||
|
||||
if ($request['quantity'] == null){
|
||||
$data['quantity'] = 1;
|
||||
}
|
||||
|
||||
if(Cookie::has('referred_product_id') && Cookie::get('referred_product_id') == $product->id) {
|
||||
$data['product_referral_code'] = Cookie::get('product_referral_code');
|
||||
}
|
||||
|
||||
if($carts && count($carts) > 0){
|
||||
$foundInCart = false;
|
||||
|
||||
foreach ($carts as $key => $cartItem){
|
||||
$cart_product = Product::where('id', $cartItem['product_id'])->first();
|
||||
if($cart_product->auction_product == 1){
|
||||
if ($cart->exists && $product->digital == 0) {
|
||||
if ($product->auction_product == 1 && ($cart->product_id == $product->id)) {
|
||||
return array(
|
||||
'status' => 0,
|
||||
'cart_count' => count($carts),
|
||||
@@ -185,11 +96,7 @@ class CartController extends Controller
|
||||
'nav_cart_view' => view('frontend.partials.cart')->render(),
|
||||
);
|
||||
}
|
||||
|
||||
if($cartItem['product_id'] == $request->id) {
|
||||
$product_stock = $cart_product->stocks->where('variant', $str)->first();
|
||||
$quantity = $product_stock->qty;
|
||||
if($quantity < $cartItem['quantity'] + $request['quantity']){
|
||||
if ($product_stock->qty < $cart->quantity + $request['quantity']) {
|
||||
return array(
|
||||
'status' => 0,
|
||||
'cart_count' => count($carts),
|
||||
@@ -197,85 +104,22 @@ class CartController extends Controller
|
||||
'nav_cart_view' => view('frontend.partials.cart')->render(),
|
||||
);
|
||||
}
|
||||
if(($str != null && $cartItem['variation'] == $str) || $str == null){
|
||||
$foundInCart = true;
|
||||
|
||||
$cartItem['quantity'] += $request['quantity'];
|
||||
|
||||
if($cart_product->wholesale_product){
|
||||
$wholesalePrice = $product_stock->wholesalePrices->where('min_qty', '<=', $request->quantity)->where('max_qty', '>=', $request->quantity)->first();
|
||||
if($wholesalePrice){
|
||||
$price = $wholesalePrice->price;
|
||||
}
|
||||
$quantity = $cart->quantity + $request['quantity'];
|
||||
}
|
||||
|
||||
$cartItem['price'] = $price;
|
||||
$price = CartUtility::get_price($product, $product_stock, $request->quantity);
|
||||
$tax = CartUtility::tax_calculation($product, $price);
|
||||
|
||||
$cartItem->save();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!$foundInCart) {
|
||||
Cart::create($data);
|
||||
}
|
||||
}
|
||||
else{
|
||||
Cart::create($data);
|
||||
}
|
||||
|
||||
if(auth()->user() != null) {
|
||||
$user_id = Auth::user()->id;
|
||||
$carts = Cart::where('user_id', $user_id)->get();
|
||||
} else {
|
||||
$temp_user_id = $request->session()->get('temp_user_id');
|
||||
$carts = Cart::where('temp_user_id', $temp_user_id)->get();
|
||||
}
|
||||
CartUtility::save_cart_data($cart, $product, $price, $tax, $quantity);
|
||||
|
||||
$carts = Cart::where('user_id', auth()->user()->id)->get();
|
||||
return array(
|
||||
'status' => 1,
|
||||
'cart_count' => count($carts),
|
||||
'modal_view' => view('frontend.partials.addedToCart', compact('product', 'data'))->render(),
|
||||
'modal_view' => view('frontend.partials.addedToCart', compact('product', 'cart'))->render(),
|
||||
'nav_cart_view' => view('frontend.partials.cart')->render(),
|
||||
);
|
||||
}
|
||||
else{
|
||||
$price = $product->bids->max('amount');
|
||||
|
||||
foreach ($product->taxes as $product_tax) {
|
||||
if($product_tax->tax_type == 'percent'){
|
||||
$tax += ($price * $product_tax->tax) / 100;
|
||||
}
|
||||
elseif($product_tax->tax_type == 'amount'){
|
||||
$tax += $product_tax->tax;
|
||||
}
|
||||
}
|
||||
|
||||
$data['quantity'] = 1;
|
||||
$data['price'] = $price;
|
||||
$data['tax'] = $tax;
|
||||
$data['shipping_cost'] = 0;
|
||||
$data['product_referral_code'] = null;
|
||||
$data['cash_on_delivery'] = $product->cash_on_delivery;
|
||||
$data['digital'] = $product->digital;
|
||||
|
||||
if(count($carts) == 0){
|
||||
Cart::create($data);
|
||||
}
|
||||
if(auth()->user() != null) {
|
||||
$user_id = Auth::user()->id;
|
||||
$carts = Cart::where('user_id', $user_id)->get();
|
||||
} else {
|
||||
$temp_user_id = $request->session()->get('temp_user_id');
|
||||
$carts = Cart::where('temp_user_id', $temp_user_id)->get();
|
||||
}
|
||||
return array(
|
||||
'status' => 1,
|
||||
'cart_count' => count($carts),
|
||||
'modal_view' => view('frontend.partials.addedToCart', compact('product', 'data'))->render(),
|
||||
'nav_cart_view' => view('frontend.partials.cart')->render(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//removes from Cart
|
||||
public function removeFromCart(Request $request)
|
||||
@@ -312,17 +156,17 @@ class CartController extends Controller
|
||||
|
||||
if ($product->discount_start_date == null) {
|
||||
$discount_applicable = true;
|
||||
}
|
||||
elseif (strtotime(date('d-m-Y H:i:s')) >= $product->discount_start_date &&
|
||||
strtotime(date('d-m-Y H:i:s')) <= $product->discount_end_date) {
|
||||
} elseif (
|
||||
strtotime(date('d-m-Y H:i:s')) >= $product->discount_start_date &&
|
||||
strtotime(date('d-m-Y H:i:s')) <= $product->discount_end_date
|
||||
) {
|
||||
$discount_applicable = true;
|
||||
}
|
||||
|
||||
if ($discount_applicable) {
|
||||
if ($product->discount_type == 'percent') {
|
||||
$price -= ($price * $product->discount) / 100;
|
||||
}
|
||||
elseif($product->discount_type == 'amount'){
|
||||
} elseif ($product->discount_type == 'amount') {
|
||||
$price -= $product->discount;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ class CheckoutController extends Controller
|
||||
$subtotal += cart_product_price($cartItem, $product, false, false) * $cartItem['quantity'];
|
||||
}
|
||||
if ($subtotal < get_setting('minimum_order_amount')) {
|
||||
flash(translate('You order amount is less then the minimum order amount'))->warning();
|
||||
flash(translate('You order amount is less than the minimum order amount'))->warning();
|
||||
return redirect()->route('home');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,10 @@ use Illuminate\Http\Request;
|
||||
use App\Models\SellerWithdrawRequest;
|
||||
use App\Models\Payment;
|
||||
use App\Models\Shop;
|
||||
use App\Models\User;
|
||||
use Session;
|
||||
use Illuminate\Support\Facades\Notification;
|
||||
use App\Notifications\PayoutNotification;
|
||||
|
||||
class CommissionController extends Controller
|
||||
{
|
||||
@@ -77,6 +80,9 @@ class CommissionController extends Controller
|
||||
$seller_withdraw_request->save();
|
||||
}
|
||||
|
||||
$users = User::findMany([$shop->user->id, User::where('user_type', 'admin')->first()->id]);
|
||||
Notification::send($users, new PayoutNotification($shop->user, $payment_data['amount'], 'paid'));
|
||||
|
||||
Session::forget('payment_data');
|
||||
Session::forget('payment_type');
|
||||
|
||||
|
||||
@@ -4,19 +4,20 @@ namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Product;
|
||||
use App\Models\ProductStock;
|
||||
use App\Models\Category;
|
||||
use App\Models\ProductTax;
|
||||
use App\Models\ProductTranslation;
|
||||
use App\Models\Upload;
|
||||
use Artisan;
|
||||
|
||||
use App\Services\ProductService;
|
||||
use App\Services\ProductStockService;
|
||||
use App\Services\ProductTaxService;
|
||||
use Auth;
|
||||
|
||||
class DigitalProductController extends Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
|
||||
// Staff Permission Check
|
||||
$this->middleware(['permission:show_digital_products'])->only('index');
|
||||
$this->middleware(['permission:add_digital_product'])->only('create');
|
||||
@@ -33,13 +34,15 @@ class DigitalProductController extends Controller
|
||||
public function index(Request $request)
|
||||
{
|
||||
$sort_search = null;
|
||||
$products = Product::orderBy('created_at', 'desc');
|
||||
$products = Product::query();
|
||||
$products->where('added_by', 'admin');
|
||||
if ($request->has('search')) {
|
||||
$sort_search = $request->search;
|
||||
$products = $products->where('name', 'like', '%' . $sort_search . '%');
|
||||
}
|
||||
$products = $products->where('digital', 1)->paginate(10);
|
||||
return view('backend.product.digital_products.index', compact('products', 'sort_search'));
|
||||
$products = $products->where('digital', 1)->orderBy('created_at', 'desc')->paginate(10);
|
||||
$type = 'Admin';
|
||||
return view('backend.product.digital_products.index', compact('products', 'sort_search', 'type'));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -64,39 +67,18 @@ class DigitalProductController extends Controller
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$product = new Product;
|
||||
$product->name = $request->name;
|
||||
$product->added_by = 'admin';
|
||||
$product->user_id = Auth::user()->id;
|
||||
$product->category_id = $request->category_id;
|
||||
$product->digital = 1;
|
||||
$product->photos = $request->photos;
|
||||
$product->thumbnail_img = $request->thumbnail_img;
|
||||
// Product Store
|
||||
$product = (new ProductService)->store($request->except([
|
||||
'_token', 'tax_id', 'tax', 'tax_type'
|
||||
]));
|
||||
|
||||
$tags = array();
|
||||
if ($request->tags[0] != null) {
|
||||
foreach (json_decode($request->tags[0]) as $key => $tag) {
|
||||
array_push($tags, $tag->value);
|
||||
}
|
||||
}
|
||||
$product->tags = implode(',', $tags);
|
||||
$request->merge(['product_id' => $product->id, 'current_stock' => 0]);
|
||||
|
||||
$product->description = $request->description;
|
||||
$product->unit_price = $request->unit_price;
|
||||
$product->purchase_price = $request->purchase_price;
|
||||
$product->discount = $request->discount;
|
||||
$product->discount_type = $request->discount_type;
|
||||
//Product Stock
|
||||
(new ProductStockService)->store($request->only([
|
||||
'unit_price', 'current_stock', 'product_id'
|
||||
]), $product);
|
||||
|
||||
$product->meta_title = $request->meta_title;
|
||||
$product->meta_description = $request->meta_description;
|
||||
$product->meta_img = $request->meta_img;
|
||||
|
||||
$product->file_name = $request->file;
|
||||
|
||||
$product->slug = preg_replace('/[^A-Za-z0-9\-]/', '', str_replace(' ', '-', $request->name)) . '-' . rand(10000, 99999);
|
||||
|
||||
if ($product->save()) {
|
||||
$request->merge(['product_id' => $product->id]);
|
||||
//VAT & Tax
|
||||
if ($request->tax_id) {
|
||||
(new ProductTaxService)->store($request->only([
|
||||
@@ -104,26 +86,17 @@ class DigitalProductController extends Controller
|
||||
]));
|
||||
}
|
||||
|
||||
$product_stock = new ProductStock;
|
||||
$product_stock->product_id = $product->id;
|
||||
$product_stock->variant = '';
|
||||
$product_stock->price = $request->unit_price;
|
||||
$product_stock->sku = '';
|
||||
$product_stock->qty = 0;
|
||||
$product_stock->save();
|
||||
|
||||
// Product Translations
|
||||
$product_translation = ProductTranslation::firstOrNew(['lang' => env('DEFAULT_LANGUAGE'), 'product_id' => $product->id]);
|
||||
$product_translation->name = $request->name;
|
||||
$product_translation->description = $request->description;
|
||||
$product_translation->save();
|
||||
$request->merge(['lang' => env('DEFAULT_LANGUAGE')]);
|
||||
ProductTranslation::create($request->only([
|
||||
'lang', 'name', 'unit', 'description', 'product_id'
|
||||
]));
|
||||
|
||||
flash(translate('Digital Product has been inserted successfully'))->success();
|
||||
flash(translate('Product has been inserted successfully'))->success();
|
||||
|
||||
Artisan::call('view:clear');
|
||||
Artisan::call('cache:clear');
|
||||
return redirect()->route('digitalproducts.index');
|
||||
} else {
|
||||
flash(translate('Something went wrong'))->error();
|
||||
return back();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -164,43 +137,23 @@ class DigitalProductController extends Controller
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
$product = Product::findOrFail($id);
|
||||
if ($request->lang == env("DEFAULT_LANGUAGE")) {
|
||||
$product->name = $request->name;
|
||||
$product->description = $request->description;
|
||||
}
|
||||
|
||||
$product->category_id = $request->category_id;
|
||||
$product->digital = 1;
|
||||
$product->photos = $request->photos;
|
||||
$product->thumbnail_img = $request->thumbnail_img;
|
||||
//Product Update
|
||||
$product = (new ProductService)->update($request->except([
|
||||
'_token', 'tax_id', 'tax', 'tax_type'
|
||||
]), $product);
|
||||
|
||||
$tags = array();
|
||||
if ($request->tags[0] != null) {
|
||||
foreach (json_decode($request->tags[0]) as $key => $tag) {
|
||||
array_push($tags, $tag->value);
|
||||
}
|
||||
}
|
||||
$product->tags = implode(',', $tags);
|
||||
|
||||
$product->unit_price = $request->unit_price;
|
||||
$product->purchase_price = $request->purchase_price;
|
||||
$product->discount = $request->discount;
|
||||
$product->discount_type = $request->discount_type;
|
||||
|
||||
$product->meta_title = $request->meta_title;
|
||||
$product->meta_description = $request->meta_description;
|
||||
$product->meta_img = $request->meta_img;
|
||||
$product->slug = strtolower($request->slug);
|
||||
|
||||
$product->file_name = $request->file;
|
||||
|
||||
// Delete From Product Stock
|
||||
//Product Stock
|
||||
foreach ($product->stocks as $key => $stock) {
|
||||
$stock->delete();
|
||||
}
|
||||
|
||||
if ($product->save()) {
|
||||
$request->merge(['product_id' => $product->id]);
|
||||
$request->merge(['product_id' => $product->id,'current_stock' => 0]);
|
||||
|
||||
(new ProductStockService)->store($request->only([
|
||||
'unit_price', 'current_stock', 'product_id'
|
||||
]), $product);
|
||||
|
||||
//VAT & Tax
|
||||
if ($request->tax_id) {
|
||||
ProductTax::where('product_id', $product->id)->delete();
|
||||
@@ -208,27 +161,18 @@ class DigitalProductController extends Controller
|
||||
'tax_id', 'tax', 'tax_type', 'product_id'
|
||||
]));
|
||||
}
|
||||
// Insert Into Product Stock
|
||||
$product_stock = new ProductStock;
|
||||
$product_stock->product_id = $product->id;
|
||||
$product_stock->variant = '';
|
||||
$product_stock->price = $request->unit_price;
|
||||
$product_stock->sku = '';
|
||||
$product_stock->qty = 0;
|
||||
$product_stock->save();
|
||||
|
||||
// Product Translations
|
||||
$product_translation = ProductTranslation::firstOrNew(['lang' => $request->lang, 'product_id' => $product->id]);
|
||||
$product_translation->name = $request->name;
|
||||
$product_translation->description = $request->description;
|
||||
$product_translation->save();
|
||||
ProductTranslation::updateOrCreate(
|
||||
$request->only(['lang', 'product_id']),
|
||||
$request->only(['name', 'description'])
|
||||
);
|
||||
|
||||
flash(translate('Digital Product has been updated successfully'))->success();
|
||||
flash(translate('Product has been updated successfully'))->success();
|
||||
|
||||
Artisan::call('view:clear');
|
||||
Artisan::call('cache:clear');
|
||||
return back();
|
||||
} else {
|
||||
flash(translate('Something went wrong'))->error();
|
||||
return back();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -239,15 +183,16 @@ class DigitalProductController extends Controller
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
$product = Product::findOrFail($id);
|
||||
|
||||
$product->product_translations()->delete();
|
||||
$product->stocks()->delete();
|
||||
|
||||
Product::destroy($id);
|
||||
$product_destroy = (new ProductService)->destroy($id);
|
||||
|
||||
if ($product_destroy) {
|
||||
flash(translate('Product has been deleted successfully'))->success();
|
||||
return redirect()->route('digitalproducts.index');
|
||||
Artisan::call('view:clear');
|
||||
Artisan::call('cache:clear');
|
||||
} else {
|
||||
flash(translate('Something went wrong'))->error();
|
||||
}
|
||||
return back();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -44,15 +44,50 @@ class HomeController extends Controller
|
||||
return Category::where('featured', 1)->get();
|
||||
});
|
||||
|
||||
$todays_deal_products = Cache::rememberForever('todays_deal_products', function () {
|
||||
return filter_products(Product::where('todays_deal', '1'))->get();
|
||||
});
|
||||
return view('frontend.index', compact('featured_categories'));
|
||||
}
|
||||
|
||||
public function load_todays_deal_section()
|
||||
{
|
||||
$todays_deal_products = filter_products(Product::where('todays_deal', '1'))->get();
|
||||
// dd($todays_deal_products);
|
||||
return view('frontend.partials.todays_deal', compact('todays_deal_products'));
|
||||
}
|
||||
|
||||
public function load_newest_product_section()
|
||||
{
|
||||
$newest_products = Cache::remember('newest_products', 3600, function () {
|
||||
return filter_products(Product::latest())->limit(12)->get();
|
||||
});
|
||||
return view('frontend.partials.newest_products_section', compact('newest_products'));
|
||||
}
|
||||
|
||||
return view('frontend.index', compact('featured_categories', 'todays_deal_products', 'newest_products'));
|
||||
public function load_featured_section()
|
||||
{
|
||||
return view('frontend.partials.featured_products_section');
|
||||
}
|
||||
|
||||
public function load_best_selling_section()
|
||||
{
|
||||
return view('frontend.partials.best_selling_section');
|
||||
}
|
||||
|
||||
public function load_auction_products_section()
|
||||
{
|
||||
if (!addon_is_activated('auction')) {
|
||||
return;
|
||||
}
|
||||
return view('auction.frontend.auction_products_section');
|
||||
}
|
||||
|
||||
public function load_home_categories_section()
|
||||
{
|
||||
return view('frontend.partials.home_categories_section');
|
||||
}
|
||||
|
||||
public function load_best_sellers_section()
|
||||
{
|
||||
return view('frontend.partials.best_sellers_section');
|
||||
}
|
||||
|
||||
public function login()
|
||||
@@ -69,29 +104,29 @@ class HomeController extends Controller
|
||||
return view('frontend.user_login');
|
||||
}
|
||||
|
||||
// public function registration(Request $request)
|
||||
// {
|
||||
// if (Auth::check()) {
|
||||
// return redirect()->route('home');
|
||||
// }
|
||||
// if ($request->has('referral_code') && addon_is_activated('affiliate_system')) {
|
||||
// try {
|
||||
// $affiliate_validation_time = AffiliateConfig::where('type', 'validation_time')->first();
|
||||
// $cookie_minute = 30 * 24;
|
||||
// if ($affiliate_validation_time) {
|
||||
// $cookie_minute = $affiliate_validation_time->value * 60;
|
||||
// }
|
||||
public function registration(Request $request)
|
||||
{
|
||||
if (Auth::check()) {
|
||||
return redirect()->route('home');
|
||||
}
|
||||
if ($request->has('referral_code') && addon_is_activated('affiliate_system')) {
|
||||
try {
|
||||
$affiliate_validation_time = AffiliateConfig::where('type', 'validation_time')->first();
|
||||
$cookie_minute = 30 * 24;
|
||||
if ($affiliate_validation_time) {
|
||||
$cookie_minute = $affiliate_validation_time->value * 60;
|
||||
}
|
||||
|
||||
// Cookie::queue('referral_code', $request->referral_code, $cookie_minute);
|
||||
// $referred_by_user = User::where('referral_code', $request->referral_code)->first();
|
||||
Cookie::queue('referral_code', $request->referral_code, $cookie_minute);
|
||||
$referred_by_user = User::where('referral_code', $request->referral_code)->first();
|
||||
|
||||
// $affiliateController = new AffiliateController;
|
||||
// $affiliateController->processAffiliateStats($referred_by_user->id, 1, 0, 0, 0);
|
||||
// } catch (\Exception $e) {
|
||||
// }
|
||||
// }
|
||||
// return view('frontend.user_registration');
|
||||
// }
|
||||
$affiliateController = new AffiliateController;
|
||||
$affiliateController->processAffiliateStats($referred_by_user->id, 1, 0, 0, 0);
|
||||
} catch (\Exception $e) {
|
||||
}
|
||||
}
|
||||
return view('frontend.user_registration');
|
||||
}
|
||||
|
||||
public function cart_login(Request $request)
|
||||
{
|
||||
@@ -133,9 +168,6 @@ class HomeController extends Controller
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
|
||||
//AQUI AGREGO LOS DIFERENTES TIPOS DE USUARIOS
|
||||
|
||||
public function dashboard()
|
||||
{
|
||||
if (Auth::user()->user_type == 'seller') {
|
||||
@@ -148,8 +180,6 @@ class HomeController extends Controller
|
||||
return view('frontend.user.customer.dashboard');
|
||||
} elseif (Auth::user()->user_type == 'delivery_boy') {
|
||||
return view('delivery_boys.dashboard');
|
||||
} elseif (Auth::user()->user_type == 'repair') {
|
||||
return view('workshop.dashboard');
|
||||
} else {
|
||||
abort(404);
|
||||
}
|
||||
@@ -202,34 +232,6 @@ class HomeController extends Controller
|
||||
}
|
||||
}
|
||||
|
||||
public function load_featured_section()
|
||||
{
|
||||
return view('frontend.partials.featured_products_section');
|
||||
}
|
||||
|
||||
public function load_best_selling_section()
|
||||
{
|
||||
return view('frontend.partials.best_selling_section');
|
||||
}
|
||||
|
||||
public function load_auction_products_section()
|
||||
{
|
||||
if (!addon_is_activated('auction')) {
|
||||
return;
|
||||
}
|
||||
return view('auction.frontend.auction_products_section');
|
||||
}
|
||||
|
||||
public function load_home_categories_section()
|
||||
{
|
||||
return view('frontend.partials.home_categories_section');
|
||||
}
|
||||
|
||||
public function load_best_sellers_section()
|
||||
{
|
||||
return view('frontend.partials.best_sellers_section');
|
||||
}
|
||||
|
||||
public function trackOrder(Request $request)
|
||||
{
|
||||
if ($request->has('order_code')) {
|
||||
@@ -595,37 +597,37 @@ class HomeController extends Controller
|
||||
return back();
|
||||
}
|
||||
|
||||
// public function send_email_change_verification_mail($request, $email)
|
||||
// {
|
||||
// $response['status'] = 0;
|
||||
// $response['message'] = 'Unknown';
|
||||
public function send_email_change_verification_mail($request, $email)
|
||||
{
|
||||
$response['status'] = 0;
|
||||
$response['message'] = 'Unknown';
|
||||
|
||||
// $verification_code = Str::random(32);
|
||||
$verification_code = Str::random(32);
|
||||
|
||||
// $array['subject'] = translate('Email Verification');
|
||||
// $array['from'] = env('MAIL_FROM_ADDRESS');
|
||||
// $array['content'] = translate('Verify your account');
|
||||
// $array['link'] = route('email_change.callback') . '?new_email_verificiation_code=' . $verification_code . '&email=' . $email;
|
||||
// $array['sender'] = Auth::user()->name;
|
||||
// $array['details'] = translate("Email Second");
|
||||
$array['subject'] = translate('Email Verification');
|
||||
$array['from'] = env('MAIL_FROM_ADDRESS');
|
||||
$array['content'] = translate('Verify your account');
|
||||
$array['link'] = route('email_change.callback') . '?new_email_verificiation_code=' . $verification_code . '&email=' . $email;
|
||||
$array['sender'] = Auth::user()->name;
|
||||
$array['details'] = translate("Email Second");
|
||||
|
||||
// $user = Auth::user();
|
||||
// $user->new_email_verificiation_code = $verification_code;
|
||||
// $user->save();
|
||||
$user = Auth::user();
|
||||
$user->new_email_verificiation_code = $verification_code;
|
||||
$user->save();
|
||||
|
||||
// try {
|
||||
// Mail::to($email)->queue(new SecondEmailVerifyMailManager($array));
|
||||
try {
|
||||
Mail::to($email)->queue(new SecondEmailVerifyMailManager($array));
|
||||
|
||||
// $response['status'] = 1;
|
||||
// $response['message'] = translate("Your verification mail has been Sent to your email.");
|
||||
// } catch (\Exception $e) {
|
||||
// // return $e->getMessage();
|
||||
// $response['status'] = 0;
|
||||
// $response['message'] = $e->getMessage();
|
||||
// }
|
||||
$response['status'] = 1;
|
||||
$response['message'] = translate("Your verification mail has been Sent to your email.");
|
||||
} catch (\Exception $e) {
|
||||
// return $e->getMessage();
|
||||
$response['status'] = 0;
|
||||
$response['message'] = $e->getMessage();
|
||||
}
|
||||
|
||||
// return $response;
|
||||
// }
|
||||
return $response;
|
||||
}
|
||||
|
||||
public function email_change_callback(Request $request)
|
||||
{
|
||||
@@ -697,7 +699,7 @@ class HomeController extends Controller
|
||||
public function todays_deal()
|
||||
{
|
||||
$todays_deal_products = Cache::rememberForever('todays_deal_products', function () {
|
||||
return filter_products(Product::where('todays_deal', '1'))->get();
|
||||
return filter_products(Product::with('thumbnail')->where('todays_deal', '1'))->get();
|
||||
});
|
||||
|
||||
return view("frontend.todays_deal", compact('todays_deal_products'));
|
||||
|
||||
@@ -77,7 +77,7 @@ class RazorpayController extends Controller
|
||||
$response = $api->payment->fetch($input['razorpay_payment_id'])->capture(array('amount' => $payment['amount']));
|
||||
$payment_detalis = json_encode(array('id' => $response['id'], 'method' => $response['method'], 'amount' => $response['amount'], 'currency' => $response['currency']));
|
||||
} catch (\Exception $e) {
|
||||
return $e->getMessage();
|
||||
// return $e->getMessage();
|
||||
\Session::put('error', $e->getMessage());
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
@@ -11,6 +11,9 @@ use App\Models\Category;
|
||||
use App\Models\ProductTax;
|
||||
use App\Models\AttributeValue;
|
||||
use App\Models\Cart;
|
||||
use App\Models\Wishlist;
|
||||
use App\Models\User;
|
||||
use App\Notifications\ShopProductNotification;
|
||||
use Carbon\Carbon;
|
||||
use Combinations;
|
||||
use CoreComponentRepository;
|
||||
@@ -21,6 +24,7 @@ use App\Services\ProductService;
|
||||
use App\Services\ProductTaxService;
|
||||
use App\Services\ProductFlashDealService;
|
||||
use App\Services\ProductStockService;
|
||||
use Illuminate\Support\Facades\Notification;
|
||||
|
||||
class ProductController extends Controller
|
||||
{
|
||||
@@ -91,7 +95,7 @@ class ProductController extends Controller
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function seller_products(Request $request)
|
||||
public function seller_products(Request $request, $product_type)
|
||||
{
|
||||
$col_name = null;
|
||||
$query = null;
|
||||
@@ -114,11 +118,16 @@ class ProductController extends Controller
|
||||
$products = $products->orderBy($col_name, $query);
|
||||
$sort_type = $request->type;
|
||||
}
|
||||
|
||||
$products = $products->where('digital', 0)->orderBy('created_at', 'desc')->paginate(15);
|
||||
$products = $product_type == 'physical' ? $products->where('digital', 0) : $products->where('digital', 1);
|
||||
$products = $products->orderBy('created_at', 'desc')->paginate(15);
|
||||
$type = 'Seller';
|
||||
|
||||
if($product_type == 'digital'){
|
||||
return view('backend.product.digital_products.index', compact('products', 'sort_search', 'type'));
|
||||
}
|
||||
return view('backend.product.products.index', compact('products', 'type', 'col_name', 'query', 'seller_id', 'sort_search'));
|
||||
|
||||
|
||||
}
|
||||
|
||||
public function all_products(Request $request)
|
||||
@@ -127,7 +136,7 @@ class ProductController extends Controller
|
||||
$query = null;
|
||||
$seller_id = null;
|
||||
$sort_search = null;
|
||||
$products = Product::orderBy('created_at', 'desc')->where('auction_product', 0)->where('wholesale_product', 0);
|
||||
$products = Product::where('auction_product', 0)->where('wholesale_product', 0);
|
||||
if ($request->has('user_id') && $request->user_id != null) {
|
||||
$products = $products->where('user_id', $request->user_id);
|
||||
$seller_id = $request->user_id;
|
||||
@@ -148,7 +157,7 @@ class ProductController extends Controller
|
||||
$sort_type = $request->type;
|
||||
}
|
||||
|
||||
$products = $products->paginate(15);
|
||||
$products = $products->orderBy('created_at', 'desc')->paginate(15);
|
||||
$type = 'All';
|
||||
|
||||
return view('backend.product.products.index', compact('products', 'type', 'col_name', 'query', 'seller_id', 'sort_search'));
|
||||
@@ -358,6 +367,7 @@ class ProductController extends Controller
|
||||
|
||||
if (Product::destroy($id)) {
|
||||
Cart::where('product_id', $id)->delete();
|
||||
Wishlist::where('product_id', $id)->delete();
|
||||
|
||||
flash(translate('Product has been deleted successfully'))->success();
|
||||
|
||||
@@ -466,6 +476,11 @@ class ProductController extends Controller
|
||||
|
||||
$product->save();
|
||||
|
||||
$product_type = $product->digital == 0 ? 'physical' : 'digital';
|
||||
$status = $request->approved == 1 ? 'approved' : 'rejected';
|
||||
$users = User::findMany([User::where('user_type', 'admin')->first()->id, $product->user_id]);
|
||||
Notification::send($users, new ShopProductNotification($product_type, $product, $status));
|
||||
|
||||
Artisan::call('view:clear');
|
||||
Artisan::call('cache:clear');
|
||||
return 1;
|
||||
|
||||
@@ -2,11 +2,14 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Cart;
|
||||
use DB;
|
||||
use Auth;
|
||||
use App\Models\Order;
|
||||
use App\Models\Upload;
|
||||
use App\Models\Product;
|
||||
use App\Utility\CartUtility;
|
||||
use Cookie;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class PurchaseHistoryController extends Controller
|
||||
@@ -67,7 +70,7 @@ class PurchaseHistoryController extends Controller
|
||||
}
|
||||
}
|
||||
} else {
|
||||
flash(translate('You cannot download this product at this product.'))->success();
|
||||
flash(translate('You cannot download this product.'))->success();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -97,4 +100,87 @@ class PurchaseHistoryController extends Controller
|
||||
|
||||
return back();
|
||||
}
|
||||
|
||||
public function re_order($id)
|
||||
{
|
||||
$user_id = Auth::user()->id;
|
||||
|
||||
// if Cart has auction product check
|
||||
$carts = Cart::where('user_id', $user_id)->get();
|
||||
foreach ($carts as $cartItem) {
|
||||
$cart_product = Product::where('id', $cartItem['product_id'])->first();
|
||||
if ($cart_product->auction_product == 1) {
|
||||
flash(translate('Remove auction product from cart to add products.'))->error();
|
||||
return back();
|
||||
}
|
||||
}
|
||||
|
||||
$order = Order::findOrFail(decrypt($id));
|
||||
$success_msgs = [];
|
||||
$failed_msgs = [];
|
||||
$data['user_id'] = $user_id;
|
||||
foreach ($order->orderDetails as $key => $orderDetail) {
|
||||
$product = $orderDetail->product;
|
||||
|
||||
if (
|
||||
!$product || $product->published == 0 ||
|
||||
$product->approved == 0 || ($product->wholesale_product && !addon_is_activated("wholesale"))
|
||||
) {
|
||||
array_push($failed_msgs, translate('An item from this order is not available now.'));
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($product->auction_product == 0) {
|
||||
|
||||
// If product min qty is greater then the ordered qty, then update the order qty
|
||||
$order_qty = $orderDetail->quantity;
|
||||
if ($product->digital == 0 && $order_qty < $product->min_qty) {
|
||||
$order_qty = $product->min_qty;
|
||||
}
|
||||
|
||||
$cart = Cart::firstOrNew([
|
||||
'variation' => $orderDetail->variation,
|
||||
'user_id' => auth()->user()->id,
|
||||
'product_id' => $product->id
|
||||
]);
|
||||
|
||||
$product_stock = $product->stocks->where('variant', $orderDetail->variation)->first();
|
||||
if ($product_stock) {
|
||||
$quantity = 1;
|
||||
if ($product->digital != 1) {
|
||||
$quantity = $product_stock->qty;
|
||||
if ($quantity > 0) {
|
||||
if ($cart->exists) {
|
||||
$order_qty = $cart->quantity + $order_qty;
|
||||
}
|
||||
//If order qty is greater then the product stock, set order qty = current product stock qty
|
||||
$quantity = $quantity >= $order_qty ? $order_qty : $quantity;
|
||||
} else {
|
||||
array_push($failed_msgs, $product->getTranslation('name') . ' ' . translate(' is stock out.'));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
$price = CartUtility::get_price($product, $product_stock, $quantity);
|
||||
$tax = CartUtility::tax_calculation($product, $price);
|
||||
|
||||
CartUtility::save_cart_data($cart, $product, $price, $tax, $quantity);
|
||||
array_push($success_msgs, $product->getTranslation('name') . ' ' . translate('added to cart.'));
|
||||
} else {
|
||||
array_push($failed_msgs, $product->getTranslation('name') . ' ' . translate('is stock out.'));
|
||||
}
|
||||
} else {
|
||||
array_push($failed_msgs, translate('You can not re order an auction product.'));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($failed_msgs as $msg) {
|
||||
flash($msg)->warning();
|
||||
}
|
||||
foreach ($success_msgs as $msg) {
|
||||
flash($msg)->success();
|
||||
}
|
||||
|
||||
return redirect()->route('cart');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,14 +4,22 @@ namespace App\Http\Controllers\Seller;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Product;
|
||||
use App\Models\ProductStock;
|
||||
use App\Models\Category;
|
||||
use App\Models\ProductStock;
|
||||
use App\Models\ProductTax;
|
||||
use App\Models\ProductTranslation;
|
||||
use App\Models\Upload;
|
||||
use Artisan;
|
||||
use App\Models\User;
|
||||
use App\Services\ProductTaxService;
|
||||
use App\Notifications\ShopProductNotification;
|
||||
use Illuminate\Support\Facades\Notification;
|
||||
use Auth;
|
||||
|
||||
use App\Services\ProductService;
|
||||
|
||||
use App\Services\ProductStockService;
|
||||
|
||||
class DigitalProductController extends Controller
|
||||
{
|
||||
/**
|
||||
@@ -61,32 +69,33 @@ class DigitalProductController extends Controller
|
||||
}
|
||||
}
|
||||
|
||||
$product = new Product;
|
||||
$product->name = $request->name;
|
||||
$product->added_by = 'seller';
|
||||
$product->user_id = Auth::user()->id;
|
||||
$product->category_id = $request->category_id;
|
||||
$product->digital = 1;
|
||||
$product->photos = $request->photos;
|
||||
$product->thumbnail_img = $request->thumbnail_img;
|
||||
// Product Store
|
||||
$product = (new ProductService)->store($request->except([
|
||||
'_token', 'tax_id', 'tax', 'tax_type'
|
||||
]));
|
||||
|
||||
$tags = array();
|
||||
if($request->tags[0] != null){
|
||||
foreach (json_decode($request->tags[0]) as $key => $tag) {
|
||||
array_push($tags, $tag->value);
|
||||
$request->merge(['product_id' => $product->id, 'current_stock' => 0]);
|
||||
|
||||
//Product Stock
|
||||
(new ProductStockService)->store($request->only([
|
||||
'unit_price', 'current_stock', 'product_id'
|
||||
]), $product);
|
||||
|
||||
//VAT & Tax
|
||||
if ($request->tax_id) {
|
||||
(new ProductTaxService)->store($request->only([
|
||||
'tax_id', 'tax', 'tax_type', 'product_id'
|
||||
]));
|
||||
}
|
||||
}
|
||||
$product->tags = implode(',', $tags);
|
||||
|
||||
$product->description = $request->description;
|
||||
$product->unit_price = $request->unit_price;
|
||||
$product->purchase_price = $request->purchase_price;
|
||||
$product->discount = $request->discount;
|
||||
$product->discount_type = $request->discount_type;
|
||||
// Product Translations
|
||||
$request->merge(['lang' => env('DEFAULT_LANGUAGE')]);
|
||||
ProductTranslation::create($request->only([
|
||||
'lang', 'name', 'unit', 'description', 'product_id'
|
||||
]));
|
||||
|
||||
flash(translate('Product has been inserted successfully'))->success();
|
||||
|
||||
$product->meta_title = $request->meta_title;
|
||||
$product->meta_description = $request->meta_description;
|
||||
$product->meta_img = $request->meta_img;
|
||||
|
||||
$product->file_name = $request->file;
|
||||
|
||||
@@ -101,7 +110,7 @@ class DigitalProductController extends Controller
|
||||
]));
|
||||
}
|
||||
|
||||
$product_stock = new ProductStock;
|
||||
$product_stock = new ProductStock();
|
||||
$product_stock->product_id = $product->id;
|
||||
$product_stock->variant = '';
|
||||
$product_stock->price = $request->unit_price;
|
||||
@@ -115,13 +124,21 @@ class DigitalProductController extends Controller
|
||||
$product_translation->description = $request->description;
|
||||
$product_translation->save();
|
||||
|
||||
if(get_setting('product_approve_by_admin') == 1){
|
||||
$users = User::findMany([auth()->user()->id, User::where('user_type', 'admin')->first()->id]);
|
||||
Notification::send($users, new ShopProductNotification('digital', $product));
|
||||
}
|
||||
|
||||
flash(translate('Digital Product has been inserted successfully'))->success();
|
||||
Artisan::call('view:clear');
|
||||
Artisan::call('cache:clear');
|
||||
return redirect()->route('seller.digitalproducts');
|
||||
}
|
||||
else{
|
||||
flash(translate('Something went wrong'))->error();
|
||||
return back();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -145,50 +162,24 @@ class DigitalProductController extends Controller
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
public function update(Request $request, Product $product)
|
||||
{
|
||||
$product = Product::findOrFail($id);
|
||||
if($request->lang == env("DEFAULT_LANGUAGE")){
|
||||
$product->name = $request->name;
|
||||
$product->description = $request->description;
|
||||
}
|
||||
//Product Update
|
||||
$product = (new ProductService)->update($request->except([
|
||||
'_token', 'tax_id', 'tax', 'tax_type'
|
||||
]), $product);
|
||||
|
||||
$product->category_id = $request->category_id;
|
||||
$product->photos = $request->photos;
|
||||
$product->thumbnail_img = $request->thumbnail_img;
|
||||
|
||||
$tags = array();
|
||||
if($request->tags[0] != null){
|
||||
foreach (json_decode($request->tags[0]) as $key => $tag) {
|
||||
array_push($tags, $tag->value);
|
||||
}
|
||||
}
|
||||
$product->tags = implode(',', $tags);
|
||||
|
||||
$product->unit_price = $request->unit_price;
|
||||
$product->purchase_price = $request->purchase_price;
|
||||
$product->discount = $request->discount;
|
||||
$product->discount_type = $request->discount_type;
|
||||
|
||||
$product->meta_title = $request->meta_title;
|
||||
$product->meta_description = $request->meta_description;
|
||||
$product->meta_img = $request->meta_img;
|
||||
$product->slug = strtolower($request->slug);
|
||||
|
||||
// if($request->hasFile('file')){
|
||||
// $product->file_name = $request->file('file')->getClientOriginalName();
|
||||
// $product->file_path = $request->file('file')->store('uploads/products/digital');
|
||||
// }
|
||||
|
||||
$product->file_name = $request->file;
|
||||
|
||||
// Delete From Product Stock
|
||||
//Product Stock
|
||||
foreach ($product->stocks as $key => $stock) {
|
||||
$stock->delete();
|
||||
}
|
||||
|
||||
if($product->save()){
|
||||
$request->merge(['product_id' => $product->id]);
|
||||
$request->merge(['product_id' => $product->id,'current_stock' => 0]);
|
||||
|
||||
(new ProductStockService)->store($request->only([
|
||||
'unit_price', 'current_stock', 'product_id'
|
||||
]), $product);
|
||||
|
||||
//VAT & Tax
|
||||
if ($request->tax_id) {
|
||||
ProductTax::where('product_id', $product->id)->delete();
|
||||
@@ -196,34 +187,20 @@ class DigitalProductController extends Controller
|
||||
'tax_id', 'tax', 'tax_type', 'product_id'
|
||||
]));
|
||||
}
|
||||
// Insert Into Product Stock
|
||||
$product_stock = new ProductStock;
|
||||
$product_stock->product_id = $product->id;
|
||||
$product_stock->variant = '';
|
||||
$product_stock->price = $request->unit_price;
|
||||
$product_stock->sku = '';
|
||||
$product_stock->qty = 0;
|
||||
$product_stock->save();
|
||||
|
||||
// Product Translations
|
||||
$product_translation = ProductTranslation::firstOrNew(['lang' => $request->lang, 'product_id' => $product->id]);
|
||||
$product_translation->name = $request->name;
|
||||
$product_translation->description = $request->description;
|
||||
$product_translation->save();
|
||||
ProductTranslation::updateOrCreate(
|
||||
$request->only(['lang', 'product_id']),
|
||||
$request->only(['name', 'description'])
|
||||
);
|
||||
|
||||
flash(translate('Product has been updated successfully'))->success();
|
||||
|
||||
Artisan::call('view:clear');
|
||||
Artisan::call('cache:clear');
|
||||
|
||||
flash(translate('Digital Product has been updated successfully'))->success();
|
||||
if(Auth::user()->user_type == 'admin' || Auth::user()->user_type == 'staff'){
|
||||
return back();
|
||||
}
|
||||
else{
|
||||
return back();
|
||||
}
|
||||
}
|
||||
else{
|
||||
flash(translate('Something went wrong'))->error();
|
||||
return back();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
@@ -233,15 +210,16 @@ class DigitalProductController extends Controller
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
$product = Product::findOrFail($id);
|
||||
|
||||
$product->product_translations()->delete();
|
||||
$product->stocks()->delete();
|
||||
|
||||
Product::destroy($id);
|
||||
$product_destroy = (new ProductService)->destroy($id);
|
||||
|
||||
if ($product_destroy) {
|
||||
flash(translate('Product has been deleted successfully'))->success();
|
||||
return redirect()->route('seller.digitalproducts');
|
||||
Artisan::call('view:clear');
|
||||
Artisan::call('cache:clear');
|
||||
} else {
|
||||
flash(translate('Something went wrong'))->error();
|
||||
}
|
||||
return back();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -11,6 +11,9 @@ use App\Models\Category;
|
||||
use App\Models\Product;
|
||||
use App\Models\ProductTax;
|
||||
use App\Models\ProductTranslation;
|
||||
use App\Models\Wishlist;
|
||||
use App\Models\User;
|
||||
use App\Notifications\ShopProductNotification;
|
||||
use Carbon\Carbon;
|
||||
use Combinations;
|
||||
use Artisan;
|
||||
@@ -21,6 +24,7 @@ use App\Services\ProductService;
|
||||
use App\Services\ProductTaxService;
|
||||
use App\Services\ProductFlashDealService;
|
||||
use App\Services\ProductStockService;
|
||||
use Illuminate\Support\Facades\Notification;
|
||||
|
||||
class ProductController extends Controller
|
||||
{
|
||||
@@ -55,15 +59,8 @@ class ProductController extends Controller
|
||||
|
||||
public function create(Request $request)
|
||||
{
|
||||
|
||||
if (addon_is_activated('seller_subscription')) {
|
||||
if (seller_package_validity_check()) {
|
||||
$categories = Category::where('parent_id', 0)
|
||||
->where('digital', 0)
|
||||
->with('childrenCategories')
|
||||
->get();
|
||||
return view('seller.product.products.create', compact('categories'));
|
||||
} else {
|
||||
if (!seller_package_validity_check()) {
|
||||
flash(translate('Please upgrade your package.'))->warning();
|
||||
return back();
|
||||
}
|
||||
@@ -107,6 +104,11 @@ class ProductController extends Controller
|
||||
'lang', 'name', 'unit', 'description', 'product_id'
|
||||
]));
|
||||
|
||||
if(get_setting('product_approve_by_admin') == 1){
|
||||
$users = User::findMany([auth()->user()->id, User::where('user_type', 'admin')->first()->id]);
|
||||
Notification::send($users, new ShopProductNotification('physical', $product));
|
||||
}
|
||||
|
||||
flash(translate('Product has been inserted successfully'))->success();
|
||||
|
||||
Artisan::call('view:clear');
|
||||
@@ -254,11 +256,7 @@ class ProductController extends Controller
|
||||
$product->published = $request->status;
|
||||
if (addon_is_activated('seller_subscription') && $request->status == 1) {
|
||||
$shop = $product->user->shop;
|
||||
if (
|
||||
$shop->package_invalid_at == null
|
||||
|| Carbon::now()->diffInDays(Carbon::parse($shop->package_invalid_at), false) < 0
|
||||
|| $shop->product_upload_limit <= $shop->user->products()->where('published', 1)->count()
|
||||
) {
|
||||
if (!seller_package_validity_check()) {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
@@ -323,6 +321,7 @@ class ProductController extends Controller
|
||||
|
||||
if (Product::destroy($id)) {
|
||||
Cart::where('product_id', $id)->delete();
|
||||
Wishlist::where('product_id', $id)->delete();
|
||||
|
||||
flash(translate('Product has been deleted successfully'))->success();
|
||||
|
||||
|
||||
@@ -3,7 +3,10 @@
|
||||
namespace App\Http\Controllers\Seller;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Notification;
|
||||
use App\Notifications\PayoutNotification;
|
||||
use App\Models\SellerWithdrawRequest;
|
||||
use App\Models\User;
|
||||
use Auth;
|
||||
|
||||
class SellerWithdrawRequestController extends Controller
|
||||
@@ -35,6 +38,10 @@ class SellerWithdrawRequestController extends Controller
|
||||
$seller_withdraw_request->status = '0';
|
||||
$seller_withdraw_request->viewed = '0';
|
||||
if ($seller_withdraw_request->save()) {
|
||||
|
||||
$users = User::findMany([auth()->user()->id, User::where('user_type', 'admin')->first()->id]);
|
||||
Notification::send($users, new PayoutNotification(Auth::user(), $request->amount, 'pending'));
|
||||
|
||||
flash(translate('Request has been sent successfully'))->success();
|
||||
return redirect()->route('seller.money_withdraw_requests.index');
|
||||
}
|
||||
|
||||
@@ -5,7 +5,10 @@ namespace App\Http\Controllers\Seller;
|
||||
use App\Models\BusinessSetting;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Shop;
|
||||
use App\Models\User;
|
||||
use App\Notifications\ShopVerificationNotification;
|
||||
use Auth;
|
||||
use Illuminate\Support\Facades\Notification;
|
||||
|
||||
class ShopController extends Controller
|
||||
{
|
||||
@@ -112,6 +115,9 @@ class ShopController extends Controller
|
||||
$shop = Auth::user()->shop;
|
||||
$shop->verification_info = json_encode($data);
|
||||
if ($shop->save()) {
|
||||
$users = User::findMany([auth()->user()->id, User::where('user_type', 'admin')->first()->id]);
|
||||
Notification::send($users, new ShopVerificationNotification($shop));
|
||||
|
||||
flash(translate('Your shop verification request has been submitted successfully!'))->success();
|
||||
return redirect()->route('seller.dashboard');
|
||||
}
|
||||
|
||||
@@ -11,11 +11,14 @@ use App\Models\Order;
|
||||
use App\Models\OrderDetail;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use App\Notifications\EmailVerificationNotification;
|
||||
use App\Notifications\ShopVerificationNotification;
|
||||
use Cache;
|
||||
use Illuminate\Support\Facades\Notification;
|
||||
|
||||
class SellerController extends Controller
|
||||
{
|
||||
public function __construct() {
|
||||
public function __construct()
|
||||
{
|
||||
// Staff Permission Check
|
||||
$this->middleware(['permission:view_all_seller'])->only('index');
|
||||
$this->middleware(['permission:view_seller_profile'])->only('profile_modal');
|
||||
@@ -209,28 +212,30 @@ class SellerController extends Controller
|
||||
{
|
||||
$shop = Shop::findOrFail($id);
|
||||
$shop->verification_status = 1;
|
||||
if ($shop->save()) {
|
||||
$shop->save();
|
||||
Cache::forget('verified_sellers_id');
|
||||
|
||||
$users = User::findMany([$shop->user->id, User::where('user_type', 'admin')->first()->id]);
|
||||
Notification::send($users, new ShopVerificationNotification($shop, 'approved'));
|
||||
|
||||
flash(translate('Seller has been approved successfully'))->success();
|
||||
return redirect()->route('sellers.index');
|
||||
}
|
||||
flash(translate('Something went wrong'))->error();
|
||||
return back();
|
||||
}
|
||||
|
||||
public function reject_seller($id)
|
||||
{
|
||||
$shop = Shop::findOrFail($id);
|
||||
$shop->verification_status = 0;
|
||||
$shop->verification_info = null;
|
||||
if ($shop->save()) {
|
||||
$shop->save();
|
||||
Cache::forget('verified_sellers_id');
|
||||
|
||||
$users = User::findMany([$shop->user->id, User::where('user_type', 'admin')->first()->id]);
|
||||
Notification::send($users, new ShopVerificationNotification($shop, 'rejected'));
|
||||
|
||||
flash(translate('Seller verification request has been rejected successfully'))->success();
|
||||
return redirect()->route('sellers.index');
|
||||
}
|
||||
flash(translate('Something went wrong'))->error();
|
||||
return back();
|
||||
}
|
||||
|
||||
|
||||
public function payment_modal(Request $request)
|
||||
@@ -249,12 +254,14 @@ class SellerController extends Controller
|
||||
{
|
||||
$shop = Shop::findOrFail($request->id);
|
||||
$shop->verification_status = $request->status;
|
||||
if ($shop->save()) {
|
||||
$shop->save();
|
||||
Cache::forget('verified_sellers_id');
|
||||
|
||||
$status = $request->status == 1 ? 'approved' : 'rejected';
|
||||
$users = User::findMany([$shop->user->id, User::where('user_type', 'admin')->first()->id]);
|
||||
Notification::send($users, new ShopVerificationNotification($shop, $status));
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public function login($id)
|
||||
{
|
||||
|
||||
@@ -10,6 +10,7 @@ use App\Models\BusinessSetting;
|
||||
use Auth;
|
||||
use Hash;
|
||||
use App\Notifications\EmailVerificationNotification;
|
||||
use Illuminate\Support\Facades\Notification;
|
||||
|
||||
class ShopController extends Controller
|
||||
{
|
||||
@@ -27,8 +28,6 @@ class ShopController extends Controller
|
||||
public function index()
|
||||
{
|
||||
$shop = Auth::user()->shop;
|
||||
|
||||
/* by joan */
|
||||
return view('seller.shop', compact('shop'));
|
||||
}
|
||||
|
||||
@@ -76,7 +75,7 @@ class ShopController extends Controller
|
||||
$shop->save();
|
||||
|
||||
auth()->login($user, false);
|
||||
if (BusinessSetting::where('type', 'email_verification')->first()->value != 1) {
|
||||
if (BusinessSetting::where('type', 'email_verification')->first()->value == 0) {
|
||||
$user->email_verified_at = date('Y-m-d H:m:s');
|
||||
$user->save();
|
||||
} else {
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
|
||||
|
||||
use App\Mail\VerificationEmail;
|
||||
use App\Models\Category;
|
||||
use App\Models\CategoryTranslation;
|
||||
use App\Models\Shop;
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\Request;
|
||||
@@ -25,9 +26,12 @@ class TypeBusinessController extends Controller
|
||||
public function index()
|
||||
{
|
||||
|
||||
$categories = Category::all();
|
||||
$categories = CategoryTranslation::all();
|
||||
|
||||
return view('frontend.registro-comercio.views.business.index', compact('categories'));
|
||||
$apiKey = env('GOOGLE_MAPS_API_KEY');
|
||||
|
||||
|
||||
return view('frontend.registro-comercio.views.business.index', compact('categories', 'apiKey'));
|
||||
|
||||
}
|
||||
|
||||
@@ -47,49 +51,100 @@ class TypeBusinessController extends Controller
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function store(Request $request, User $user)
|
||||
public function store(Request $request, User $user, Shop $shop)
|
||||
{
|
||||
|
||||
|
||||
// Validación de los campos de registro
|
||||
// $validator = Validator::make($request->all(), [
|
||||
// 'name' => ['required'],
|
||||
// 'address' => ['required'],
|
||||
// 'categories_id' => ['required'],
|
||||
// 'email' => ['required', 'string', 'email', 'max:255', 'unique:'.User::class, 'regex:/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.(com|do|net|com.do)$/'],
|
||||
// 'password' => ['required', 'confirmed', Password::defaults()],
|
||||
// 'terms' => ['required'], // Agrega esta línea para hacer el campo 'terms' requerido
|
||||
// 'g-recaptcha-response' => ['required', function ($attribute, $value, $fail) {
|
||||
// $recaptcha = new Recaptcha(env('RECAPTCHA_SECRET_KEY'));
|
||||
// $recaptcha->verify($value);
|
||||
// }],
|
||||
// ]);
|
||||
|
||||
$validator = Validator::make($request->all(), [
|
||||
'name_user' => ['required'],
|
||||
'name' => ['required'],
|
||||
'address' => ['required'],
|
||||
'categories_id' => ['required'],
|
||||
'email' => ['required', 'string', 'email', 'max:255', 'unique:'.User::class, 'regex:/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.(com|do|net|com.do)$/'],
|
||||
'email' => [
|
||||
'required',
|
||||
'string',
|
||||
'email',
|
||||
'max:255',
|
||||
'unique:'.User::class,
|
||||
//VALIDA EL TIPO DE extencion del dominio permitido
|
||||
'regex:/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.(com|do|net|com.do)$/',
|
||||
//valida si el correo existe, a traves de los dns
|
||||
//La función filter_var($value, FILTER_VALIDATE_EMAIL) verifica si la cadena de correo electrónico es una dirección de correo electrónico válida según el filtro FILTER_VALIDATE_EMAIL de PHP.
|
||||
//La función checkdnsrr($domain, 'MX') verifica si el dominio del correo electrónico tiene registros MX en el sistema de nombres de dominio (DNS). Esto se hace utilizando la función checkdnsrr de PHP con el tipo de registro 'MX'.
|
||||
//Los tipos de registro DNS válidos son: 'A', 'MX', 'NS', 'SOA', 'PTR', 'CNAME', 'AAAA', 'A6', 'SRV', 'NAPTR', 'TXT', 'ANY'.
|
||||
function ($attribute, $value, $fail) {
|
||||
$domain = explode('@', $value)[1];
|
||||
if (!filter_var($value, FILTER_VALIDATE_EMAIL) || !checkdnsrr($domain, 'MX')) {
|
||||
$fail('El correo electrónico no existe.');
|
||||
}
|
||||
},
|
||||
],
|
||||
'password' => ['required', 'confirmed', Password::defaults()],
|
||||
'terms' => ['required'], // Agrega esta línea para hacer el campo 'terms' requerido
|
||||
'g-recaptcha-response' => ['required', function ($attribute, $value, $fail) {
|
||||
'terms' => ['required'],
|
||||
'g-recaptcha-response' => [
|
||||
'required',
|
||||
function ($attribute, $value, $fail) {
|
||||
$recaptcha = new Recaptcha(env('RECAPTCHA_SECRET_KEY'));
|
||||
$recaptcha->verify($value);
|
||||
}],
|
||||
},
|
||||
],
|
||||
]);
|
||||
|
||||
// if ($validator->fails()) {
|
||||
// // Si la validación falla, puedes redirigir o devolver una respuesta con los errores
|
||||
// return redirect()->back()->withErrors($validator)->withInput();
|
||||
// }
|
||||
if ($validator->fails()) {
|
||||
// Si la validación falla, puedes redirigir o devolver una respuesta con los errores
|
||||
return redirect()->back()->withErrors($validator)->withInput();
|
||||
}
|
||||
|
||||
// $confirmation_code = Str::random(25);
|
||||
$confirmation_code = Str::random(25);
|
||||
|
||||
// $user = new User();
|
||||
// $user->email = $request->input('email');
|
||||
// $user->password = Hash::make($request->input('password'));
|
||||
// $user->user_type = 'seller';
|
||||
// $user->confirmation_code = $confirmation_code;
|
||||
// $user->save();
|
||||
$user = new User();
|
||||
$user->name = $request->input('name_user');
|
||||
$user->email = $request->input('email');
|
||||
$user->password = Hash::make($request->input('password'));
|
||||
$user->user_type = 'seller';
|
||||
$user->confirmation_code = $confirmation_code;
|
||||
$user->category_translation_id = $request->input('categories_id');
|
||||
$user->save();
|
||||
|
||||
// Guardar los campos en el modelo Shop
|
||||
$shop->user_id = $user->id;
|
||||
$shop->name = $request->name;
|
||||
$shop->slug = Str::slug($request->name); // Genera el slug a partir del nombre
|
||||
$shop->address = $request->address;
|
||||
$shop->delivery_pickup_latitude = $request->latitude;
|
||||
$shop->delivery_pickup_longitude = $request->longitude;
|
||||
// Aquí puedes guardar otros campos si los tienes
|
||||
|
||||
// Guardar el modelo Shop en la base de datos
|
||||
$shop->save();
|
||||
|
||||
|
||||
// Mail::to($user->email)->send(new VerificationEmail($user));
|
||||
Mail::to($user->email)->send(new VerificationEmail($user));
|
||||
|
||||
// // Intentar iniciar sesión automáticamente
|
||||
// if (Auth::attempt($request->only('email', 'password'))) {
|
||||
// if (Auth::user()->email_verified_at) {
|
||||
// // La cuenta está verificada, redirige a la página deseada
|
||||
// return redirect()->route('shop.view.signup.complete');
|
||||
// } else {
|
||||
// // La cuenta no está verificada, redirige a la página de verificación de correo electrónico
|
||||
// return redirect()->route('shop.view.email.verification');
|
||||
// }
|
||||
// }
|
||||
// Intentar iniciar sesión automáticamente
|
||||
if (Auth::attempt($request->only('email', 'password'))) {
|
||||
if (Auth::user()->email_verified_at) {
|
||||
// La cuenta está verificada, redirige a la página deseada
|
||||
return redirect()->route('seller.dashboard');
|
||||
} else {
|
||||
// La cuenta no está verificada, redirige a la página de verificación de correo electrónico
|
||||
return redirect()->route('shop.view.email.verification');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -137,41 +192,41 @@ class TypeBusinessController extends Controller
|
||||
//
|
||||
}
|
||||
|
||||
public function business_complete_index()
|
||||
{
|
||||
$user = auth()->user();
|
||||
// public function business_complete_index()
|
||||
// {
|
||||
// $user = auth()->user();
|
||||
|
||||
return view('frontend.registro-comercio.views.business.business_complete', compact('user'));
|
||||
}
|
||||
|
||||
public function business_complete_store(Request $request, Shop $shop)
|
||||
{
|
||||
// Validación de los campos
|
||||
$validator = Validator::make($request->all(), [
|
||||
'name' => ['required'],
|
||||
'address' => ['required'],
|
||||
]);
|
||||
|
||||
// Si la validación falla, puedes redirigir de vuelta con los errores
|
||||
if ($validator->fails()) {
|
||||
return redirect()->back()->withErrors($validator)->withInput();
|
||||
}
|
||||
|
||||
// Guardar los campos en el modelo Shop
|
||||
$shop->user_id = $request->user()->id;
|
||||
$shop->name = $request->name;
|
||||
$shop->address = $request->address;
|
||||
// Aquí puedes guardar otros campos si los tienes
|
||||
|
||||
// Guardar el modelo Shop en la base de datos
|
||||
$shop->save();
|
||||
|
||||
// Marcar el campo "shop_verified_at" como verificado en el modelo User
|
||||
$request->user()->shop_verified_at = now(); // Puedes usar la función "now()" para establecer la fecha y hora actual
|
||||
|
||||
// Guardar el modelo User en la base de datos
|
||||
$request->user()->save();
|
||||
|
||||
return redirect()->route('seller.dashboard');
|
||||
}
|
||||
// return view('frontend.registro-comercio.views.business.business_complete', compact('user'));
|
||||
// }
|
||||
|
||||
// public function business_complete_store(Request $request, Shop $shop)
|
||||
// {
|
||||
// // Validación de los campos
|
||||
// $validator = Validator::make($request->all(), [
|
||||
// 'name' => ['required'],
|
||||
// 'address' => ['required'],
|
||||
// ]);
|
||||
|
||||
// // Si la validación falla, puedes redirigir de vuelta con los errores
|
||||
// if ($validator->fails()) {
|
||||
// return redirect()->back()->withErrors($validator)->withInput();
|
||||
// }
|
||||
|
||||
// // Guardar los campos en el modelo Shop
|
||||
// $shop->user_id = $request->user()->id;
|
||||
// $shop->name = $request->name;
|
||||
// $shop->address = $request->address;
|
||||
// // Aquí puedes guardar otros campos si los tienes
|
||||
|
||||
// // Guardar el modelo Shop en la base de datos
|
||||
// $shop->save();
|
||||
|
||||
// // Marcar el campo "shop_verified_at" como verificado en el modelo User
|
||||
// $request->user()->shop_verified_at = now(); // Puedes usar la función "now()" para establecer la fecha y hora actual
|
||||
|
||||
// // Guardar el modelo User en la base de datos
|
||||
// $request->user()->save();
|
||||
|
||||
// return redirect()->route('seller.dashboard');
|
||||
// }
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Mail\VerificationEmail;
|
||||
use App\Models\Buyer;
|
||||
use App\Models\User;
|
||||
use Auth;
|
||||
use \ReCaptcha\ReCaptcha;
|
||||
@@ -23,6 +24,8 @@ class TypeBuyerController extends Controller
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
|
||||
|
||||
return view('frontend.registro-comercio.views.buyers.index');
|
||||
}
|
||||
|
||||
@@ -42,12 +45,16 @@ class TypeBuyerController extends Controller
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function store(Request $request, User $user)
|
||||
public function store(Request $request, User $user, Buyer $buyer)
|
||||
{
|
||||
|
||||
// Validación de los campos de registro
|
||||
$validator = Validator::make($request->all(), [
|
||||
'name_user' => ['required'],
|
||||
'email' => ['required', 'string', 'email', 'max:255', 'unique:'.User::class],
|
||||
'password' => ['required', 'confirmed', Password::defaults()],
|
||||
'address' => ['required'],
|
||||
'terms' => ['required'],
|
||||
'g-recaptcha-response' => ['required', function ($attribute, $value, $fail) {
|
||||
$recaptcha = new Recaptcha(env('RECAPTCHA_SECRET_KEY'));
|
||||
$recaptcha->verify($value);
|
||||
@@ -62,6 +69,7 @@ class TypeBuyerController extends Controller
|
||||
$confirmation_code = Str::random(25);
|
||||
|
||||
$user = new User;
|
||||
$user->name = $request->input('name_user');
|
||||
$user->email = $request->input('email');
|
||||
$user->password = Hash::make($request->input('password'));
|
||||
$user->user_type = 'customer';
|
||||
@@ -69,6 +77,17 @@ class TypeBuyerController extends Controller
|
||||
$user->save();
|
||||
|
||||
|
||||
// Guardar los campos en el modelo Shop
|
||||
$buyer->user_id = $user->id;
|
||||
$buyer->address = $request->address;
|
||||
$buyer->delivery_pickup_latitude = $request->latitude;
|
||||
$buyer->delivery_pickup_longitude = $request->longitude;
|
||||
// Aquí puedes guardar otros campos si los tienes
|
||||
|
||||
// Guardar el modelo Shop en la base de datos
|
||||
$buyer->save();
|
||||
|
||||
|
||||
Mail::to($user->email)->send(new VerificationEmail($user));
|
||||
|
||||
// Intentar iniciar sesión automáticamente
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Mail\VerificationEmail;
|
||||
use App\Models\CategoryTranslation;
|
||||
use App\Models\Shop;
|
||||
use App\Models\User;
|
||||
use App\Models\Workshop;
|
||||
@@ -24,7 +25,10 @@ class TypeWorkshopController extends Controller
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
return view('frontend.registro-comercio.views.workshops.index');
|
||||
|
||||
$categories = CategoryTranslation::all();
|
||||
|
||||
return view('frontend.registro-comercio.views.workshops.index', compact('categories'));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -43,16 +47,42 @@ class TypeWorkshopController extends Controller
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function store(Request $request, User $user)
|
||||
public function store(Request $request, User $user, Workshop $workshop)
|
||||
{
|
||||
// Validación de los campos de registro
|
||||
|
||||
$validator = Validator::make($request->all(), [
|
||||
'email' => ['required', 'string', 'email', 'max:255', 'unique:'.User::class],
|
||||
'name_user' => ['required'],
|
||||
'name' => ['required'],
|
||||
'address' => ['required'],
|
||||
'categories_id' => ['required'],
|
||||
'email' => [
|
||||
'required',
|
||||
'string',
|
||||
'email',
|
||||
'max:255',
|
||||
'unique:'.User::class,
|
||||
//VALIDA EL TIPO DE extencion del dominio permitido
|
||||
'regex:/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.(com|do|net|com.do)$/',
|
||||
//valida si el correo existe, a traves de los dns
|
||||
//La función filter_var($value, FILTER_VALIDATE_EMAIL) verifica si la cadena de correo electrónico es una dirección de correo electrónico válida según el filtro FILTER_VALIDATE_EMAIL de PHP.
|
||||
//La función checkdnsrr($domain, 'MX') verifica si el dominio del correo electrónico tiene registros MX en el sistema de nombres de dominio (DNS). Esto se hace utilizando la función checkdnsrr de PHP con el tipo de registro 'MX'.
|
||||
//Los tipos de registro DNS válidos son: 'A', 'MX', 'NS', 'SOA', 'PTR', 'CNAME', 'AAAA', 'A6', 'SRV', 'NAPTR', 'TXT', 'ANY'.
|
||||
function ($attribute, $value, $fail) {
|
||||
$domain = explode('@', $value)[1];
|
||||
if (!filter_var($value, FILTER_VALIDATE_EMAIL) || !checkdnsrr($domain, 'MX')) {
|
||||
$fail('El correo electrónico no existe.');
|
||||
}
|
||||
},
|
||||
],
|
||||
'password' => ['required', 'confirmed', Password::defaults()],
|
||||
'g-recaptcha-response' => ['required', function ($attribute, $value, $fail) {
|
||||
'terms' => ['required'],
|
||||
'g-recaptcha-response' => [
|
||||
'required',
|
||||
function ($attribute, $value, $fail) {
|
||||
$recaptcha = new Recaptcha(env('RECAPTCHA_SECRET_KEY'));
|
||||
$recaptcha->verify($value);
|
||||
}],
|
||||
},
|
||||
],
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
@@ -60,15 +90,29 @@ class TypeWorkshopController extends Controller
|
||||
return redirect()->back()->withErrors($validator)->withInput();
|
||||
}
|
||||
|
||||
//crear el token de verificacion de correo
|
||||
$confirmation_code = Str::random(25);
|
||||
|
||||
$user = new User();
|
||||
$user->name = $request->input('name_user');
|
||||
$user->email = $request->input('email');
|
||||
$user->password = Hash::make($request->input('password'));
|
||||
$user->user_type = 'repair';
|
||||
$user->confirmation_code = $confirmation_code;
|
||||
$user->category_translation_id = $request->input('categories_id');
|
||||
$user->save();
|
||||
|
||||
// Guardar los campos en el modelo Shop
|
||||
$workshop->user_id = $user->id;
|
||||
$workshop->name = $request->name;
|
||||
$workshop->address = $request->address;
|
||||
$workshop->delivery_pickup_latitude = $request->latitude;
|
||||
$workshop->delivery_pickup_longitude = $request->longitude;
|
||||
// Aquí puedes guardar otros campos si los tienes
|
||||
|
||||
// Guardar el modelo Shop en la base de datos
|
||||
$workshop->save();
|
||||
|
||||
|
||||
Mail::to($user->email)->send(new VerificationEmail($user));
|
||||
|
||||
@@ -76,12 +120,72 @@ class TypeWorkshopController extends Controller
|
||||
if (Auth::attempt($request->only('email', 'password'))) {
|
||||
if (Auth::user()->email_verified_at) {
|
||||
// La cuenta está verificada, redirige a la página deseada
|
||||
return redirect()->route('shop.view.signup.complete');
|
||||
return redirect()->route('workshop.dashboard');
|
||||
} else {
|
||||
// La cuenta no está verificada, redirige a la página de verificación de correo electrónico
|
||||
return redirect()->route('shop.view.email.verification');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// // Validación de los campos de registro
|
||||
// $validator = Validator::make($request->all(), [
|
||||
// 'email' => ['required', 'string', 'email', 'max:255', 'unique:'.User::class],
|
||||
// 'password' => ['required', 'confirmed', Password::defaults()],
|
||||
// 'g-recaptcha-response' => ['required', function ($attribute, $value, $fail) {
|
||||
// $recaptcha = new Recaptcha(env('RECAPTCHA_SECRET_KEY'));
|
||||
// $recaptcha->verify($value);
|
||||
// }],
|
||||
// ]);
|
||||
|
||||
// if ($validator->fails()) {
|
||||
// // Si la validación falla, puedes redirigir o devolver una respuesta con los errores
|
||||
// return redirect()->back()->withErrors($validator)->withInput();
|
||||
// }
|
||||
|
||||
// $confirmation_code = Str::random(25);
|
||||
|
||||
// $user = new User();
|
||||
// $user->email = $request->input('email');
|
||||
// $user->password = Hash::make($request->input('password'));
|
||||
// $user->user_type = 'repair';
|
||||
// $user->confirmation_code = $confirmation_code;
|
||||
// $user->save();
|
||||
|
||||
|
||||
// Mail::to($user->email)->send(new VerificationEmail($user));
|
||||
|
||||
// // Intentar iniciar sesión automáticamente
|
||||
// if (Auth::attempt($request->only('email', 'password'))) {
|
||||
// if (Auth::user()->email_verified_at) {
|
||||
// // La cuenta está verificada, redirige a la página deseada
|
||||
// return redirect()->route('shop.view.signup.complete');
|
||||
// } else {
|
||||
// // La cuenta no está verificada, redirige a la página de verificación de correo electrónico
|
||||
// return redirect()->route('shop.view.email.verification');
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -129,41 +233,41 @@ class TypeWorkshopController extends Controller
|
||||
//
|
||||
}
|
||||
|
||||
public function workshop_complete_index()
|
||||
{
|
||||
$user = auth()->user();
|
||||
// public function workshop_complete_index()
|
||||
// {
|
||||
// $user = auth()->user();
|
||||
|
||||
return view('frontend.registro-comercio.views.workshops.workshop_complete', compact('user'));
|
||||
}
|
||||
|
||||
public function workshop_complete_store(Request $request, Workshop $workshop)
|
||||
{
|
||||
// Validación de los campos
|
||||
$validator = Validator::make($request->all(), [
|
||||
'name' => ['required'],
|
||||
'address' => ['required'],
|
||||
]);
|
||||
|
||||
// Si la validación falla, puedes redirigir de vuelta con los errores
|
||||
if ($validator->fails()) {
|
||||
return redirect()->back()->withErrors($validator)->withInput();
|
||||
}
|
||||
|
||||
// Guardar los campos en el modelo Workshop
|
||||
$workshop->name = $request->name;
|
||||
$workshop->address = $request->address;
|
||||
// Aquí puedes guardar otros campos si los tienes
|
||||
|
||||
// Guardar el modelo Workshop en la base de datos
|
||||
$workshop->save();
|
||||
|
||||
// Asignar el ID del taller al campo "workshop_id" en el modelo User
|
||||
|
||||
// Marcar el campo "shop_verified_at" como verificado en el modelo User
|
||||
$request->user()->shop_verified_at = now(); // Puedes usar la función "now()" para establecer la fecha y hora actual
|
||||
$request->user()->workshop_id = $workshop->id;
|
||||
$request->user()->save();
|
||||
|
||||
return redirect()->route('workshop.dashboard');
|
||||
}
|
||||
// return view('frontend.registro-comercio.views.workshops.workshop_complete', compact('user'));
|
||||
// }
|
||||
|
||||
// public function workshop_complete_store(Request $request, Workshop $workshop)
|
||||
// {
|
||||
// // Validación de los campos
|
||||
// $validator = Validator::make($request->all(), [
|
||||
// 'name' => ['required'],
|
||||
// 'address' => ['required'],
|
||||
// ]);
|
||||
|
||||
// // Si la validación falla, puedes redirigir de vuelta con los errores
|
||||
// if ($validator->fails()) {
|
||||
// return redirect()->back()->withErrors($validator)->withInput();
|
||||
// }
|
||||
|
||||
// // Guardar los campos en el modelo Workshop
|
||||
// $workshop->name = $request->name;
|
||||
// $workshop->address = $request->address;
|
||||
// // Aquí puedes guardar otros campos si los tienes
|
||||
|
||||
// // Guardar el modelo Workshop en la base de datos
|
||||
// $workshop->save();
|
||||
|
||||
// // Asignar el ID del taller al campo "workshop_id" en el modelo User
|
||||
|
||||
// // Marcar el campo "shop_verified_at" como verificado en el modelo User
|
||||
// $request->user()->shop_verified_at = now(); // Puedes usar la función "now()" para establecer la fecha y hora actual
|
||||
// $request->user()->workshop_id = $workshop->id;
|
||||
// $request->user()->save();
|
||||
|
||||
// return redirect()->route('workshop.dashboard');
|
||||
// }
|
||||
}
|
||||
|
||||
@@ -86,22 +86,67 @@ class UpdateController extends Controller
|
||||
|
||||
public function step2()
|
||||
{
|
||||
if (get_setting('current_version') == '7.5.0') {
|
||||
$sql_path = base_path('sqlupdates/v760.sql');
|
||||
if (get_setting('current_version') == '7.8.0') {
|
||||
$sql_path = base_path('sqlupdates/v790.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
return redirect()->route('update.step3');
|
||||
}
|
||||
if (get_setting('current_version') == '7.4.0') {
|
||||
if (get_setting('current_version') == '7.7.0') {
|
||||
$sql_path = base_path('sqlupdates/v780.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v790.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
return redirect()->route('update.step3');
|
||||
}
|
||||
elseif (get_setting('current_version') == '7.6.0') {
|
||||
$sql_path = base_path('sqlupdates/v770.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v780.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v790.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
return redirect()->route('update.step3');
|
||||
}
|
||||
elseif (get_setting('current_version') == '7.5.0') {
|
||||
$sql_path = base_path('sqlupdates/v760.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v770.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v780.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v790.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
return redirect()->route('update.step3');
|
||||
}
|
||||
elseif (get_setting('current_version') == '7.4.0') {
|
||||
$sql_path = base_path('sqlupdates/v750.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v760.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v770.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v780.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v790.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
return redirect()->route('update.step3');
|
||||
}
|
||||
if (get_setting('current_version') == '7.3.0') {
|
||||
elseif (get_setting('current_version') == '7.3.0') {
|
||||
$sql_path = base_path('sqlupdates/v740.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
@@ -111,9 +156,18 @@ class UpdateController extends Controller
|
||||
$sql_path = base_path('sqlupdates/v760.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v770.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v780.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v790.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
return redirect()->route('update.step3');
|
||||
}
|
||||
if (get_setting('current_version') == '7.2.0') {
|
||||
elseif (get_setting('current_version') == '7.2.0') {
|
||||
$sql_path = base_path('sqlupdates/v730.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
@@ -126,9 +180,18 @@ class UpdateController extends Controller
|
||||
$sql_path = base_path('sqlupdates/v760.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v770.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v780.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v790.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
return redirect()->route('update.step3');
|
||||
}
|
||||
if (get_setting('current_version') == '7.1.0') {
|
||||
elseif (get_setting('current_version') == '7.1.0') {
|
||||
$sql_path = base_path('sqlupdates/v720.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
@@ -144,9 +207,18 @@ class UpdateController extends Controller
|
||||
$sql_path = base_path('sqlupdates/v760.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v770.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v780.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v790.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
return redirect()->route('update.step3');
|
||||
}
|
||||
if (get_setting('current_version') == '7.0.0') {
|
||||
elseif (get_setting('current_version') == '7.0.0') {
|
||||
$sql_path = base_path('sqlupdates/v710.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
@@ -165,6 +237,15 @@ class UpdateController extends Controller
|
||||
$sql_path = base_path('sqlupdates/v760.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v770.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v780.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v790.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
return redirect()->route('update.step3');
|
||||
}
|
||||
elseif (get_setting('current_version') == '6.5.0') {
|
||||
@@ -189,593 +270,18 @@ class UpdateController extends Controller
|
||||
$sql_path = base_path('sqlupdates/v760.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
return redirect()->route('update.step3');
|
||||
}
|
||||
elseif (get_setting('current_version') == '6.4.0') {
|
||||
$sql_path = base_path('sqlupdates/v650.sql');
|
||||
$sql_path = base_path('sqlupdates/v770.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v700.sql');
|
||||
$sql_path = base_path('sqlupdates/v780.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v710.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v720.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v730.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v740.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v750.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v760.sql');
|
||||
$sql_path = base_path('sqlupdates/v790.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
return redirect()->route('update.step3');
|
||||
}
|
||||
elseif (get_setting('current_version') == '6.3.3') {
|
||||
$sql_path = base_path('sqlupdates/v640.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v650.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v700.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v710.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v720.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v730.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v740.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v750.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v760.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
return redirect()->route('update.step3');
|
||||
}
|
||||
elseif (get_setting('current_version') == '6.3.2') {
|
||||
$sql_path = base_path('sqlupdates/v633.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v640.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v650.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v700.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v710.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v720.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v730.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v740.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v750.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v760.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
return redirect()->route('update.step3');
|
||||
}
|
||||
elseif (get_setting('current_version') == '6.3.1') {
|
||||
$sql_path = base_path('sqlupdates/v632.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v633.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v640.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v650.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v700.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v710.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v720.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v730.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v740.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v750.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v760.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
return redirect()->route('update.step3');
|
||||
}
|
||||
elseif (get_setting('current_version') == '6.3.0') {
|
||||
$sql_path = base_path('sqlupdates/v631.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v632.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v633.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v640.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v650.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v700.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v710.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v720.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v730.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v740.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v750.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v760.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
return redirect()->route('update.step3');
|
||||
}
|
||||
elseif (get_setting('current_version') == '6.2.0') {
|
||||
$sql_path = base_path('sqlupdates/v630.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v631.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v632.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v633.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v640.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v650.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v700.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v710.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v720.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v730.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v740.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v750.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v760.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
return redirect()->route('update.step3');
|
||||
}
|
||||
elseif (get_setting('current_version') == '6.1.5') {
|
||||
$sql_path = base_path('sqlupdates/v620.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v630.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v631.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v632.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v633.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v640.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v650.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v700.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v710.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v720.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v730.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v740.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v750.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v760.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
return redirect()->route('update.step3');
|
||||
}
|
||||
elseif (get_setting('current_version') == '6.1.4') {
|
||||
$sql_path = base_path('sqlupdates/v615.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v620.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v630.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v631.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v632.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v633.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v640.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v650.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v700.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v710.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v720.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v730.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v740.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v750.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v760.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
return redirect()->route('update.step3');
|
||||
}
|
||||
elseif (get_setting('current_version') == '6.1.3') {
|
||||
$sql_path = base_path('sqlupdates/v614.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v615.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v620.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v630.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v631.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v632.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v633.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v640.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v650.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v700.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v710.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v720.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v730.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v740.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v750.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v760.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
return redirect()->route('update.step3');
|
||||
}
|
||||
elseif (get_setting('current_version') == '6.1.2') {
|
||||
$sql_path = base_path('sqlupdates/v613.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v614.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v615.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v620.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v630.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v631.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v632.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v633.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v640.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v650.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v700.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v710.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v720.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v730.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v740.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v750.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v760.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
return redirect()->route('update.step3');
|
||||
}
|
||||
elseif (get_setting('current_version') == '6.1.1') {
|
||||
$sql_path = base_path('sqlupdates/v612.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v613.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v614.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v615.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v620.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v630.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v631.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v632.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v633.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v640.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v650.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v700.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v710.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v720.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v730.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v740.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v750.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v760.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
return redirect()->route('update.step3');
|
||||
}
|
||||
elseif (get_setting('current_version') == '6.1') {
|
||||
$sql_path = base_path('sqlupdates/v611.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v612.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v613.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v614.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v615.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v620.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v630.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v631.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v632.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v633.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v640.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v650.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v700.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v710.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v720.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v730.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v740.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v750.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v760.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
return redirect()->route('update.step3');
|
||||
}
|
||||
elseif (get_setting('current_version') == '6.0') {
|
||||
$sql_path = base_path('sqlupdates/v61.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v611.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v612.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v613.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v614.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v615.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v620.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v630.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v631.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v632.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v633.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v640.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v650.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v700.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v710.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v720.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v730.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v740.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v750.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
$sql_path = base_path('sqlupdates/v760.sql');
|
||||
DB::unprepared(file_get_contents($sql_path));
|
||||
|
||||
return redirect()->route('update.step3');
|
||||
}
|
||||
else {
|
||||
Artisan::call('view:clear');
|
||||
Artisan::call('cache:clear');
|
||||
@@ -792,11 +298,11 @@ class UpdateController extends Controller
|
||||
Artisan::call('view:clear');
|
||||
Artisan::call('cache:clear');
|
||||
|
||||
$this->setAdmnRole();
|
||||
$this->convertSellerIntoShop();
|
||||
$this->convertSellerIntoUser();
|
||||
$this->convertSellerPackageIntoShop();
|
||||
$this->convertTrasnalations();
|
||||
// $this->setAdmnRole();
|
||||
// $this->convertSellerIntoShop();
|
||||
// $this->convertSellerIntoUser();
|
||||
// $this->convertSellerPackageIntoShop();
|
||||
// $this->convertTrasnalations();
|
||||
// $this->convertColorsName();
|
||||
|
||||
$previousRouteServiceProvier = base_path('app/Providers/RouteServiceProvider.php');
|
||||
|
||||
@@ -27,9 +27,6 @@ class WalletController extends Controller
|
||||
$request->session()->put('payment_type', 'wallet_payment');
|
||||
$request->session()->put('payment_data', $data);
|
||||
|
||||
$request->session()->put('payment_type', 'wallet_payment');
|
||||
$request->session()->put('payment_data', $data);
|
||||
|
||||
$decorator = __NAMESPACE__ . '\\Payment\\' . str_replace(' ', '', ucwords(str_replace('_', ' ', $request->payment_option))) . "Controller";
|
||||
if (class_exists($decorator)) {
|
||||
return (new $decorator)->pay($request);
|
||||
|
||||
@@ -1,27 +1,50 @@
|
||||
<?php
|
||||
|
||||
use Carbon\Carbon;
|
||||
use App\Models\Tax;
|
||||
use App\Models\Cart;
|
||||
use App\Models\City;
|
||||
use App\Models\Shop;
|
||||
use App\Models\User;
|
||||
use App\Models\Addon;
|
||||
use App\Models\Brand;
|
||||
use App\Models\Color;
|
||||
use App\Models\Order;
|
||||
use App\Models\Coupon;
|
||||
use App\Models\Seller;
|
||||
use App\Models\Upload;
|
||||
use App\Models\Wallet;
|
||||
use App\Models\Address;
|
||||
use App\Models\Carrier;
|
||||
use App\Models\Country;
|
||||
use App\Models\Product;
|
||||
use App\Models\Category;
|
||||
use App\Models\Currency;
|
||||
use App\Models\Language;
|
||||
use App\Models\Wishlist;
|
||||
use App\Models\Attribute;
|
||||
use App\Models\ClubPoint;
|
||||
use App\Models\FlashDeal;
|
||||
use App\Models\CouponUsage;
|
||||
use App\Models\DeliveryBoy;
|
||||
use App\Models\OrderDetail;
|
||||
use App\Models\PickupPoint;
|
||||
use App\Models\Translation;
|
||||
use App\Models\BlogCategory;
|
||||
use App\Models\Conversation;
|
||||
use App\Models\FollowSeller;
|
||||
use App\Models\ProductStock;
|
||||
use App\Models\CombinedOrder;
|
||||
use App\Models\SellerPackage;
|
||||
use App\Models\AffiliateConfig;
|
||||
use App\Models\AffiliateOption;
|
||||
use App\Models\BusinessSetting;
|
||||
use App\Models\CustomerPackage;
|
||||
use App\Models\CustomerProduct;
|
||||
use App\Utility\SendSMSUtility;
|
||||
use App\Utility\CategoryUtility;
|
||||
use App\Models\AuctionProductBid;
|
||||
use App\Models\ManualPaymentMethod;
|
||||
use App\Models\SellerPackagePayment;
|
||||
use App\Utility\NotificationUtility;
|
||||
use App\Http\Resources\V2\CarrierCollection;
|
||||
@@ -29,11 +52,6 @@ use App\Http\Controllers\AffiliateController;
|
||||
use App\Http\Controllers\ClubPointController;
|
||||
use App\Http\Controllers\CommissionController;
|
||||
use AizPackages\ColorCodeConverter\Services\ColorCodeConverter;
|
||||
use App\Models\Brand;
|
||||
use App\Models\Category;
|
||||
use App\Models\CustomerProduct;
|
||||
use App\Models\FlashDeal;
|
||||
use App\Models\Language;
|
||||
|
||||
//sensSMS function for OTP
|
||||
if (!function_exists('sendSMS')) {
|
||||
@@ -91,6 +109,15 @@ if (!function_exists('convert_to_kes')) {
|
||||
}
|
||||
}
|
||||
|
||||
// get all active countries
|
||||
if (!function_exists('get_active_countries')) {
|
||||
function get_active_countries()
|
||||
{
|
||||
$country_query = Country::query();
|
||||
return $country_query->isEnabled()->get();
|
||||
}
|
||||
}
|
||||
|
||||
//filter products based on vendor activation system
|
||||
if (!function_exists('filter_products')) {
|
||||
function filter_products($products)
|
||||
@@ -214,7 +241,6 @@ if (!function_exists('format_price')) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//formats price to home default price with convertion
|
||||
if (!function_exists('single_price')) {
|
||||
function single_price($price)
|
||||
@@ -1145,11 +1171,11 @@ if (!function_exists('my_asset')) {
|
||||
*/
|
||||
function my_asset($path, $secure = null)
|
||||
{
|
||||
if (env('FILESYSTEM_DRIVER') == 's3') {
|
||||
return Storage::disk('s3')->url($path);
|
||||
} else {
|
||||
return app('url')->asset('public/' . $path, $secure);
|
||||
if (env('FILESYSTEM_DRIVER') != 'local') {
|
||||
return Storage::disk(env('FILESYSTEM_DRIVER'))->url($path);
|
||||
}
|
||||
|
||||
return app('url')->asset('public/' . $path, $secure);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1189,11 +1215,11 @@ if (!function_exists('getBaseURL')) {
|
||||
if (!function_exists('getFileBaseURL')) {
|
||||
function getFileBaseURL()
|
||||
{
|
||||
if (env('FILESYSTEM_DRIVER') == 's3') {
|
||||
return env('AWS_URL') . '/';
|
||||
} else {
|
||||
return getBaseURL() . 'public/';
|
||||
if (env('FILESYSTEM_DRIVER') != 'local') {
|
||||
return env(Str::upper(env('FILESYSTEM_DRIVER')).'_URL') . '/';
|
||||
}
|
||||
|
||||
return getBaseURL() . 'public/';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1328,6 +1354,20 @@ if (!function_exists('checkout_done')) {
|
||||
}
|
||||
}
|
||||
|
||||
// get user total ordered products
|
||||
if (!function_exists('get_user_total_ordered_products')) {
|
||||
function get_user_total_ordered_products()
|
||||
{
|
||||
$orders_query = Order::query();
|
||||
$orders = $orders_query->where('user_id', Auth::user()->id)->get();
|
||||
$total = 0;
|
||||
foreach ($orders as $order) {
|
||||
$total += count($order->orderDetails);
|
||||
}
|
||||
return $total;
|
||||
}
|
||||
}
|
||||
|
||||
//for api
|
||||
if (!function_exists('wallet_payment_done')) {
|
||||
function wallet_payment_done($user_id, $amount, $payment_method, $payment_details)
|
||||
@@ -1475,11 +1515,20 @@ if (!function_exists('get_url_params')) {
|
||||
}
|
||||
}
|
||||
|
||||
// get Admin
|
||||
if (!function_exists('get_admin')) {
|
||||
function get_admin()
|
||||
{
|
||||
$admin_query = User::query();
|
||||
return $admin_query->where('user_type', 'admin')->first();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('get_featured_flash_deal')) {
|
||||
function get_featured_flash_deal()
|
||||
{
|
||||
$featured_flash_deal_query = FlashDeal::query();
|
||||
$featured_flash_deal = $featured_flash_deal_query->where('status', 1)->where('featured', 1)
|
||||
$featured_flash_deal = $featured_flash_deal_query->isActiveAndFeatured()
|
||||
->where('start_date', '<=', strtotime(date('Y-m-d H:i:s')))
|
||||
->where('end_date', '>=', strtotime(date('Y-m-d H:i:s')))
|
||||
->first();
|
||||
@@ -1488,6 +1537,26 @@ if (!function_exists('get_featured_flash_deal')) {
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('get_active_flash_deals')) {
|
||||
function get_active_flash_deals()
|
||||
{
|
||||
$activated_flash_deal_query = FlashDeal::query();
|
||||
$activated_flash_deal_query = $activated_flash_deal_query->where("status", 1);
|
||||
|
||||
return $activated_flash_deal_query->get();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('get_active_taxes')) {
|
||||
function get_active_taxes()
|
||||
{
|
||||
$activated_tax_query = Tax::query();
|
||||
$activated_tax_query = $activated_tax_query->where("tax_status", 1);
|
||||
|
||||
return $activated_tax_query->get();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('get_system_language')) {
|
||||
function get_system_language()
|
||||
{
|
||||
@@ -1514,6 +1583,15 @@ if (!function_exists('get_all_active_language')) {
|
||||
}
|
||||
}
|
||||
|
||||
// get Session langauge
|
||||
if (!function_exists('get_session_language')) {
|
||||
function get_session_language()
|
||||
{
|
||||
$language_query = Language::query();
|
||||
return $language_query->where('code', Session::get('locale', Config::get('app.locale')))->first();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('get_system_currency')) {
|
||||
function get_system_currency()
|
||||
{
|
||||
@@ -1532,34 +1610,131 @@ if (!function_exists('get_system_currency')) {
|
||||
if (!function_exists('get_all_active_currency')) {
|
||||
function get_all_active_currency()
|
||||
{
|
||||
$language_query = Currency::query();
|
||||
$language_query->where('status', 1);
|
||||
$currency_query = Currency::query();
|
||||
$currency_query->where('status', 1);
|
||||
|
||||
return $language_query->get();
|
||||
return $currency_query->get();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('get_single_product')) {
|
||||
function get_single_product($product_id)
|
||||
{
|
||||
$product_query = Product::query();
|
||||
$product_query = Product::query()->with('thumbnail');
|
||||
return $product_query->find($product_id);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('get_single_brand')) {
|
||||
function get_single_brand($brand_id)
|
||||
// get multiple Products
|
||||
if (!function_exists('get_multiple_products')) {
|
||||
function get_multiple_products($product_ids)
|
||||
{
|
||||
$brand_query = Brand::query();
|
||||
return $brand_query->find($brand_id);
|
||||
$products_query = Product::query();
|
||||
return $products_query->whereIn('id', $product_ids)->get();
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('get_single_category')) {
|
||||
function get_single_category($category_id)
|
||||
// get count of products
|
||||
if (!function_exists('get_products_count')) {
|
||||
function get_products_count($user_id = null)
|
||||
{
|
||||
$category_query = Category::query();
|
||||
return $category_query->find($category_id);
|
||||
$products_query = Product::query();
|
||||
if($user_id){
|
||||
$products_query = $products_query->where('user_id', $user_id);
|
||||
}
|
||||
return $products_query->isApprovedPublished()->count();
|
||||
}
|
||||
}
|
||||
|
||||
// get minimum unit price of products
|
||||
if (!function_exists('get_product_min_unit_price')) {
|
||||
function get_product_min_unit_price($user_id = null)
|
||||
{
|
||||
$product_query = Product::query();
|
||||
if($user_id){
|
||||
$product_query = $product_query->where('user_id', $user_id);
|
||||
}
|
||||
return $product_query->isApprovedPublished()->min('unit_price');
|
||||
}
|
||||
}
|
||||
|
||||
// get maximum unit price of products
|
||||
if (!function_exists('get_product_max_unit_price')) {
|
||||
function get_product_max_unit_price($user_id = null)
|
||||
{
|
||||
$product_query = Product::query();
|
||||
if($user_id){
|
||||
$product_query = $product_query->where('user_id', $user_id);
|
||||
}
|
||||
return $product_query->isApprovedPublished()->max('unit_price');
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('get_featured_products')) {
|
||||
function get_featured_products()
|
||||
{
|
||||
return Cache::remember('featured_products', 3600, function () {
|
||||
$product_query = Product::query();
|
||||
return filter_products($product_query->where('featured', '1'))->latest()->limit(12)->get();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('get_best_selling_products')) {
|
||||
function get_best_selling_products($limit, $user_id=null)
|
||||
{
|
||||
$product_query = Product::query();
|
||||
if($user_id){
|
||||
$product_query = $product_query->where('user_id', $user_id);
|
||||
}
|
||||
return filter_products($product_query->orderBy('num_of_sale', 'desc'))->limit($limit)->get();
|
||||
}
|
||||
}
|
||||
|
||||
// Get Seller Products
|
||||
if (!function_exists('get_all_sellers')) {
|
||||
function get_all_sellers()
|
||||
{
|
||||
$seller_query = Seller::query();
|
||||
return $seller_query->get();
|
||||
}
|
||||
}
|
||||
|
||||
// Get Seller Products
|
||||
if (!function_exists('get_seller_products')) {
|
||||
function get_seller_products($user_id)
|
||||
{
|
||||
$product_query = Product::query();
|
||||
return $product_query->where('user_id', $user_id)->isApprovedPublished()->orderBy('created_at', 'desc')->limit(15)->get();
|
||||
}
|
||||
}
|
||||
|
||||
// Get Seller Best Selling Products
|
||||
if (!function_exists('get_shop_best_selling_products')) {
|
||||
function get_shop_best_selling_products($user_id)
|
||||
{
|
||||
$product_query = Product::query();
|
||||
return $product_query->where('user_id', $user_id)->isApprovedPublished()->orderBy('num_of_sale', 'desc')->paginate(24);
|
||||
}
|
||||
}
|
||||
|
||||
// Get all auction Products
|
||||
if (!function_exists('get_all_auction_products')) {
|
||||
function get_auction_products($limit=null, $paginate=null)
|
||||
{
|
||||
$product_query = Product::query();
|
||||
$products = $product_query->latest()->where('published', 1)->where('auction_product', 1);
|
||||
if (get_setting('seller_auction_product') == 0) {
|
||||
$products = $products->where('added_by', 'admin');
|
||||
}
|
||||
$products = $products->where('auction_start_date', '<=', strtotime("now"))->where('auction_end_date', '>=', strtotime("now"));
|
||||
|
||||
if($limit){
|
||||
$products = $products->limit($limit);
|
||||
}elseif($paginate){
|
||||
return $products->paginate($paginate);
|
||||
}
|
||||
return $products->get();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1597,6 +1772,119 @@ if (!function_exists('get_home_page_classified_products')) {
|
||||
}
|
||||
}
|
||||
|
||||
// Get related product
|
||||
if (!function_exists('get_related_products')) {
|
||||
function get_related_products($product)
|
||||
{
|
||||
$product_query = Product::query();
|
||||
return filter_products($product_query->where('id', '!=', $product->id)->where('category_id', $product->category_id))->limit(10)->get();
|
||||
}
|
||||
}
|
||||
|
||||
// Get all brands
|
||||
if (!function_exists('get_all_brands')) {
|
||||
function get_all_brands()
|
||||
{
|
||||
$brand_query = Brand::query();
|
||||
return $brand_query->get();
|
||||
}
|
||||
}
|
||||
|
||||
// Get single brands
|
||||
if (!function_exists('get_single_brand')) {
|
||||
function get_single_brand($brand_id)
|
||||
{
|
||||
$brand_query = Brand::query();
|
||||
return $brand_query->find($brand_id);
|
||||
}
|
||||
}
|
||||
|
||||
// Get Brands by products
|
||||
if (!function_exists('get_brands_by_products')) {
|
||||
function get_brands_by_products($usrt_id)
|
||||
{
|
||||
$product_query = Product::query();
|
||||
$brand_ids = $product_query->where('user_id', $usrt_id)->isApprovedPublished()->whereNotNull('brand_id')->pluck('brand_id')->toArray();
|
||||
|
||||
$brand_query = Brand::query();
|
||||
return $brand_query->whereIn('id', $brand_ids)->get();
|
||||
}
|
||||
}
|
||||
|
||||
// Get single category
|
||||
if (!function_exists('get_single_category')) {
|
||||
function get_single_category($category_id)
|
||||
{
|
||||
$category_query = Category::query()->with('coverImage');
|
||||
return $category_query->find($category_id);
|
||||
}
|
||||
}
|
||||
|
||||
// Get categories by level zero
|
||||
if (!function_exists('get_level_zero_categories')) {
|
||||
function get_level_zero_categories()
|
||||
{
|
||||
$categories_query = Category::query();
|
||||
return $categories_query->where('level', 0)->orderBy('order_level', 'desc')->get();
|
||||
}
|
||||
}
|
||||
|
||||
// Get categories by products
|
||||
if (!function_exists('get_categories_by_products')) {
|
||||
function get_categories_by_products($user_id)
|
||||
{
|
||||
$product_query = Product::query();
|
||||
$category_ids = $product_query->where('user_id', $user_id)->isApprovedPublished()->pluck('category_id')->toArray();
|
||||
|
||||
$category_query = Category::query();
|
||||
return $category_query->whereIn('id', $category_ids)->get();
|
||||
}
|
||||
}
|
||||
|
||||
// Get single Color name
|
||||
if (!function_exists('get_single_color_name')) {
|
||||
function get_single_color_name($color)
|
||||
{
|
||||
$color_query = Color::query();
|
||||
return $color_query->where('code', $color)->first()->name;
|
||||
}
|
||||
}
|
||||
|
||||
// Get single Attribute
|
||||
if (!function_exists('get_single_attribute_name')) {
|
||||
function get_single_attribute_name($attribute)
|
||||
{
|
||||
$attribute_query = Attribute::query();
|
||||
return $attribute_query->find($attribute)->getTranslation('name');
|
||||
}
|
||||
}
|
||||
|
||||
// Get user cart
|
||||
if (!function_exists('get_user_cart')) {
|
||||
function get_user_cart()
|
||||
{
|
||||
$cart = null;
|
||||
if (auth()->user() != null) {
|
||||
$cart = Cart::where('user_id', Auth::user()->id)->get();
|
||||
} else {
|
||||
$temp_user_id = Session()->get('temp_user_id');
|
||||
if ($temp_user_id) {
|
||||
$cart = Cart::where('temp_user_id', $temp_user_id)->get();
|
||||
}
|
||||
}
|
||||
return $cart;
|
||||
}
|
||||
}
|
||||
|
||||
// Get user Wishlist
|
||||
if (!function_exists('get_user_wishlist')) {
|
||||
function get_user_wishlist()
|
||||
{
|
||||
$wishlist_query = Wishlist::query();
|
||||
return $wishlist_query->where('user_id', Auth::user()->id)->get();
|
||||
}
|
||||
}
|
||||
|
||||
//Get best seller
|
||||
if (!function_exists('get_best_sellers')) {
|
||||
function get_best_sellers($limit = '')
|
||||
@@ -1607,6 +1895,271 @@ if (!function_exists('get_best_sellers')) {
|
||||
}
|
||||
}
|
||||
|
||||
//Get users followed sellers
|
||||
if (!function_exists('get_followed_sellers')) {
|
||||
function get_followed_sellers()
|
||||
{
|
||||
$followed_seller_query = FollowSeller::query();
|
||||
return $followed_seller_query->where('user_id', Auth::user()->id)->pluck('shop_id')->toArray();
|
||||
}
|
||||
}
|
||||
|
||||
// Get Order Details
|
||||
if (!function_exists('get_order_details')) {
|
||||
function get_order_details($order_id)
|
||||
{
|
||||
$order_detail_query = OrderDetail::query();
|
||||
return $order_detail_query->find($order_id);
|
||||
}
|
||||
}
|
||||
|
||||
// Get Order Details by review
|
||||
if (!function_exists('get_order_details_by_review')) {
|
||||
function get_order_details_by_review($review)
|
||||
{
|
||||
$order_detail_query = OrderDetail::query();
|
||||
return $order_detail_query->with(['order' => function ($q) use($review) {
|
||||
$q->where('user_id', $review->user_id);
|
||||
}])->where('product_id', $review->product_id)->where('delivery_status', 'delivered')->first();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Get user total expenditure
|
||||
if (!function_exists('get_user_total_expenditure')) {
|
||||
function get_user_total_expenditure()
|
||||
{
|
||||
$user_expenditure_query = Order::query();
|
||||
return $user_expenditure_query->where('user_id', Auth::user()->id)->where('payment_status', 'paid')->sum('grand_total');
|
||||
}
|
||||
}
|
||||
|
||||
// Get count by delivery viewed
|
||||
if (!function_exists('get_count_by_delivery_viewed')) {
|
||||
function get_count_by_delivery_viewed()
|
||||
{
|
||||
$order_query = Order::query();
|
||||
return $order_query->where('user_id', Auth::user()->id)->where('delivery_viewed', 0)->get()->count();
|
||||
}
|
||||
}
|
||||
|
||||
// Get delivery boy info
|
||||
if (!function_exists('get_delivery_boy_info')) {
|
||||
function get_delivery_boy_info()
|
||||
{
|
||||
$delivery_boy_info_query = DeliveryBoy::query();
|
||||
return $delivery_boy_info_query->where('user_id', Auth::user()->id)->first();
|
||||
}
|
||||
}
|
||||
|
||||
// Get count by completed delivery
|
||||
if (!function_exists('get_delivery_boy_total_completed_delivery')) {
|
||||
function get_delivery_boy_total_completed_delivery()
|
||||
{
|
||||
$delivery_boy_delivery_query = Order::query();
|
||||
return $delivery_boy_delivery_query->where('assign_delivery_boy', Auth::user()->id)
|
||||
->where('delivery_status', 'delivered')
|
||||
->count();
|
||||
}
|
||||
}
|
||||
|
||||
// Get count by pending delivery
|
||||
if (!function_exists('get_delivery_boy_total_pending_delivery')) {
|
||||
function get_delivery_boy_total_pending_delivery()
|
||||
{
|
||||
$delivery_boy_delivery_query = Order::query();
|
||||
return $delivery_boy_delivery_query->where('assign_delivery_boy', Auth::user()->id)
|
||||
->where('delivery_status', '!=', 'delivered')
|
||||
->where('delivery_status', '!=', 'cancelled')
|
||||
->where('cancel_request', '0')
|
||||
->count();
|
||||
}
|
||||
}
|
||||
|
||||
// Get count by cancelled delivery
|
||||
if (!function_exists('get_delivery_boy_total_cancelled_delivery')) {
|
||||
function get_delivery_boy_total_cancelled_delivery()
|
||||
{
|
||||
$delivery_boy_delivery_query = Order::query();
|
||||
return $delivery_boy_delivery_query->where('assign_delivery_boy', Auth::user()->id)
|
||||
->where('delivery_status', 'cancelled')
|
||||
->count();
|
||||
}
|
||||
}
|
||||
|
||||
// Get count by payment status viewed
|
||||
if (!function_exists('get_order_info')) {
|
||||
function get_order_info($order_id = null)
|
||||
{
|
||||
$order_query = Order::query();
|
||||
return $order_query->where('id',$order_id)->first();
|
||||
}
|
||||
}
|
||||
|
||||
// Get count by payment status viewed
|
||||
if (!function_exists('get_user_order_by_id')) {
|
||||
function get_user_order_by_id($order_id = null)
|
||||
{
|
||||
$order_query = Order::query();
|
||||
return $order_query->where('id',$order_id)->where('user_id',Auth::user()->id)->first();
|
||||
}
|
||||
}
|
||||
|
||||
// Get Auction Product Bid Info
|
||||
if (!function_exists('get_auction_product_bid_info')) {
|
||||
function get_auction_product_bid_info($bid_id = null)
|
||||
{
|
||||
$product_bid_info_query = AuctionProductBid::query();
|
||||
return $product_bid_info_query->where('id',$bid_id)->first();
|
||||
}
|
||||
}
|
||||
|
||||
// Get count by payment status viewed
|
||||
if (!function_exists('get_count_by_payment_status_viewed')) {
|
||||
function get_count_by_payment_status_viewed()
|
||||
{
|
||||
$order_query = Order::query();
|
||||
return $order_query->where('user_id', Auth::user()->id)->where('payment_status_viewed', 0)->get()->count();
|
||||
}
|
||||
}
|
||||
|
||||
// Get Uploaded file
|
||||
if (!function_exists('get_single_uploaded_file')) {
|
||||
function get_single_uploaded_file($file_id)
|
||||
{
|
||||
$file_query = Upload::query();
|
||||
return $file_query->find($file_id);
|
||||
}
|
||||
}
|
||||
|
||||
// Get single customer package file
|
||||
if (!function_exists('get_single_customer_package')) {
|
||||
function get_single_customer_package($package_id)
|
||||
{
|
||||
$customer_package_query = CustomerPackage::query();
|
||||
return $customer_package_query->find($package_id);
|
||||
}
|
||||
}
|
||||
|
||||
// Get single Seller package file
|
||||
if (!function_exists('get_single_seller_package')) {
|
||||
function get_single_seller_package($package_id)
|
||||
{
|
||||
$seller_package_query = SellerPackage::query();
|
||||
return $seller_package_query->find($package_id);
|
||||
}
|
||||
}
|
||||
|
||||
// Get user last wallet recharge
|
||||
if (!function_exists('get_user_last_wallet_recharge')) {
|
||||
function get_user_last_wallet_recharge()
|
||||
{
|
||||
$recharge_query = Wallet::query();
|
||||
return $recharge_query->where('user_id', Auth::user()->id)->orderBy('id', 'desc')->first();
|
||||
}
|
||||
}
|
||||
|
||||
// Get user total Club point
|
||||
if (!function_exists('get_user_total_club_point')) {
|
||||
function get_user_total_club_point()
|
||||
{
|
||||
$club_point_query = ClubPoint::query();
|
||||
return $club_point_query->where('user_id', Auth::user()->id)->where('convert_status', 0)->sum('points');
|
||||
}
|
||||
}
|
||||
|
||||
// Get all manual payment methods
|
||||
if (!function_exists('get_all_manual_payment_methods')) {
|
||||
function get_all_manual_payment_methods()
|
||||
{
|
||||
$manual_payment_methods_query = ManualPaymentMethod::query();
|
||||
return $manual_payment_methods_query->get();
|
||||
}
|
||||
}
|
||||
|
||||
// Get all blog category
|
||||
if (!function_exists('get_all_blog_categories')) {
|
||||
function get_all_blog_categories()
|
||||
{
|
||||
$blog_category_query = BlogCategory::query();
|
||||
return $blog_category_query->get();
|
||||
}
|
||||
}
|
||||
|
||||
// Get all Pickup Points
|
||||
if (!function_exists('get_all_pickup_points')) {
|
||||
function get_all_pickup_points()
|
||||
{
|
||||
$pickup_points_query = PickupPoint::query();
|
||||
return $pickup_points_query->isActive()->get();
|
||||
}
|
||||
}
|
||||
|
||||
// get Shop by user id
|
||||
if (!function_exists('get_shop_by_user_id')) {
|
||||
function get_shop_by_user_id($user_id)
|
||||
{
|
||||
$shop_query = Shop::query();
|
||||
return $shop_query->where('user_id', $user_id)->first();
|
||||
}
|
||||
}
|
||||
|
||||
// get Coupons
|
||||
if (!function_exists('get_coupons')) {
|
||||
function get_coupons($user_id = null, $paginate = null)
|
||||
{
|
||||
$coupon_query = Coupon::query();
|
||||
$coupon_query = $coupon_query->where('start_date', '<=', strtotime(date('d-m-Y')))->where('end_date', '>=', strtotime(date('d-m-Y')));
|
||||
if($user_id){
|
||||
$coupon_query = $coupon_query-> where('user_id', $user_id);
|
||||
}
|
||||
if($paginate){
|
||||
return $coupon_query->paginate($paginate);
|
||||
}
|
||||
return $coupon_query->get();
|
||||
}
|
||||
}
|
||||
|
||||
// get non-viewed Conversations
|
||||
if (!function_exists('get_non_viewed_conversations')) {
|
||||
function get_non_viewed_conversations()
|
||||
{
|
||||
$Conversation_query = Conversation::query();
|
||||
return $Conversation_query->where('sender_id', Auth::user()->id)->where('sender_viewed', 0)->get();
|
||||
}
|
||||
}
|
||||
|
||||
// get affliate option status
|
||||
if (!function_exists('get_affliate_option_status')) {
|
||||
function get_affliate_option_status($status = false)
|
||||
{
|
||||
if(AffiliateOption::where('type', 'product_sharing')->first()->status ||
|
||||
AffiliateOption::where('type', 'category_wise_affiliate')->first()->status){
|
||||
$status = true;
|
||||
}
|
||||
return $status;
|
||||
}
|
||||
}
|
||||
|
||||
// get affliate option purchase status
|
||||
if (!function_exists('get_affliate_purchase_option_status')) {
|
||||
function get_affliate_purchase_option_status($status = false)
|
||||
{
|
||||
if(AffiliateOption::where('type', 'user_registration_first_purchase')->first()->status){
|
||||
$status = true;
|
||||
}
|
||||
return $status;
|
||||
}
|
||||
}
|
||||
|
||||
// get affliate config
|
||||
if (!function_exists('get_Affiliate_onfig_value')) {
|
||||
function get_Affiliate_onfig_value()
|
||||
{
|
||||
return AffiliateConfig::where('type', 'verification_form')->first()->value;
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('timezones')) {
|
||||
function timezones()
|
||||
{
|
||||
|
||||
@@ -29,7 +29,6 @@ class Kernel extends HttpKernel
|
||||
\App\Http\Middleware\TrustProxies::class,
|
||||
\Illuminate\Session\Middleware\StartSession::class,
|
||||
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
||||
\App\Http\Middleware\CorsMiddleware::class,
|
||||
];
|
||||
|
||||
/**
|
||||
@@ -89,7 +88,6 @@ class Kernel extends HttpKernel
|
||||
'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
|
||||
'role_or_permission' => \Spatie\Permission\Middlewares\RoleOrPermissionMiddleware::class,
|
||||
'prevent-back-history' => \App\Http\Middleware\PreventBackHistory::class,
|
||||
/* 'cors' => \App\Http\Middleware\CorsMiddleware::class, */
|
||||
];
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,15 +14,12 @@ class IsUser
|
||||
* @param \Closure $next
|
||||
* @return mixed
|
||||
*/
|
||||
//AQUI AGREGO LOS DIFERENTES TIPOS DE USUARIOS
|
||||
|
||||
public function handle($request, Closure $next)
|
||||
{
|
||||
if (Auth::check() &&
|
||||
(Auth::user()->user_type == 'customer' ||
|
||||
Auth::user()->user_type == 'seller' ||
|
||||
Auth::user()->user_type == 'delivery_boy'||
|
||||
Auth::user()->user_type == 'repair') ) {
|
||||
Auth::user()->user_type == 'delivery_boy') ) {
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ class SellerRegistrationRequest extends FormRequest
|
||||
|
||||
$rules['name'] = 'required|string|max:255';
|
||||
$rules['email'] = 'required|email|unique:users|max:255';
|
||||
$rules['password' ] = 'required|string|min:6'; /* |confirmed */
|
||||
$rules['password' ] = 'required|string|min:6|confirmed';
|
||||
$rules['shop_name' ] = 'required|max:255';
|
||||
$rules['address'] = 'required';
|
||||
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources\V2\Auction;
|
||||
|
||||
use App\Models\Order;
|
||||
use App\Models\OrderDetail;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class AuctionBidProducts extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
$order = null;
|
||||
$isBuyable = false;
|
||||
$my_bided_product = $this->bids->where('user_id', auth()->id())->first();
|
||||
$highest_bid = $this->bids->max('amount');
|
||||
$order_detail = OrderDetail::where('product_id', $this->id)->first();
|
||||
if ($order_detail != null) {
|
||||
$order = Order::where('id', $order_detail->order_id)->where('user_id', auth()->id())->first();
|
||||
}
|
||||
|
||||
if ($my_bided_product->product->auction_end_date < strtotime("now") && $my_bided_product->amount == $highest_bid && $order == null) {
|
||||
$action = 'Buy';
|
||||
$isBuyable = true;
|
||||
} elseif ($order != null) {
|
||||
$action = 'Purchased';
|
||||
} else {
|
||||
$action = 'N/A';
|
||||
}
|
||||
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'name' => $this->name,
|
||||
'thumbnail_image' => uploaded_asset($this->thumbnail_img),
|
||||
'my_bid' => single_price($my_bided_product->amount),
|
||||
'highest_bid' => single_price($highest_bid),
|
||||
'auction_end_date' => $this->auction_end_date < strtotime("now") ? translate('Ended') : date('d.m.Y H:i:s', $this->auction_end_date),
|
||||
'action' => $action,
|
||||
'isBuyable' => $isBuyable,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources\V2\Auction;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class AuctionPurchaseHistory extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
$order = \App\Models\Order::find($this->id);
|
||||
return [
|
||||
'id' => $order->id,
|
||||
'code' => $order->code,
|
||||
'date' => date('d-m-Y', $order->date),
|
||||
'amount' => single_price($order->grand_total),
|
||||
'delivery_status' => translate(ucfirst(str_replace('_', ' ', $order->orderDetails->first()->delivery_status))),
|
||||
'payment_status' => $order->payment_status == 'paid' ? translate('Paid') : translate('Unpaid'),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -29,12 +29,12 @@ class PurchaseHistoryCollection extends ResourceCollection
|
||||
'payment_status_string' => ucwords(str_replace('_', ' ', $data->payment_status)),
|
||||
'delivery_status' => $data->delivery_status,
|
||||
'delivery_status_string' => $data->delivery_status == 'pending' ? "Order Placed" : ucwords(str_replace('_', ' ', $data->delivery_status)),
|
||||
'grand_total' => format_price($data->grand_total),
|
||||
'grand_total' => format_price(convert_price($data->grand_total)),
|
||||
'plane_grand_total' => $data->grand_total,
|
||||
'coupon_discount' => format_price($data->coupon_discount),
|
||||
'shipping_cost' => format_price($data->orderDetails->sum('shipping_cost')),
|
||||
'subtotal' => format_price($data->orderDetails->sum('price')),
|
||||
'tax' => format_price($data->orderDetails->sum('tax')),
|
||||
'coupon_discount' => format_price(convert_price($data->coupon_discount)),
|
||||
'shipping_cost' => format_price(convert_price($data->orderDetails->sum('shipping_cost'))),
|
||||
'subtotal' => format_price(convert_price($data->orderDetails->sum('price'))),
|
||||
'tax' => format_price(convert_price($data->orderDetails->sum('tax'))),
|
||||
'date' => Carbon::createFromTimestamp($data->date)->format('d-m-Y'),
|
||||
'cancel_request' => $data->cancel_request == 1,
|
||||
'manually_payable' => $data->manual_payment && $data->manual_payment_data == null,
|
||||
|
||||
@@ -20,12 +20,14 @@ class PurchaseHistoryItemsCollection extends ResourceCollection
|
||||
$no_of_max_day = get_setting('refund_request_time');
|
||||
$last_refund_date = $data->created_at->addDays($no_of_max_day);
|
||||
$today_date = \Carbon\Carbon::now();
|
||||
if ($data->product != null &&
|
||||
if (
|
||||
$data->product != null &&
|
||||
$data->product->refundable != 0 &&
|
||||
$data->refund_request == null &&
|
||||
$today_date <= $last_refund_date &&
|
||||
$data->payment_status == 'paid' &&
|
||||
$data->delivery_status == 'delivered') {
|
||||
$data->delivery_status == 'delivered'
|
||||
) {
|
||||
$refund_button = true;
|
||||
} else if ($data->refund_request != null && $data->refund_request->refund_status == 0) {
|
||||
$refund_label = "Pending";
|
||||
@@ -47,10 +49,10 @@ class PurchaseHistoryItemsCollection extends ResourceCollection
|
||||
'product_id' => $data->product->id,
|
||||
'product_name' => $data->product->name,
|
||||
'variation' => $data->variation,
|
||||
'price' => format_price($data->price),
|
||||
'tax' => format_price($data->tax),
|
||||
'shipping_cost' => format_price($data->shipping_cost),
|
||||
'coupon_discount' => format_price($data->coupon_discount),
|
||||
'price' => format_price(convert_price($data->price)),
|
||||
'tax' => format_price(convert_price($data->tax)),
|
||||
'shipping_cost' => format_price(convert_price($data->shipping_cost)),
|
||||
'coupon_discount' => format_price(convert_price($data->coupon_discount)),
|
||||
'quantity' => (int)$data->quantity,
|
||||
'payment_status' => $data->payment_status,
|
||||
'payment_status_string' => ucwords(str_replace('_', ' ', $data->payment_status)),
|
||||
|
||||
@@ -16,11 +16,11 @@ class PurchaseHistoryMiniCollection extends ResourceCollection
|
||||
'code' => $data->code,
|
||||
'user_id' => intval($data->user_id),
|
||||
'payment_type' => ucwords(str_replace('_', ' ', $data->payment_type)),
|
||||
'payment_status' => $data->payment_status,
|
||||
'payment_status' => translate($data->payment_status),
|
||||
'payment_status_string' => ucwords(str_replace('_', ' ', $data->payment_status)),
|
||||
'delivery_status' => $data->delivery_status,
|
||||
'delivery_status' => translate($data->delivery_status),
|
||||
'delivery_status_string' => $data->delivery_status == 'pending' ? "Order Placed" : ucwords(str_replace('_', ' ', $data->delivery_status)),
|
||||
'grand_total' => format_price($data->grand_total) ,
|
||||
'grand_total' => format_price(convert_price($data->grand_total)),
|
||||
'date' => Carbon::createFromTimestamp($data->date)->format('d-m-Y'),
|
||||
'links' => [
|
||||
'details' => ''
|
||||
|
||||
@@ -24,6 +24,8 @@ class AuctionProductCollection extends ResourceCollection
|
||||
'start_date' => date('Y-m-d H:i:s', $data->auction_start_date),
|
||||
'end_date' => date('Y-m-d H:i:s', $data->auction_end_date),
|
||||
'total_bids' => (int) $data->bids->count(),
|
||||
'can_edit' => $data->auction_start_date > strtotime("now"),
|
||||
|
||||
'links' => [
|
||||
'details' => route('products.show', $data->id),
|
||||
]
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources\V2\Seller;
|
||||
|
||||
use Illuminate\Http\Resources\Json\ResourceCollection;
|
||||
|
||||
class DigitalProductCollection extends ResourceCollection
|
||||
{
|
||||
/**
|
||||
* Transform the resource collection into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'data' => $this->collection->map(function ($data) {
|
||||
return [
|
||||
'id' => $data->id,
|
||||
'name' => $data->getTranslation('name'),
|
||||
'thumbnail_img' => uploaded_asset($data->thumbnail_img),
|
||||
'category' => $data->category->getTranslation('name'),
|
||||
'price ' => $data->unit_price,
|
||||
'status' => $data->published == 0 ? false : true,
|
||||
'featured' => $data->seller_featured == 0 ? false : true
|
||||
];
|
||||
})
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources\V2\Seller;
|
||||
|
||||
use App\Http\Resources\V2\UploadedFileCollection;
|
||||
use App\Models\Upload;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class DigitalProductDetailsResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
"id" => $this->id,
|
||||
'lang' => $this->lang,
|
||||
'product_name' => $this->getTranslation('name', $this->lang),
|
||||
"category_id" => $this->category_id,
|
||||
"product_file" => new UploadedFileCollection(Upload::whereIn("id",explode(",",$this->file_name))->get()),
|
||||
"tags" => $this->tags,
|
||||
"photos" => new UploadedFileCollection(Upload::whereIn("id",explode(",",$this->photos))->get()),
|
||||
"thumbnail_img" => new UploadedFileCollection(Upload::whereIn("id",explode(",",$this->thumbnail_img))->get()),
|
||||
"meta_title" => $this->meta_title,
|
||||
"meta_description" => $this->meta_description,
|
||||
"meta_img" => new UploadedFileCollection(Upload::where("id",$this->meta_img)->get()),
|
||||
"slug" => $this->slug,
|
||||
"unit_price" => $this->unit_price,
|
||||
"purchase_price" => $this->purchase_price,
|
||||
"tax" => $this->taxes,
|
||||
"discount" => $this->discount,
|
||||
"discount_type" => $this->discount_type,
|
||||
"discount_start_date" => date("Y-m-d", $this->discount_start_date),
|
||||
"discount_end_date" => date("Y-m-d", $this->discount_end_date),
|
||||
"description" => $this->getTranslation('description', $this->lang),
|
||||
];
|
||||
}
|
||||
|
||||
public function with($request)
|
||||
{
|
||||
return [
|
||||
'result' => true,
|
||||
'status' => 200
|
||||
];
|
||||
}
|
||||
|
||||
}
|
||||
@@ -12,7 +12,7 @@ class WalletCollection extends ResourceCollection
|
||||
return [
|
||||
'data' => $this->collection->map(function ($data) {
|
||||
return [
|
||||
'amount' => format_price ($data->amount) ,
|
||||
'amount' => single_price(($data->amount)),
|
||||
'payment_method' => ucwords(str_replace('_', ' ', $data->payment_method)),
|
||||
'approval_string' => $data->offline_payment ? ($data->approval == 1 ? "Approved" : "Decliend") : "N/A",
|
||||
'date' => Carbon::createFromTimestamp(strtotime($data->created_at))->format('d-m-Y'),
|
||||
|
||||
19
desarrollo/app/Models/Buyer.php
Normal file
19
desarrollo/app/Models/Buyer.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Buyer extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
protected $fillable = [
|
||||
'name',
|
||||
'address',
|
||||
'delivery_pickup_latitude',
|
||||
'delivery_pickup_latitude',
|
||||
'user_id'
|
||||
];
|
||||
}
|
||||
@@ -19,6 +19,10 @@ class Category extends Model
|
||||
return $this->hasMany(CategoryTranslation::class);
|
||||
}
|
||||
|
||||
public function coverImage(){
|
||||
return $this->belongsTo(Upload::class, 'cover_image');
|
||||
}
|
||||
|
||||
public function products(){
|
||||
return $this->hasMany(Product::class);
|
||||
}
|
||||
|
||||
@@ -16,4 +16,9 @@ class Country extends Model
|
||||
return $this->belongsTo(Zone::class);
|
||||
}
|
||||
|
||||
public function scopeIsEnabled($query)
|
||||
{
|
||||
return $query->where('status', '1');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -23,4 +23,10 @@ class FlashDeal extends Model
|
||||
{
|
||||
return $this->hasMany(FlashDealProduct::class);
|
||||
}
|
||||
|
||||
public function scopeIsActiveAndFeatured($query)
|
||||
{
|
||||
return $query->where('status', '1')
|
||||
->where('featured', '1');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,4 +22,9 @@ class PickupPoint extends Model
|
||||
public function staff(){
|
||||
return $this->belongsTo(Staff::class);
|
||||
}
|
||||
|
||||
public function scopeIsActive($query)
|
||||
{
|
||||
return $query->where('pick_up_status', '1');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,15 +2,15 @@
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use App;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Product extends Model
|
||||
{
|
||||
|
||||
protected $guarded = ['choice_attributes'];
|
||||
|
||||
protected $with = ['product_translations', 'taxes'];
|
||||
protected $with = ['product_translations', 'taxes', 'thumbnail'];
|
||||
|
||||
public function getTranslation($field = '', $lang = false)
|
||||
{
|
||||
@@ -74,6 +74,11 @@ class Product extends Model
|
||||
return $this->hasMany(AuctionProductBid::class);
|
||||
}
|
||||
|
||||
public function thumbnail()
|
||||
{
|
||||
return $this->belongsTo(Upload::class, 'thumbnail_img');
|
||||
}
|
||||
|
||||
public function scopePhysical($query)
|
||||
{
|
||||
return $query->where('digital', 0);
|
||||
@@ -83,4 +88,14 @@ class Product extends Model
|
||||
{
|
||||
return $query->where('digital', 1);
|
||||
}
|
||||
|
||||
public function carts()
|
||||
{
|
||||
return $this->hasMany(Cart::class);
|
||||
}
|
||||
|
||||
public function scopeIsApprovedPublished($query)
|
||||
{
|
||||
return $query->where('approved', '1')->where('published', 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@ class ProductsExport implements FromCollection, WithMapping, WithHeadings
|
||||
'purchase_price',
|
||||
'unit',
|
||||
'current_stock',
|
||||
'est_shipping_days',
|
||||
'meta_title',
|
||||
'meta_description',
|
||||
];
|
||||
@@ -58,6 +59,7 @@ class ProductsExport implements FromCollection, WithMapping, WithHeadings
|
||||
$product->unit,
|
||||
// $product->current_stock,
|
||||
$qty,
|
||||
$product->est_shipping_days,
|
||||
$product->meta_title,
|
||||
$product->meta_description,
|
||||
];
|
||||
|
||||
@@ -56,6 +56,7 @@ class ProductsImport implements ToCollection, WithHeadingRow, WithValidation, To
|
||||
'unit' => $row['unit'],
|
||||
'meta_title' => $row['meta_title'],
|
||||
'meta_description' => $row['meta_description'],
|
||||
'est_shipping_days' => $row['est_shipping_days'],
|
||||
'colors' => json_encode(array()),
|
||||
'choice_options' => json_encode(array()),
|
||||
'variations' => json_encode(array()),
|
||||
|
||||
@@ -9,8 +9,6 @@ class Shop extends Model
|
||||
|
||||
protected $with = ['user'];
|
||||
|
||||
protected $fillable = ['name', 'address', 'user_id'];
|
||||
|
||||
public function user()
|
||||
{
|
||||
return $this->belongsTo(User::class);
|
||||
@@ -22,10 +20,4 @@ class Shop extends Model
|
||||
public function followers(){
|
||||
return $this->hasMany(FollowSeller::class);
|
||||
}
|
||||
|
||||
//URL AMIGABLES
|
||||
public function getRouteKeyName()
|
||||
{
|
||||
return 'slug';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,10 @@ class User extends Authenticatable implements MustVerifyEmail
|
||||
{
|
||||
use Notifiable, HasApiTokens, HasRoles;
|
||||
|
||||
|
||||
public function sendEmailVerificationNotification()
|
||||
{
|
||||
$this->notify(new EmailVerificationNotification());
|
||||
}
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
@@ -22,7 +25,7 @@ class User extends Authenticatable implements MustVerifyEmail
|
||||
* @var array
|
||||
*/
|
||||
protected $fillable = [
|
||||
'name', 'email', 'password', 'user_type', 'confirmation_code', 'address', 'city', 'postal_code', 'phone', 'country', 'provider_id', 'email_verified_at', 'verification_code'
|
||||
'name', 'email', 'password', 'address', 'city', 'postal_code', 'phone', 'country', 'provider_id', 'email_verified_at', 'verification_code'
|
||||
];
|
||||
|
||||
/**
|
||||
@@ -149,9 +152,4 @@ class User extends Authenticatable implements MustVerifyEmail
|
||||
return $this->hasMany(Upload::class);
|
||||
}
|
||||
|
||||
public function workshop()
|
||||
{
|
||||
return $this->hasOne(Workshop::class);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ class Workshop extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
protected $fillable = ['name', 'address'];
|
||||
protected $fillable = ['name', 'address', 'delivery_pickup_latitude', 'delivery_pickup_longitude', 'user_id'];
|
||||
|
||||
public function user()
|
||||
{
|
||||
|
||||
@@ -2,55 +2,18 @@
|
||||
|
||||
namespace App\Notifications;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Notifications\Notification;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
use Illuminate\Support\Facades\URL;
|
||||
use App\Mail\EmailManager;
|
||||
use Auth;
|
||||
use App\Models\User;
|
||||
|
||||
class EmailVerificationNotification extends Notification
|
||||
{
|
||||
use Queueable;
|
||||
|
||||
// public $verificationCode;
|
||||
|
||||
// public function __construct($verificationCode)
|
||||
// {
|
||||
// $this->verificationCode = $verificationCode;
|
||||
// }
|
||||
|
||||
// public function via($notifiable)
|
||||
// {
|
||||
// return ['mail'];
|
||||
// }
|
||||
|
||||
// public function toMail($notifiable)
|
||||
// {
|
||||
// $verificationCode = $this->verificationCode;
|
||||
|
||||
// return (new MailMessage)
|
||||
// ->subject(translate('Email Verification - ') . env('APP_NAME'))
|
||||
// ->line('Your verification code is: ' . $verificationCode); // Mostrar el código de verificación en el correo
|
||||
// }
|
||||
|
||||
// public function toArray($notifiable)
|
||||
// {
|
||||
// return [
|
||||
// //
|
||||
// ];
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
/* class EmailVerificationNotification extends Notification
|
||||
{
|
||||
use Queueable;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public function via($notifiable)
|
||||
@@ -75,8 +38,5 @@ class EmailVerificationNotification extends Notification
|
||||
|
||||
public function toArray($notifiable)
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
} */
|
||||
}
|
||||
|
||||
70
desarrollo/app/Notifications/PayoutNotification.php
Normal file
70
desarrollo/app/Notifications/PayoutNotification.php
Normal file
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
|
||||
namespace App\Notifications;
|
||||
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
use Illuminate\Notifications\Notification;
|
||||
|
||||
class PayoutNotification extends Notification
|
||||
{
|
||||
use Queueable;
|
||||
|
||||
protected $user;
|
||||
protected $amount;
|
||||
protected $status;
|
||||
/**
|
||||
* Create a new notification instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($user, $amount, $status = '')
|
||||
{
|
||||
$this->user = $user;
|
||||
$this->amount = $amount;
|
||||
$this->status = $status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the notification's delivery channels.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function via($notifiable)
|
||||
{
|
||||
return ['database'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the mail representation of the notification.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return \Illuminate\Notifications\Messages\MailMessage
|
||||
*/
|
||||
public function toMail($notifiable)
|
||||
{
|
||||
return (new MailMessage)
|
||||
->line('The introduction to the notification.')
|
||||
->action('Notification Action', url('/'))
|
||||
->line('Thank you for using our application!');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the array representation of the notification.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($notifiable)
|
||||
{
|
||||
return [
|
||||
'user_id' => $this->user['id'],
|
||||
'user_type' => $this->user['user_type'],
|
||||
'name' => $this->user['name'],
|
||||
'payment_amount' => $this->amount,
|
||||
'status' => $this->status
|
||||
];
|
||||
}
|
||||
}
|
||||
69
desarrollo/app/Notifications/ShopProductNotification.php
Normal file
69
desarrollo/app/Notifications/ShopProductNotification.php
Normal file
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
namespace App\Notifications;
|
||||
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
use Illuminate\Notifications\Notification;
|
||||
|
||||
class ShopProductNotification extends Notification
|
||||
{
|
||||
use Queueable;
|
||||
|
||||
protected $type;
|
||||
protected $product;
|
||||
protected $status;
|
||||
/**
|
||||
* Create a new notification instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($type, $product, $status='pending')
|
||||
{
|
||||
$this->type = $type;
|
||||
$this->product = $product;
|
||||
$this->status = $status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the notification's delivery channels.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function via($notifiable)
|
||||
{
|
||||
return ['database'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the mail representation of the notification.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return \Illuminate\Notifications\Messages\MailMessage
|
||||
*/
|
||||
public function toMail($notifiable)
|
||||
{
|
||||
return (new MailMessage)
|
||||
->line('The introduction to the notification.')
|
||||
->action('Notification Action', url('/'))
|
||||
->line('Thank you for using our application!');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the array representation of the notification.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($notifiable)
|
||||
{
|
||||
return [
|
||||
'id' => $this->product['id'],
|
||||
'name' => $this->product['name'],
|
||||
'status' => $this->status,
|
||||
'type' => $this->type
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
|
||||
namespace App\Notifications;
|
||||
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
use Illuminate\Notifications\Notification;
|
||||
|
||||
class ShopVerificationNotification extends Notification
|
||||
{
|
||||
use Queueable;
|
||||
|
||||
protected $shop;
|
||||
protected $status;
|
||||
/**
|
||||
* Create a new notification instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($shop, $status='submitted')
|
||||
{
|
||||
$this->shop = $shop;
|
||||
$this->status = $status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the notification's delivery channels.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function via($notifiable)
|
||||
{
|
||||
return ['database'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the mail representation of the notification.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return \Illuminate\Notifications\Messages\MailMessage
|
||||
*/
|
||||
public function toMail($notifiable)
|
||||
{
|
||||
return (new MailMessage)
|
||||
->line('The introduction to the notification.')
|
||||
->action('Notification Action', url('/'))
|
||||
->line('Thank you for using our application!');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the array representation of the notification.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($notifiable)
|
||||
{
|
||||
return [
|
||||
'name' => $this->shop['name'],
|
||||
'id' => $this->shop['id'],
|
||||
'status'=> $this->status
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -3,9 +3,11 @@
|
||||
namespace App\Services;
|
||||
|
||||
use AizPackages\CombinationGenerate\Services\CombinationService;
|
||||
use App\Models\Cart;
|
||||
use App\Models\Color;
|
||||
use App\Models\Product;
|
||||
use App\Models\User;
|
||||
use App\Models\Wishlist;
|
||||
use App\Utility\ProductUtility;
|
||||
use Combinations;
|
||||
use Illuminate\Support\Str;
|
||||
@@ -301,4 +303,19 @@ class ProductService
|
||||
|
||||
return $product_new;
|
||||
}
|
||||
|
||||
public function destroy($id)
|
||||
{
|
||||
$product = Product::findOrFail($id);
|
||||
$product->product_translations()->delete();
|
||||
$product->stocks()->delete();
|
||||
$product->taxes()->delete();
|
||||
$product->wishlists()->delete();
|
||||
$product->carts()->delete();
|
||||
|
||||
if(Product::destroy($id)){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
113
desarrollo/app/Utility/CartUtility.php
Normal file
113
desarrollo/app/Utility/CartUtility.php
Normal file
@@ -0,0 +1,113 @@
|
||||
<?php
|
||||
|
||||
namespace App\Utility;
|
||||
|
||||
use App\Models\Cart;
|
||||
use Cookie;
|
||||
|
||||
class CartUtility
|
||||
{
|
||||
|
||||
public static function create_cart_variant($product, $request)
|
||||
{
|
||||
$str = null;
|
||||
if (isset($request['color'])) {
|
||||
$str = $request['color'];
|
||||
}
|
||||
|
||||
if (isset($product->choice_options) && count(json_decode($product->choice_options)) > 0) {
|
||||
//Gets all the choice values of customer choice option and generate a string like Black-S-Cotton
|
||||
foreach (json_decode($product->choice_options) as $key => $choice) {
|
||||
if ($str != null) {
|
||||
$str .= '-' . str_replace(' ', '', $request['attribute_id_' . $choice->attribute_id]);
|
||||
} else {
|
||||
$str .= str_replace(' ', '', $request['attribute_id_' . $choice->attribute_id]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $str;
|
||||
}
|
||||
|
||||
public static function get_price($product, $product_stock, $quantity)
|
||||
{
|
||||
$price = $product_stock->price;
|
||||
if ($product->auction_product == 1) {
|
||||
$price = $product->bids->max('amount');
|
||||
}
|
||||
|
||||
if ($product->wholesale_product) {
|
||||
$wholesalePrice = $product_stock->wholesalePrices->where('min_qty', '<=', $quantity)
|
||||
->where('max_qty', '>=', $quantity)
|
||||
->first();
|
||||
if ($wholesalePrice) {
|
||||
$price = $wholesalePrice->price;
|
||||
}
|
||||
}
|
||||
|
||||
$price = self::discount_calculation($product, $price);
|
||||
}
|
||||
|
||||
public static function discount_calculation($product, $price)
|
||||
{
|
||||
$discount_applicable = false;
|
||||
|
||||
if (
|
||||
$product->discount_start_date == null ||
|
||||
(strtotime(date('d-m-Y H:i:s')) >= $product->discount_start_date &&
|
||||
strtotime(date('d-m-Y H:i:s')) <= $product->discount_end_date)
|
||||
) {
|
||||
$discount_applicable = true;
|
||||
}
|
||||
|
||||
if ($discount_applicable) {
|
||||
if ($product->discount_type == 'percent') {
|
||||
$price -= ($price * $product->discount) / 100;
|
||||
} elseif ($product->discount_type == 'amount') {
|
||||
$price -= $product->discount;
|
||||
}
|
||||
}
|
||||
return $price;
|
||||
}
|
||||
|
||||
public static function tax_calculation($product, $price)
|
||||
{
|
||||
$tax = 0;
|
||||
foreach ($product->taxes as $product_tax) {
|
||||
if ($product_tax->tax_type == 'percent') {
|
||||
$tax += ($price * $product_tax->tax) / 100;
|
||||
} elseif ($product_tax->tax_type == 'amount') {
|
||||
$tax += $product_tax->tax;
|
||||
}
|
||||
}
|
||||
|
||||
return $tax;
|
||||
}
|
||||
|
||||
public static function save_cart_data($cart, $product, $price, $tax, $quantity)
|
||||
{
|
||||
$cart->quantity = $quantity;
|
||||
$cart->product_id = $product->id;
|
||||
$cart->owner_id = $product->user_id;
|
||||
$cart->price = $price;
|
||||
$cart->tax = $tax;
|
||||
$cart->product_referral_code = null;
|
||||
|
||||
if (Cookie::has('referred_product_id') && Cookie::get('referred_product_id') == $product->id) {
|
||||
$cart->product_referral_code = Cookie::get('product_referral_code');
|
||||
}
|
||||
|
||||
// Cart::create($data);
|
||||
$cart->save();
|
||||
}
|
||||
|
||||
public static function check_auction_in_cart($carts)
|
||||
{
|
||||
foreach ($carts as $cart) {
|
||||
if ($cart->product->auction_product == 1) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,7 @@
|
||||
"license": "MIT",
|
||||
"type": "project",
|
||||
"require": {
|
||||
"php": "^8.1",
|
||||
"php": "^8.0.2",
|
||||
"aiz-packages/color-code-converter": "dev-main",
|
||||
"aiz-packages/combination-generate": "dev-main",
|
||||
"anandsiddharth/laravel-paytm-wallet": "^2.0",
|
||||
@@ -14,7 +14,6 @@
|
||||
"fideloper/proxy": "^4.4",
|
||||
"genealabs/laravel-sign-in-with-apple": "*",
|
||||
"genealabs/laravel-socialiter": "*",
|
||||
"google/recaptcha": "^1.3",
|
||||
"guzzlehttp/guzzle": "^7.5",
|
||||
"instamojo/instamojo-php": "^0.4.0",
|
||||
"intervention/image": "^2.5",
|
||||
@@ -30,6 +29,7 @@
|
||||
"league/flysystem-aws-s3-v3": "^3.12",
|
||||
"maatwebsite/excel": "^3.1",
|
||||
"mehedi-iitdu/core-component-repository": "^2.2",
|
||||
"mercadopago/dx-php": "^2.5",
|
||||
"mpdf/mpdf": "^8.1",
|
||||
"myfatoorah/laravel-package": "^2.1",
|
||||
"niklasravnsborg/laravel-pdf": "^4.1",
|
||||
|
||||
1118
desarrollo/composer.lock
generated
1118
desarrollo/composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -100,7 +100,7 @@ return [
|
||||
|
|
||||
*/
|
||||
|
||||
'locale' => env('DEFAULT_LANGUAGE', 'es'),
|
||||
'locale' => env('DEFAULT_LANGUAGE', 'en'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
@@ -113,7 +113,7 @@ return [
|
||||
|
|
||||
*/
|
||||
|
||||
'fallback_locale' => 'es',
|
||||
'fallback_locale' => 'en',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
@@ -170,8 +170,6 @@ return [
|
||||
Illuminate\View\ViewServiceProvider::class,
|
||||
KingFlamez\Rave\RaveServiceProvider::class,
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Package Service Providers...
|
||||
*/
|
||||
@@ -187,7 +185,6 @@ return [
|
||||
|
||||
Spatie\Permission\PermissionServiceProvider::class,
|
||||
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
@@ -239,8 +236,6 @@ return [
|
||||
'PDF' => niklasravnsborg\LaravelPdf\Facades\Pdf::class,
|
||||
'Str' => Illuminate\Support\Str::class,
|
||||
'Rave' => KingFlamez\Rave\Facades\Rave::class,
|
||||
'Recaptcha' => \ReCaptcha\ReCaptcha::class,
|
||||
|
||||
],
|
||||
|
||||
];
|
||||
|
||||
@@ -55,13 +55,24 @@ return [
|
||||
'visibility' => 'public',
|
||||
],
|
||||
|
||||
's3' => [
|
||||
'aws' => [
|
||||
'driver' => 's3',
|
||||
'key' => env('AWS_ACCESS_KEY_ID'),
|
||||
'secret' => env('AWS_SECRET_ACCESS_KEY'),
|
||||
'region' => env('AWS_DEFAULT_REGION'),
|
||||
'bucket' => env('AWS_BUCKET'),
|
||||
'url' => env('AWS_URL'),
|
||||
// 'scheme' => 'http',
|
||||
],
|
||||
|
||||
'backblaze' => [
|
||||
'driver' => 's3',
|
||||
'key' => env('BACKBLAZE_ACCESS_KEY_ID'),
|
||||
'secret' => env('BACKBLAZE_SECRET_ACCESS_KEY'),
|
||||
'region' => env('BACKBLAZE_DEFAULT_REGION'),
|
||||
'bucket' => env('BACKBLAZE_BUCKET'),
|
||||
'url' => env('BACKBLAZE_URL'),
|
||||
'endpoint' => env('BACKBLAZE_ENDPOINT'),
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
1
desarrollo/description
Normal file
1
desarrollo/description
Normal file
@@ -0,0 +1 @@
|
||||
Unnamed repository; edit this file 'description' to name the repository.
|
||||
@@ -1,15 +0,0 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[*.yml]
|
||||
indent_size = 2
|
||||
1
desarrollo/diseno/login-clientes/css/aos.css
vendored
1
desarrollo/diseno/login-clientes/css/aos.css
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,6 +0,0 @@
|
||||
/**
|
||||
* Owl Carousel v2.3.4
|
||||
* Copyright 2013-2018 David Deutsch
|
||||
* Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE
|
||||
*/
|
||||
.owl-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{display:none;width:100%;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y;touch-action:manipulation;-moz-backface-visibility:hidden}.owl-carousel .owl-stage:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0,0,0)}.owl-carousel .owl-item,.owl-carousel .owl-wrapper{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;width:100%}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.no-js .owl-carousel,.owl-carousel.owl-loaded{display:block}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel .owl-nav button.owl-next,.owl-carousel .owl-nav button.owl-prev,.owl-carousel button.owl-dot{background:0 0;color:inherit;border:none;padding:0!important;font:inherit}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-ms-touch-action:pan-y;touch-action:pan-y;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.owl-carousel .animated{animation-duration:1s;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{animation-name:fadeOut}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item .owl-lazy:not([src]),.owl-carousel .owl-item .owl-lazy[src^=""]{max-height:0}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%}
|
||||
440
desarrollo/diseno/login-clientes/css/responsive.css
vendored
440
desarrollo/diseno/login-clientes/css/responsive.css
vendored
@@ -1,440 +0,0 @@
|
||||
:root {
|
||||
--light-purple: #F6F4FE;
|
||||
--purple: #6A49F2;
|
||||
--bg-purple: #6A49F2;
|
||||
--dark-purple: #32236F;
|
||||
--body-text-purple: #3E3F66;
|
||||
--text-white: #ffffff;
|
||||
--bg-white: #ffffff;
|
||||
--slider-dots-color: #D4D2DD;
|
||||
--light-bg: #DFDAF3;
|
||||
}
|
||||
|
||||
/* ------Media-Query-Start--------- */
|
||||
@media screen and (max-width:1600px) {
|
||||
|
||||
footer .top_footer.has_bg {background-repeat: repeat-y; background-position: 0 50px;}
|
||||
|
||||
.why_we_section .why_inner {margin: 0 15px;}
|
||||
.youtube-video .modal-dialog {max-width: 1040px !important;}
|
||||
}
|
||||
|
||||
|
||||
@media screen and (max-width:1300px) {
|
||||
|
||||
/* features section */
|
||||
.features_section .feature_detail .feature_box {width: 350px;}
|
||||
.features_section .feature_detail .left_data {padding-left: 75px;}
|
||||
.features_section .feature_detail .right_data {padding-right: 75px;}
|
||||
}
|
||||
|
||||
|
||||
@media screen and (max-width:1200px) {
|
||||
|
||||
.row_am {padding: 50px 0;}
|
||||
|
||||
/* navigation bar section */
|
||||
.navbar-expand-lg .navbar-nav .nav-link {padding: 5px 8px;}
|
||||
.navbar-expand-lg .navbar-nav .nav-link.dark_btn {padding: 9px 30px;}
|
||||
.navbar-expand-lg .navbar-nav .has_dropdown .drp_btn {right: 5px;}
|
||||
.banner_section .banner_slider .right_icon {right: -30px;}
|
||||
|
||||
/* features section */
|
||||
.features_section .feature_detail .feature_box {width: 300px;}
|
||||
.features_section .feature_detail .left_data {padding-left: 15px;}
|
||||
.features_section .feature_detail .right_data {padding-right: 15px;}
|
||||
|
||||
/* about app section */
|
||||
.about_app_section .about_text .app_statstic li {width: 210px; padding-left: 20px;}
|
||||
.about_app_section .about_text .app_statstic li p:first-child {font-size: 30px;}
|
||||
|
||||
/* modern ui section */
|
||||
.modern_ui_section .ui_images::before {width: 475px; height: 475px;}
|
||||
.modern_ui_section .ui_images .right_img img:nth-child(1) {margin-left: -60px;}
|
||||
.modern_ui_section .ui_images .right_img img:nth-child(2) {margin-left: -140px;}
|
||||
|
||||
/* download app section */
|
||||
.free_app_section .container .free_app_inner .free_img img {transform: scale(.8);}
|
||||
.free_app_section .container .free_app_inner .free_img img:last-child {margin-left: -120px;}
|
||||
.free_app_section .container .free_app_inner .free_img {margin-top: -180px;}
|
||||
|
||||
/* newsletter section */
|
||||
.newsletter_box .section_title {width: 60%;}
|
||||
.newsletter_box .section_title h2 {font-size: 24px; letter-spacing: 1px;}
|
||||
.newsletter_box form .form-group .form-control {width: 250px;}
|
||||
|
||||
.youtube-video .modal-dialog {max-width: 940px !important;}
|
||||
|
||||
.app_solution_section .app_images ul li:nth-child(2) {width: 45%; left: 0;}
|
||||
.app_solution_section .app_images ul li:nth-child(3) {width: 50%; right: 0;}
|
||||
|
||||
.experts_team_section .experts_box .text span {min-height: 50px; display: block; margin-bottom: 10px;}
|
||||
|
||||
.review_list_section .review_box h3 {font-size: 16px;}
|
||||
.review_list_section .review_box p {font-size: 14px;}
|
||||
.review_list_section .review_box .reviewer .text span {font-size: 14px;}
|
||||
|
||||
.contact_page_section .contact_inner {margin-top: -120px;}
|
||||
.contact_page_section .contact_inner .contact_form {width: 520px; padding: 50px 30px;}
|
||||
.contact_page_section .contact_inner .contact_info {width: 350px;}
|
||||
.contact_page_section .contact_inner .section_title h2 {font-size: 34px;}
|
||||
|
||||
.bred_crumb {min-height: 400px;}
|
||||
.bred_crumb::after {background-size: 100%; height: 110px;}
|
||||
|
||||
.blog_detail_section .blog_inner_pannel {margin-top: -100px; padding: 30px;}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@media screen and (max-width:992px) {
|
||||
|
||||
/* navigation section */
|
||||
.navbar-toggler-icon {display: flex; align-items: center; color: var(--body-text-purple); justify-content: flex-end;}
|
||||
.white_header .toggle-bar {color: var(--text-white);}
|
||||
.free_app_section .container .free_app_inner .free_text .section_title h2 , .section_title h2 {font-size: 30px;}
|
||||
header.fix_style {padding: 5px 0;}
|
||||
|
||||
.white_header .navbar-collapse {position: absolute; top: 110%; width: 100%;}
|
||||
|
||||
.white_header .navbar-expand-lg .navbar-nav .nav-link, .white_header .navbar-expand-lg .navbar-nav .has_dropdown .drp_btn {color: var(--body-text-purple);}
|
||||
.white_header .navbar-expand-lg .navbar-nav .nav-link.dark_btn {background-color: var(--bg-purple); color: var(--text-white);}
|
||||
|
||||
.banner_section {text-align: center;}
|
||||
.banner_section .app_btn , .banner_section .used_app {justify-content: center;}
|
||||
|
||||
/* navigation section */
|
||||
.navbar-expand-lg .navbar-nav {align-items: flex-start;}
|
||||
.navbar-toggler {padding-right: 0; line-height: 1.7;}
|
||||
.navbar-expand-lg .navbar-nav {padding: 20px 15px; background-color: var(--bg-white); border-radius: 15px; box-shadow: 0 4px 10px #EDE9FE;}
|
||||
.navbar-expand-lg .navbar-nav .nav-link.dark_btn {margin-left: 0; margin-top: 15px;}
|
||||
.navbar-expand-lg .navbar-nav .has_dropdown {flex-direction: column; align-items: flex-start; width: 100%; box-shadow: none;}
|
||||
.navbar-expand-lg .navbar-nav .has_dropdown:hover {box-shadow: none;}
|
||||
.navbar-expand-lg .navbar-nav .has_dropdown .drp_btn {position: absolute; right: 0; padding: 0 10px;}
|
||||
.navbar-expand-lg .navbar-nav .has_dropdown .sub_menu {position: relative; opacity: 1; pointer-events: all; top: auto; background-color: transparent; width: 100%; border-bottom: 1px solid #6b49f268; border-radius: 0; width: 100%; min-width: 100%; max-width: 100%; margin-left: 10px; display: none; box-shadow: none; margin-top: 0;}
|
||||
.navbar-expand-lg .navbar-nav .has_dropdown .sub_menu ul {padding: 0; margin-top: 0;}
|
||||
.navbar-expand-lg .navbar-nav .has_dropdown .sub_menu ul li a {padding: 5px 10px; display: block; padding-left: 0;}
|
||||
.navbar-expand-lg .navbar-nav .has_dropdown:hover .sub_menu {margin-top: 0;}
|
||||
|
||||
/* banner section */
|
||||
.banner_section .banner_text h1 {font-size: 40px;}
|
||||
.banner_section .banner_slider {margin-top: 50px;}
|
||||
.banner_section .banner_slider .left_icon {left: 0;}
|
||||
.banner_section .banner_slider .right_icon {right: 0;}
|
||||
|
||||
/* features section */
|
||||
.features_section .feature_detail .feature_img {width: 275px;}
|
||||
.features_section .feature_detail .feature_box .data_block {margin-bottom: 30px;}
|
||||
.features_section .feature_detail .feature_box {width: 200px;}
|
||||
|
||||
/* about app section */
|
||||
.about_app_section .row {flex-direction: column-reverse;}
|
||||
.about_app_section .about_img {justify-content: flex-start; margin-top: 75px; margin-left: 0;}
|
||||
.about_app_section .about_img::before {left: 50%;}
|
||||
.about_app_section .about_img .screen_img {margin-left: -170px;}
|
||||
.about_app_section .about_text .app_statstic {justify-content: flex-start;}
|
||||
.about_app_section .about_text .app_statstic li {width: 35%; margin-right: 30px;}
|
||||
.about_app_section .about_img::before {left: 35%;}
|
||||
|
||||
/* modern ui section */
|
||||
.modern_ui_section .ui_images {margin-top: 30px;}
|
||||
.modern_ui_section .ui_text {padding-right: 0;}
|
||||
.modern_ui_section .ui_images .right_img {display: flex; flex-direction: column; align-items: center;}
|
||||
|
||||
/* how it work section */
|
||||
.how_it_works .step_block ul li .step_text, .how_it_works .step_block ul li .step_img {width: 280px;}
|
||||
.how_it_works .yt_video .thumbnil a {top: 57%;}
|
||||
.how_it_works .yt_video .thumbnil a span {font-size: 20px;}
|
||||
|
||||
/* testimonial section */
|
||||
#testimonial_slider {max-width: 500px;}
|
||||
|
||||
/* pricing section */
|
||||
.pricing_section .pricing_pannel .pricing_block {padding-left: 15px; padding-right: 15px; min-height: 600px; padding-top: 30px;}
|
||||
.pricing_section .pricing_pannel .pricing_block .price {font-size: 36px;}
|
||||
.pricing_section .pricing_pannel .pricing_block .benifits li p {font-size: 14px;}
|
||||
|
||||
/* interface section */
|
||||
.interface_section .screen_slider {min-height: 550px;}
|
||||
|
||||
/* download app section */
|
||||
.free_app_section .container .free_app_inner {padding: 20px 15px;}
|
||||
.free_app_section .container .free_app_inner .free_img img {transform: scale(.7);}
|
||||
.free_app_section .container .free_app_inner .free_img img:last-child {margin-left: -180px;}
|
||||
.free_app_section .container .free_app_inner .free_text .app_btn li a {padding: 10px 20px;}
|
||||
|
||||
/* latest story section */
|
||||
.latest_story {margin-bottom: 40px;}
|
||||
.latest_story .story_box .story_text {padding: 15px;}
|
||||
|
||||
/* newsletter section */
|
||||
.newsletter_box {flex-direction: column; padding: 30px 20px;}
|
||||
.newsletter_box .section_title , .newsletter_box form {width: 100%; margin: 10px 0; justify-content: center;}
|
||||
.newsletter_box form .form-group .form-control {width: 350px;}
|
||||
.newsletter_box .section_title h2, .newsletter_box .section_title p {text-align: center;}
|
||||
|
||||
/* footer section */
|
||||
footer .top_footer .logo , footer h3 {margin-bottom: 20px;}
|
||||
footer .abt_side {margin-bottom: 50px;}
|
||||
footer .top_footer .try_out {margin-left: 0;}
|
||||
footer .top_footer .col-md-6 {margin-bottom: 15px;}
|
||||
footer .top_footer.has_bg {background-position: center;}
|
||||
|
||||
/* Bred Crumb */
|
||||
.bred_crumb {min-height: 350px;}
|
||||
.bred_crumb .bred_text h1 {font-size: 30px;}
|
||||
.bred_crumb::after {background-size: 100%; height: 90px; bottom: -5px;}
|
||||
.bred_crumb .bred_text .search_bar form .form-group {height: 50px;}
|
||||
.bred_crumb .bred_text .search_bar form .form-group .btn {width: 46px; height: 46px; line-height: 46px;}
|
||||
|
||||
.bred_crumb .banner_shape3 { top: 240px; animation: mymove 3s infinite; }
|
||||
|
||||
|
||||
.app_solution_section .app_images {margin-top: 30px;}
|
||||
.app_solution_section .app_images ul li:nth-child(2) {text-align: right;}
|
||||
.app_solution_section .app_text p {padding-right: 0;}
|
||||
.app_solution_section .app_text .section_title {text-align: center;}
|
||||
.app_solution_section .app_images {margin-top: 70px;}
|
||||
.app_solution_section .app_images::before {width: 350px; height: 350px;}
|
||||
|
||||
.why_we_section .why_inner {padding: 35px 0; padding-bottom: 0px;}
|
||||
.why_we_section .why_inner .why_box {margin-bottom: 50px; text-align: center;}
|
||||
.why_we_section .why_inner .why_box .icon {margin-bottom: 30px;}
|
||||
|
||||
|
||||
.experts_team_section .experts_box .text span {min-height: auto;}
|
||||
.query_inner .white_btn {font-size: 14px;}
|
||||
|
||||
|
||||
.blog_list_main .blog_text {margin-top: 30px;}
|
||||
.blog_detail_section .blog_inner_pannel {margin-top: -100px; padding: 30px;}
|
||||
.blog_detail_section .blog_inner_pannel .info ul {padding-left: 30px;}
|
||||
.comment_section ul li .comment { width: calc(100% - 280px); margin-left: 20px;}
|
||||
.blog_detail_section .blog_inner_pannel .quote_block {padding: 55px 30px 35px 30px;}
|
||||
|
||||
.contact_page_section .contact_inner {flex-direction: column; margin-top: 60px;}
|
||||
.contact_page_section .contact_inner .contact_form {width: 100%;}
|
||||
.contact_page_section .contact_inner .contact_info {width: 100%; margin-top: 50px;}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@media screen and (max-width:767px) {
|
||||
|
||||
body {font-size: 14px; text-align: center;}
|
||||
.row_am {padding: 30px 0;}
|
||||
.section_title p br {display: none;}
|
||||
.free_app_section .container .free_app_inner .free_text .section_title h2, .section_title h2 {font-size: 24px;}
|
||||
|
||||
/* navbar section */
|
||||
.navbar {padding-top: 15px;}
|
||||
.navbar-expand-lg .navbar-nav .has_dropdown .sub_menu ul li a {text-align: left; line-height: 1.5; font-size: 14px;}
|
||||
|
||||
/* banner section */
|
||||
.banner_section {margin-top: 60px;}
|
||||
.banner_section .banner_text h1 {font-size: 30px;}
|
||||
.banner_section .app_btn , .banner_section .used_app {justify-content: center;}
|
||||
.banner_section .app_btn li:last-child {margin-left: 0;}
|
||||
.banner_section .app_btn li {margin: 0 15px;}
|
||||
.banner_section .app_btn li a {padding: 10px 20px;}
|
||||
.banner_section .app_btn li a img {height: 25px;}
|
||||
.banner_section .banner_slider .left_icon {left: -40px;}
|
||||
.banner_section .banner_slider .right_icon {right: -40px; z-index: 1000;}
|
||||
.banner_section .banner_slider::before {width: 350px; height: 350px;}
|
||||
|
||||
/* trusted logo section */
|
||||
.trusted_section .company_logos {padding-top: 0;}
|
||||
.trusted_section .company_logos img {max-width: 70%;}
|
||||
|
||||
/* features section */
|
||||
.features_section .feature_detail {flex-direction: column-reverse; padding-top: 30px; margin-top: 0;}
|
||||
.features_section .feature_detail .feature_img {position: relative; top: auto; left: auto; transform: none; width: 75%; margin: 0 auto;}
|
||||
.features_section .feature_detail .feature_box {width: 100%; padding: 0 15px; text-align: center;}
|
||||
.features_section .feature_detail .left_data .data_block .icon {margin-right: 0;}
|
||||
.features_section .feature_detail .right_data .data_block .icon {margin-left: 0;}
|
||||
.features_section .feature_detail .feature_box .data_block {margin-bottom: 0; margin-top: 30px;}
|
||||
|
||||
/* about app section */
|
||||
.about_app_section .about_text , .about_app_section .about_text .section_title {text-align: center;}
|
||||
.about_app_section .about_text .app_statstic {margin-top: 0; justify-content: space-between;}
|
||||
.about_app_section .about_text .app_statstic li {width: 48%; margin-right: 0;}
|
||||
.about_app_section .about_text .app_statstic li p:first-child {font-size: 18px;}
|
||||
.about_app_section .about_img {margin: 0; margin-top: 50px; justify-content: center;}
|
||||
.about_app_section .about_img::before {width: 350px; height: 350px;}
|
||||
|
||||
/* modern ui section */
|
||||
.modern_ui_section .ui_images {margin-top: 10px;}
|
||||
.modern_ui_section .section_title {text-align: center;}
|
||||
.modern_ui_section .design_block li {padding-left: 0; margin-bottom: 30px;}
|
||||
.modern_ui_section .design_block li::before {position: relative; left: auto; top: auto; display: inline-block;}
|
||||
|
||||
.modern_ui_section .ui_images img {max-width: 100%;}
|
||||
.modern_ui_section .ui_images::before {width: 350px; height: 350px;}
|
||||
.modern_ui_section .ui_images .left_img {width: 70%;}
|
||||
.modern_ui_section .ui_images .right_img {justify-content: center;}
|
||||
.modern_ui_section .ui_images .right_img img:nth-child(1) {top: 0; width: 100px;}
|
||||
.modern_ui_section .ui_images .right_img img:nth-child(3) {margin-top: 0;}
|
||||
|
||||
/* how it work section */
|
||||
.how_it_works .how_it_inner {padding: 50px 15px;}
|
||||
.how_it_works .step_block ul {padding-top: 30px;}
|
||||
.how_it_works .step_block ul li , .how_it_works .step_block ul li:nth-child(2) {flex-direction: column; padding-left: 30px;}
|
||||
.how_it_works .step_block ul li .step_text h4 {font-size: 18px;}
|
||||
.how_it_works .step_block ul li::before {left: 0; transform: none; height: calc(100% + 10px); top: 40px;}
|
||||
.how_it_works .step_block ul li:first-child::before {height: calc(100% + 50px);}
|
||||
.how_it_works .step_block ul li:first-child::after {left: -5px; transform: none; display: none;}
|
||||
.how_it_works .step_block ul li .step_text, .how_it_works .step_block ul li .step_img ,
|
||||
.how_it_works .step_block ul li:nth-child(2) .step_text, .how_it_works .step_block ul li:nth-child(2) .step_img {text-align: center;}
|
||||
.how_it_works .step_block ul li .step_text, .how_it_works .step_block ul li .step_img {width: 100%;}
|
||||
.how_it_works .step_block ul li .step_number {position: absolute; top: -5px; left: -23px; width: 50px; height: 50px;}
|
||||
.how_it_works .step_block ul li:last-child::before {opacity: 0;}
|
||||
.how_it_works .step_block ul li .step_number h3 {font-size: 15px; margin-bottom: 0; margin-top: -2px;}
|
||||
.how_it_works .yt_video {margin-top: -50px;}
|
||||
.how_it_works .yt_video .thumbnil {height: 300px; border-radius: 15px;}
|
||||
.how_it_works .yt_video .thumbnil img {height: 100%; object-fit: cover; object-position: center; border-radius: 15px;}
|
||||
.how_it_works .yt_video .thumbnil a {width: 100%;}
|
||||
.how_it_works .yt_video .thumbnil a .play_btn::after {width: 140px; height: 140px;}
|
||||
.how_it_works .yt_video .thumbnil a .play_btn::before {width: 120px; height: 120px;}
|
||||
.how_it_works .yt_video .thumbnil a .play_btn img {height: auto;}
|
||||
|
||||
/* testimonial section */
|
||||
.testimonial_section .testimonial_block {margin: 0;}
|
||||
.testimonial_section .testimonial_block .avtar_faces {display: none;}
|
||||
.testimonial_section .testimonial_block .testimonial_slide_box {width: 100%;}
|
||||
|
||||
/* pricing section */
|
||||
.pricing_section .pricing_pannel .pricing_block {min-height: auto; padding: 30px 15px;}
|
||||
.pricing_section .pricing_pannel .pricing_block .icon {margin-bottom: 15px;}
|
||||
.pricing_section .contact_text {margin-top: -20px;}
|
||||
|
||||
/* faq section */
|
||||
.faq_section .faq_panel .card-header h2 {text-align: left;}
|
||||
.faq_section .faq_panel .card-header .btn {font-size: 16px; padding-right: 30px; text-align: left;}
|
||||
.faq_section .faq_panel .card-body p {text-align: left;}
|
||||
|
||||
/* interface section */
|
||||
.interface_section .screen_slider { /*min-height: 720px;*/}
|
||||
.interface_section .owl-item .screen_frame_img img {transform: scale(1);}
|
||||
|
||||
/* download section */
|
||||
.free_app_section .container .free_app_inner {padding: 50px 15px; padding-bottom: 0; z-index: 99;}
|
||||
.free_app_section .container .free_app_inner .free_img {margin-top: 0; justify-content: center;}
|
||||
.free_app_section .container .free_app_inner .free_img img {max-width: 100%;}
|
||||
.free_app_section .container .free_app_inner .free_text .section_title {text-align: center;}
|
||||
.free_app_section .container .free_app_inner .free_text .app_btn {flex-direction: column;}
|
||||
.free_app_section .container .free_app_inner .free_text .app_btn li a {width: 200px; text-align: center;}
|
||||
.free_app_section .container .free_app_inner .free_text .app_btn li:last-child {margin-left: 0; margin-top: 15px;}
|
||||
|
||||
/* latest story section */
|
||||
.latest_story .story_box {margin-bottom: 30px;}
|
||||
|
||||
/* newsletter section */
|
||||
.newsletter_box form {flex-direction: column; align-items: center;}
|
||||
.newsletter_box form .form-group {width: 100%;}
|
||||
.newsletter_box form .form-group .form-control {width: 100%; margin-bottom: 15px;}
|
||||
.newsletter_box .section_title p {font-size: 13px;}
|
||||
|
||||
/* footer section */
|
||||
footer .links , footer .abt_side {margin-bottom: 30px;}
|
||||
footer .top_footer .social_media {justify-content: center;}
|
||||
footer .top_footer .social_media li a {margin: 0 5px;}
|
||||
footer .top_footer .try_out {margin-left: 0;}
|
||||
footer .app_btn li a {margin: 0 auto;}
|
||||
footer .bottom_footer .developer_text {text-align: center; margin-top: 10px;}
|
||||
footer .go_top {right: 10px;}
|
||||
footer .top_footer .col-md-6 {margin-bottom: 0px;}
|
||||
|
||||
/* animation line section */
|
||||
.anim_line , .anim_line.dark_bg {width: 140%;}
|
||||
|
||||
/* latest story section */
|
||||
.latest_story .story_box .story_img img {width: 100%;}
|
||||
|
||||
/* go top button section */
|
||||
.go_top {bottom: 30px; z-index: 999;}
|
||||
|
||||
.purple_backdrop {display: none;}
|
||||
|
||||
|
||||
/* Bread-Crumb */
|
||||
.bred_crumb {min-height: 330px;}
|
||||
.bred_crumb .bred_text h1 {font-size: 24px;}
|
||||
.bred_crumb .bred_text .search_bar form .form-group {height: 50px;}
|
||||
.bred_crumb .bred_text .search_bar form .form-group .btn {width: 46px; height: 46px; line-height: 46px;}
|
||||
.bred_crumb .bred_text {padding: 0 15px; margin-top: 15px;}
|
||||
.bred_crumb::after {background-size: cover; height: 100px;}
|
||||
|
||||
|
||||
|
||||
.blog_list_main .blog_text .section_title , .blog_list_story .story_box {text-align: center;}
|
||||
|
||||
.why_we_section .why_inner {padding-bottom: 10px;}
|
||||
|
||||
.experts_team_section .experts_box {padding: 20px; margin-bottom: 15px;}
|
||||
.pagination_block ul li:not(:first-child , :last-child) a {width: 24px; height: 24px; line-height: 24px; margin: 0 3px; font-size: 12px;}
|
||||
|
||||
.blog_detail_bredcrumb.bred_crumb .bred_text {margin-top: -10px;}
|
||||
.blog_detail_section .blog_inner_pannel {margin-top: -70px; padding: 25px 20px;}
|
||||
.blog_detail_section .blog_inner_pannel .section_title {margin-bottom: 20px;}
|
||||
.blog_detail_section .blog_inner_pannel .section_title h2 {font-size: 22px;}
|
||||
.blog_detail_section .blog_inner_pannel .info h3 {font-size: 18px;}
|
||||
.blog_detail_section .blog_inner_pannel .info ul {text-align: left; padding-left: 0;}
|
||||
.blog_detail_section .blog_inner_pannel .two_img {margin-bottom: 0;}
|
||||
.blog_detail_section .blog_inner_pannel .two_img img {margin: 10px 0;}
|
||||
.blog_detail_section .blog_inner_pannel .quote_block .q_icon {left: 50%; transform: translateX(-50%);}
|
||||
.blog_detail_section .blog_inner_pannel .quote_block {padding: 55px 20px 35px 20px;}
|
||||
.blog_detail_section .blog_inner_pannel .quote_block h2 {font-size: 18px; line-height: 1.4;}
|
||||
.blog_detail_section .blog_inner_pannel .blog_authore {flex-direction: column;}
|
||||
.blog_detail_section .blog_inner_pannel .blog_authore .authore_info {margin-bottom: 30px;}
|
||||
.blog_detail_section .blog_inner_pannel .blog_authore .authore_info .text h3 {font-size: 18px;}
|
||||
|
||||
.comment_section ul li {flex-direction: column; padding: 20px 0; text-align: left;}
|
||||
.comment_section ul li .comment {width: 100%; margin-left: 0;}
|
||||
.comment_section ul li .authore_info {width: 100%; margin-bottom: 15px;}
|
||||
.comment_section ul li.replay_comment {margin-left: 30px;}
|
||||
.comment_section ul li .authore_info .text {width: auto;}
|
||||
|
||||
.comment_form_section form .form-group .form-control {height: 45px; font-size: 14px; margin-bottom: 15px;}
|
||||
|
||||
|
||||
.signup_form {width: calc(100% - 30px); margin: 0 15px;}
|
||||
.signup_form form {padding: 0 20px;}
|
||||
.signup_form form .form-group .form-control {font-size: 14px; height: 50px;}
|
||||
.signup_form .or_option .google_btn {min-width: 275px; padding: 12px 10px;}
|
||||
.signup_section .back_btn {top: 15px;}
|
||||
.signup_section .top_part {padding-top: 35px; padding-bottom: 35px;}
|
||||
|
||||
.review_freeapp {margin: 0 0 40px 0;}
|
||||
.review_list_section .review_box .rating ul ,
|
||||
.review_list_section .review_box .reviewer {justify-content: flex-start; text-align: center;}
|
||||
.review_list_section .review_box .reviewer .text {width: auto; text-align: left;}
|
||||
.review_list_section .review_box {text-align: left;}
|
||||
|
||||
.contact_page_section .contact_inner {margin-top: 40px;}
|
||||
.contact_page_section .contact_inner .contact_form {padding: 30px 20px;}
|
||||
.contact_page_section .contact_inner .section_title h2 {font-size: 24px;}
|
||||
.contact_page_section .contact_inner .contact_form form .form-group .form-control {height: 50px; font-size: 14px;}
|
||||
.contact_page_section .contact_inner .contact_form form .term_check label {text-align: left; line-height: 1.3;}
|
||||
.contact_page_section .contact_inner .contact_form form .term_check {align-items: flex-start;}
|
||||
.contact_page_section .contact_inner .contact_info .section_title {text-align: center;}
|
||||
.contact_page_section .contact_inner .contact_info .btn {margin-bottom: 30px;}
|
||||
.contact_page_section .contact_inner .contact_info .contact_info_list li {flex-direction: column;}
|
||||
.contact_page_section .contact_inner .contact_info .contact_info_list li .img {width: 100%; margin: 0;}
|
||||
.contact_page_section .contact_inner .contact_info .contact_info_list li .text {width: 100%; margin-top: 10px;}
|
||||
|
||||
.map_section {margin: 15px 0;}
|
||||
|
||||
}
|
||||
|
||||
@media screen and (max-width:640px) {
|
||||
.features_section .feature_detail .feature_box { justify-content: center; margin: 0 auto; }
|
||||
.bred_crumb .banner_shape1, .banner_shape2, .banner_shape3 { display: none;}
|
||||
.query_section .banner_shape1, .banner_shape2, .banner_shape3 { display: none;}
|
||||
|
||||
}
|
||||
|
||||
@media screen and (max-width:479px) {
|
||||
|
||||
/* about app section */
|
||||
.about_app_section .about_img::before {left: 49%;}
|
||||
}
|
||||
3506
desarrollo/diseno/login-clientes/css/style.css
vendored
3506
desarrollo/diseno/login-clientes/css/style.css
vendored
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 2.3 MiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,321 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<defs >
|
||||
<font id="Poppins" horiz-adv-x="844" ><font-face
|
||||
font-family="Poppins Light"
|
||||
units-per-em="1000"
|
||||
panose-1="0 0 4 0 0 0 0 0 0 0"
|
||||
ascent="1050"
|
||||
descent="-350"
|
||||
alphabetic="0" />
|
||||
<glyph unicode=" " glyph-name="space" horiz-adv-x="274" />
|
||||
<glyph unicode="!" glyph-name="exclam" horiz-adv-x="277" d="M174 699L165 185H106L98 699H174ZM117 -5T103 10T88 47Q88 69 102 83T139 98Q160 98 174 84T189 47Q189 25 175 10T139 -5Q117 -5 103 10Z" />
|
||||
<glyph unicode=""" glyph-name="quotedbl" horiz-adv-x="264" d="M106 795L96 602H47L37 795H106ZM226 795L217 602H168L157 795H226Z" />
|
||||
<glyph unicode="#" glyph-name="numbersign" horiz-adv-x="812" d="M602 461L563 276H706V214H550L504 0H437L483 214H261L215 0H148L194 214H35V276H207L246 461H90V523H260L306 740H373L327 523H549L595 740H662L616 523H761V461H602ZM535 461H313L274 276H496L535
|
||||
461Z" />
|
||||
<glyph unicode="$" glyph-name="dollar" horiz-adv-x="597" d="M512 137T489 95T420 24T308 -7V-87H264V-6Q175 2 120 52T61 178H136Q140 133 172 97T264 52V329Q197 347 157 365T88 420T60 521Q60 600 115 651T264 707V791H308V706Q391 698 441 652T500 537H426Q420
|
||||
574 390 606T308 646V379Q373 362 414 344T484 287T512 184Q512 137 489 95ZM131 468T165 440T264 392V649Q204 646 168 614T131 524Q131 468 165 440ZM372 54T407 90T442 181Q442 238 408 267T308 316V50Q372 54 407 90Z" />
|
||||
<glyph unicode="%" glyph-name="percent" horiz-adv-x="726" d="M43 631T82 670T183 710Q245 710 284 671T324 567Q324 502 285 463T183 423Q122 423 83 462T43 567Q43 631 82 670ZM603 700L193 0H122L533 700H603ZM145 665T123 640T100 567Q100 520 122 494T183
|
||||
468Q221 468 244 494T267 567Q267 613 244 639T183 665Q145 665 123 640ZM403 198T442 237T543 277Q604 277 643 238T683 133Q683 68 644 29T543 -11Q482 -11 443 28T403 133Q403 198 442 237ZM505 231T482 205T459 133Q459 87 482 61T543 35Q581 35 603 60T626
|
||||
133Q626 180 604 205T543 231Q505 231 482 205Z" />
|
||||
<glyph unicode="&" glyph-name="ampersand" horiz-adv-x="719" d="M612 0L517 97Q466 41 408 15T277 -12Q207 -12 153 14T69 89T39 200Q39 274 81 329T204 415Q169 454 153 487T137 560Q137 627 185 668T313 710Q388 710 435 667T479 555H409Q410 600 382
|
||||
626T310 652Q264 652 236 627T207 561Q207 529 224 499T280 428L510 195Q524 214 548 255L612 362H687L611 231Q584 184 557 147L703 0H612ZM336 49T382 72T471 144L248 370Q109 319 109 202Q109 158 130 124T190 69T277 49Q336 49 382 72Z" />
|
||||
<glyph unicode="'" glyph-name="quotesingle" horiz-adv-x="147" d="M110 795L98 602H49L37 795H110Z" />
|
||||
<glyph unicode="(" glyph-name="parenleft" horiz-adv-x="420" d="M202 -93T148 52T94 369Q94 542 150 690T307 934H380V927Q273 822 218 676T162 369Q162 210 215 68T370 -179V-186H296Q202 -93 148 52Z" />
|
||||
<glyph unicode=")" glyph-name="parenright" horiz-adv-x="420" d="M50 -186V-179Q152 -74 205 68T258 369Q258 530 203 676T40 927V934H113Q214 838 270 690T326 369Q326 198 272 53T124 -186H50Z" />
|
||||
<glyph unicode="*" glyph-name="asterisk" horiz-adv-x="469" d="M382 662L410 611L269 547L411 483L382 431L253 517L265 360H207L218 517L89 430L59 483L201 547L60 610L89 662L219 575L207 732H266L253 575L382 662Z" />
|
||||
<glyph unicode="+" glyph-name="plus" horiz-adv-x="655" d="M583 340H360V115H295V340H73V400H295V625H360V400H583V340Z" />
|
||||
<glyph unicode="," glyph-name="comma" horiz-adv-x="173" d="M144 116L40 -146H-8L66 116H144Z" />
|
||||
<glyph unicode="-" glyph-name="hyphen" horiz-adv-x="519" d="M675 400V341H286V400H675Z" />
|
||||
<glyph unicode="." glyph-name="period" horiz-adv-x="182" d="M70 -5T56 10T41 47Q41 69 55 83T92 98Q113 98 127 84T142 47Q142 25 128 10T92 -5Q70 -5 56 10Z" />
|
||||
<glyph unicode="/" glyph-name="slash" horiz-adv-x="441" d="M391 940L115 -166H46L320 940H391Z" />
|
||||
<glyph unicode="0" glyph-name="zero" horiz-adv-x="616" d="M65 537T118 632T308 727Q445 727 498 632T551 365Q551 190 498 94T308 -2Q170 -2 118 94T65 365Q65 537 118 632ZM482 458T469 522T418 625T308 664Q236 664 198 625T147 522T134 365Q134 269 147
|
||||
205T198 101T308 62Q380 62 418 101T469 204T482 365Q482 458 469 522Z" />
|
||||
<glyph unicode="1" glyph-name="one" horiz-adv-x="292" d="M31 654V717H201V0H130V654H31Z" />
|
||||
<glyph unicode="2" glyph-name="two" horiz-adv-x="572" d="M235 193T335 302T436 517Q436 586 402 627T289 669Q213 669 172 622T125 495H57Q63 606 125 667T289 729Q386 729 446 675T506 520Q506 399 406 286T158 64H528V5H51V55Q235 193 335 302Z" />
|
||||
<glyph unicode="3" glyph-name="three" horiz-adv-x="585" d="M69 625T132 677T297 730Q364 730 412 706T484 641T509 547Q509 484 472 438T367 381V376Q438 362 480 315T522 190Q522 104 465 50T298 -5Q194 -5 127 49T50 204H118Q127 137 174 96T298 54Q374 54
|
||||
414 94T455 196Q455 348 236 348H214V407H237Q441 407 441 540Q441 598 403 633T295 669Q227 669 183 634T130 534H62Q69 625 132 677Z" />
|
||||
<glyph unicode="4" glyph-name="four" horiz-adv-x="613" d="M34 170V223L398 713H481V231H588V170H481V0H412V170H34ZM415 636L115 231H415V636Z" />
|
||||
<glyph unicode="5" glyph-name="five" horiz-adv-x="617" d="M517 657H151V401Q176 436 224 458T328 481Q410 481 462 448T537 361T560 246Q560 176 534 120T453 30T317 -3Q214 -3 150 50T72 195H141Q154 129 201 93T317 57Q404 57 448 108T493 245Q493 328 448
|
||||
374T319 421Q261 421 217 394T152 321H86V718H517V657Z" />
|
||||
<glyph unicode="6" glyph-name="six" horiz-adv-x="629" d="M455 672T326 672Q228 672 179 596T134 347Q154 407 210 441T340 476Q445 476 506 412T568 234Q568 168 543 115T465 29T334 -3Q185 -3 129 92T72 361Q72 731 326 731Q422 731 477 679T542 542H477Q455
|
||||
672 326 672ZM280 416T238 397T170 340T143 245Q143 164 191 110T331 56Q408 56 454 103T500 231Q500 318 455 367T327 416Q280 416 238 397Z" />
|
||||
<glyph unicode="7" glyph-name="seven" horiz-adv-x="533" d="M494 662L215 0H144L426 656H26V716H494V662Z" />
|
||||
<glyph unicode="8" glyph-name="eight" horiz-adv-x="624" d="M142 392T110 435T77 539Q77 593 104 635T185 702T312 727Q386 727 439 703T519 636T547 539Q547 479 515 435T420 372Q488 355 527 307T566 190Q566 126 535 79T446 5T312 -21Q236 -21 179 5T90 78T58
|
||||
190Q58 259 97 307T204 372Q142 392 110 435ZM479 597T434 633T312 669Q235 669 190 634T145 531Q145 469 191 432T312 395Q387 395 433 432T479 531Q479 597 434 633ZM230 341T178 304T126 192Q126 120 176 79T312 38Q397 38 447 79T497 192Q497 266 446 303T312
|
||||
341Q230 341 178 304Z" />
|
||||
<glyph unicode="9" glyph-name="nine" horiz-adv-x="625" d="M169 126T208 91T315 56Q409 56 454 129T496 373Q477 318 424 287T301 255Q196 255 133 318T69 493Q69 560 95 614T174 699T304 730Q446 730 502 638T558 372Q558 185 503 91T312 -3Q213 -3 158 50T93
|
||||
191H158Q169 126 208 91ZM359 315T398 334T462 392T486 483Q486 565 440 618T306 671Q229 671 183 623T136 495Q136 411 182 363T312 315Q359 315 398 334Z" />
|
||||
<glyph unicode=":" glyph-name="colon" horiz-adv-x="185" d="M70 -5T56 10T41 47Q41 69 55 83T92 98Q113 98 127 84T142 47Q142 25 128 10T92 -5Q70 -5 56 10ZM70 430T56 445T41 482Q41 504 55 518T92 533Q113 533 127 519T142 482Q142 460 128 445T92 430Q70
|
||||
430 56 445Z" />
|
||||
<glyph unicode=";" glyph-name="semicolon" horiz-adv-x="227" d="M95 431T81 446T66 483Q66 505 80 519T117 534Q138 534 152 520T167 483Q167 461 153 446T117 431Q95 431 81 446ZM168 116L64 -146H16L90 116H168Z" />
|
||||
<glyph unicode="<" glyph-name="less" horiz-adv-x="504" d="M322 138L71 370L322 602H411L159 370L411 138H322Z" />
|
||||
<glyph unicode="=" glyph-name="equal" horiz-adv-x="676" d="M593 502V442H83V502H593ZM593 298V239H83V298H593Z" />
|
||||
<glyph unicode=">" glyph-name="greater" horiz-adv-x="492" d="M78 602H167L418 370L167 138H78L330 370L78 602Z" />
|
||||
<glyph unicode="?" glyph-name="question" horiz-adv-x="512" d="M313 708T362 683T439 612T467 504Q467 396 401 346T219 295L216 185H156L152 345H178Q281 345 340 377T400 504Q400 570 359 609T249 648Q181 648 141 611T101 510H34Q34 570 61 614T137 683T249
|
||||
708Q313 708 362 683ZM164 -5T150 10T135 47Q135 69 149 83T186 98Q207 98 221 84T236 47Q236 25 222 10T186 -5Q164 -5 150 10Z" />
|
||||
<glyph unicode="@" glyph-name="at" horiz-adv-x="1002" d="M675 636T757 594T883 477T927 303Q927 225 902 154T830 39T720 -6Q671 -6 646 20T618 93Q587 47 539 21T437 -6Q361 -6 319 40T276 165Q276 239 307 303T393 407T518 446Q568 446 602 424T652 360L665
|
||||
434H726L675 143Q672 125 672 110Q672 43 730 43Q773 43 804 82T852 180T869 299Q869 387 832 451T724 550T558 585Q438 585 341 526T189 366T134 143Q133 7 216 -68T443 -144Q534 -144 608 -110L619 -159Q531 -195 428 -195Q323 -195 243 -155T119 -39T75 136Q75
|
||||
275 138 389T314 570T567 636Q675 636 757 594ZM502 49T540 73T602 140T633 238Q635 256 635 264Q635 320 605 355T518 391Q465 391 425 360T363 280T341 175Q341 117 371 83T457 49Q502 49 540 73Z" />
|
||||
<glyph unicode="A" glyph-name="A" horiz-adv-x="652" d="M485 166H167L106 0H32L287 690H366L620 0H546L485 166ZM464 224L326 602L188 224H464Z" />
|
||||
<glyph unicode="B" glyph-name="B" horiz-adv-x="597" d="M466 350T507 301T548 187Q548 134 522 92T444 25T322 0H80V699H315Q421 699 476 650T532 523Q532 458 497 418T407 361Q466 350 507 301ZM150 390H313Q384 390 422 423T461 516Q461 574 423 607T310 640H150V390ZM393
|
||||
59T435 95T478 194Q478 257 434 294T314 332H150V59H317Q393 59 435 95Z" />
|
||||
<glyph unicode="C" glyph-name="C" horiz-adv-x="771" d="M48 453T93 534T216 661T390 707Q507 707 590 652T712 495H630Q600 566 539 606T390 646Q313 646 252 610T155 507T120 350Q120 261 155 194T251 91T390 55Q477 55 538 94T630 204H712Q674 104 590 49T390
|
||||
-6Q294 -6 216 39T93 166T48 350Q48 453 93 534Z" />
|
||||
<glyph unicode="D" glyph-name="D" horiz-adv-x="706" d="M403 699T486 657T613 536T657 348Q657 240 613 162T486 42T287 0H80V699H287Q403 699 486 657ZM433 58T509 134T586 348Q586 486 510 563T287 641H150V58H287Q433 58 509 134Z" />
|
||||
<glyph unicode="E" glyph-name="E" horiz-adv-x="503" d="M150 642V381H415V323H150V58H445V0H80V700H445V642H150Z" />
|
||||
<glyph unicode="F" glyph-name="F" horiz-adv-x="493" d="M458 699V641H150V380H410V322H150V0H80V699H458Z" />
|
||||
<glyph unicode="G" glyph-name="G" horiz-adv-x="782" d="M630 495Q600 564 539 603T394 643Q316 643 254 607T156 505T120 350Q120 262 156 195T254 92T394 56Q467 56 525 87T619 177T660 314H366V371H734V320Q729 228 684 154T564 36T394 -7Q297 -7 218 38T94
|
||||
165T48 350Q48 453 93 534T218 661T394 707Q506 707 590 651T712 495H630Z" />
|
||||
<glyph unicode="H" glyph-name="H" horiz-adv-x="679" d="M599 699V0H529V327H150V0H80V699H150V385H529V699H599Z" />
|
||||
<glyph unicode="I" glyph-name="I" horiz-adv-x="229" d="M150 699V0H80V699H150Z" />
|
||||
<glyph unicode="J" glyph-name="J" horiz-adv-x="499" d="M403 699V170Q403 90 354 42T223 -7Q138 -7 88 44T37 184H108Q109 127 136 91T223 55Q279 55 306 88T333 170V699H403Z" />
|
||||
<glyph unicode="K" glyph-name="K" horiz-adv-x="568" d="M453 0L150 323V0H80V699H150V372L453 699H542L215 350L545 0H453Z" />
|
||||
<glyph unicode="L" glyph-name="L" horiz-adv-x="421" d="M150 57H401V0H80V699H150V57Z" />
|
||||
<glyph unicode="M" glyph-name="M" horiz-adv-x="842" d="M763 690V0H693V551L447 0H396L150 549V0H80V690H154L421 92L688 690H763Z" />
|
||||
<glyph unicode="N" glyph-name="N" horiz-adv-x="686" d="M607 0H537L150 588V0H80V699H150L537 112V699H607V0Z" />
|
||||
<glyph unicode="O" glyph-name="O" horiz-adv-x="788" d="M297 -7T218 38T94 165T48 350Q48 453 93 534T218 661T394 707Q492 707 571 662T695 535T740 350Q740 247 695 166T571 39T394 -7Q297 -7 218 38ZM472 54T534 90T632 193T668 350Q668 439 632 506T534
|
||||
609T394 645Q316 645 254 609T156 506T120 350Q120 261 156 194T254 90T394 54Q472 54 534 90Z" />
|
||||
<glyph unicode="P" glyph-name="P" horiz-adv-x="564" d="M527 408T468 353T291 298H150V0H80V699H291Q408 699 467 644T527 498Q527 408 468 353ZM455 358T455 498Q455 568 416 604T291 640H150V358H291Q455 358 455 498Z" />
|
||||
<glyph unicode="Q" glyph-name="Q" horiz-adv-x="789" d="M657 -137L501 8Q450 -7 394 -7Q297 -7 218 38T94 165T48 350Q48 453 93 534T218 661T394 707Q492 707 571 662T695 535T740 350Q740 244 693 162T564 35L751 -137H657ZM120 261T156 194T254 90T394 54Q472
|
||||
54 534 90T632 193T668 350Q668 439 632 506T534 609T394 645Q316 645 254 609T156 506T120 350Q120 261 156 194Z" />
|
||||
<glyph unicode="R" glyph-name="R" horiz-adv-x="587" d="M452 0L279 292H150V0H80V699H290Q407 699 467 643T528 496Q528 420 485 367T356 297L536 0H452ZM150 349H291Q373 349 414 389T456 496Q456 565 416 602T290 640H150V349Z" />
|
||||
<glyph unicode="S" glyph-name="S" horiz-adv-x="572" d="M223 -7T171 17T88 84T56 180H130Q135 129 175 91T292 52Q363 52 404 88T446 181Q446 226 423 253T366 294T272 324Q202 343 161 361T91 417T62 520Q62 574 90 616T169 683T286 707Q383 707 442 660T511
|
||||
537H435Q428 580 388 613T280 647Q217 647 175 614T133 522Q133 478 156 451T213 410T307 380Q375 361 417 343T488 286T517 184Q517 135 491 91T414 20T292 -7Q223 -7 171 17Z" />
|
||||
<glyph unicode="T" glyph-name="T" horiz-adv-x="520" d="M489 699V641H295V0H225V641H30V699H489Z" />
|
||||
<glyph unicode="U" glyph-name="U" horiz-adv-x="661" d="M147 699V259Q147 155 196 105T332 55Q418 55 466 104T515 259V699H585V260Q585 127 515 60T331 -7Q218 -7 148 60T77 260V699H147Z" />
|
||||
<glyph unicode="V" glyph-name="V" horiz-adv-x="659" d="M634 699L369 0H289L24 699H100L329 76L560 699H634Z" />
|
||||
<glyph unicode="W" glyph-name="W" horiz-adv-x="955" d="M928 699L730 0H652L476 596L296 0L220 -1L26 699H101L261 86L440 699H518L692 86L853 699H928Z" />
|
||||
<glyph unicode="X" glyph-name="X" horiz-adv-x="585" d="M332 349L544 0H466L288 292L119 0H41L252 352L41 699H119L296 408L467 699H545L332 349Z" />
|
||||
<glyph unicode="Y" glyph-name="Y" horiz-adv-x="564" d="M542 699L318 272V0H248V272L22 699H101L283 336L464 699H542Z" />
|
||||
<glyph unicode="Z" glyph-name="Z" horiz-adv-x="525" d="M125 62H482V0H43V56L395 637H49V699H477V643L125 62Z" />
|
||||
<glyph unicode="[" glyph-name="bracketleft" horiz-adv-x="367" d="M273 934V876H185V-127H273V-186H119V934H273Z" />
|
||||
<glyph unicode="\" glyph-name="backslash" horiz-adv-x="603" d="M427 -166L101 940H172L496 -166H427Z" />
|
||||
<glyph unicode="]" glyph-name="bracketright" horiz-adv-x="367" d="M248 -186H94V-127H182V876H94V934H248V-186Z" />
|
||||
<glyph unicode="^" glyph-name="asciicircum" horiz-adv-x="606" d="M110 171H38L272 690H335L569 171H496L304 602L110 171Z" />
|
||||
<glyph unicode="_" glyph-name="underscore" horiz-adv-x="674" d="M595 -35V-100H86V-35H595Z" />
|
||||
<glyph unicode="`" glyph-name="grave" horiz-adv-x="260" d="M229 642V588L24 707V770L229 642Z" />
|
||||
<glyph unicode="a" glyph-name="a" horiz-adv-x="675" d="M48 358T81 421T174 519T309 554Q387 554 443 518T525 426V546H595V0H525V121Q499 65 443 29T308 -8Q234 -8 175 27T82 126T48 274Q48 358 81 421ZM525 339T498 389T425 466T322 493Q264 493 218 467T146
|
||||
392T119 274Q119 207 145 157T218 80T322 53Q378 53 424 80T498 157T525 273Q525 339 498 389Z" />
|
||||
<glyph unicode="b" glyph-name="b" horiz-adv-x="675" d="M176 482T232 518T366 554Q441 554 500 520T592 422T626 274Q626 190 593 126T500 27T366 -8Q288 -8 232 27T149 120V0H80V740H149V425Q176 482 232 518ZM555 342T529 391T456 467T352 493Q296 493 250
|
||||
466T176 389T149 273Q149 207 176 157T249 80T352 53Q410 53 456 79T528 156T555 274Q555 342 529 391Z" />
|
||||
<glyph unicode="c" glyph-name="c" horiz-adv-x="613" d="M48 358T82 421T176 519T313 554Q414 554 479 504T564 368H489Q475 427 429 460T313 494Q258 494 214 469T145 395T119 273Q119 201 144 151T214 76T313 51Q382 51 428 84T489 178H564Q545 94 479 43T313
|
||||
-8Q236 -8 176 26T82 124T48 273Q48 358 82 421Z" />
|
||||
<glyph unicode="d" glyph-name="d" horiz-adv-x="675" d="M48 358T82 421T175 519T310 554Q382 554 440 519T525 428V740H595V0H525V122Q500 65 443 29T309 -8Q234 -8 175 27T82 126T48 274Q48 358 82 421ZM525 339T498 389T425 466T322 493Q264 493 218 467T146
|
||||
392T119 274Q119 207 145 157T218 80T322 53Q378 53 424 80T498 157T525 273Q525 339 498 389Z" />
|
||||
<glyph unicode="e" glyph-name="e" horiz-adv-x="622" d="M574 265T572 246H119Q122 184 149 140T220 74T316 51Q384 51 430 84T492 173H566Q546 93 481 43T316 -8Q239 -8 178 26T83 124T48 273Q48 358 82 422T177 520T316 554Q394 554 452 520T542 429T574 301Q574
|
||||
265 572 246ZM504 364T479 407T409 472T313 494Q235 494 180 444T119 303H503Q504 364 479 407Z" />
|
||||
<glyph unicode="f" glyph-name="f" horiz-adv-x="325" d="M295 487H168V0H98V487H22V546H98V584Q98 673 143 715T291 757V697Q223 697 196 671T168 584V546H295V487Z" />
|
||||
<glyph unicode="g" glyph-name="g" horiz-adv-x="675" d="M386 554T443 518T525 427V546H595V-14Q595 -89 563 -147T472 -236T340 -268Q235 -268 166 -218T79 -82H148Q166 -139 216 -173T340 -207Q393 -207 435 -185T501 -118T525 -14V121Q499 65 443 29T309 -8Q234
|
||||
-8 175 27T82 126T48 274Q48 358 81 421T174 519T309 554Q386 554 443 518ZM525 339T498 389T425 466T322 493Q264 493 218 467T146 392T119 274Q119 207 145 157T218 80T322 53Q378 53 424 80T498 157T525 273Q525 339 498 389Z" />
|
||||
<glyph unicode="h" glyph-name="h" horiz-adv-x="633" d="M402 556T451 530T529 451T558 320V0H489V312Q489 401 445 448T323 495Q244 495 197 445T150 298V0H80V740H150V453Q176 502 226 529T340 556Q402 556 451 530Z" />
|
||||
<glyph unicode="i" glyph-name="i" horiz-adv-x="229" d="M94 649T79 664T64 701Q64 723 79 737T115 752Q136 752 151 738T166 701Q166 679 151 664T115 649Q94 649 79 664ZM150 546V0H80V546H150Z" />
|
||||
<glyph unicode="j" glyph-name="j" horiz-adv-x="234" d="M99 649T84 664T69 701Q69 723 84 737T120 752Q141 752 155 738T170 701Q170 679 156 664T120 649Q99 649 84 664ZM154 -129Q154 -195 121 -226T22 -258H-27V-198H11Q50 -198 67 -182T84 -126V546H154V-129Z" />
|
||||
<glyph unicode="k" glyph-name="k" horiz-adv-x="480" d="M375 0L150 245V0H80V740H150V302L370 546H468L209 274L470 0H375Z" />
|
||||
<glyph unicode="l" glyph-name="l" horiz-adv-x="229" d="M150 740V0H80V740H150Z" />
|
||||
<glyph unicode="m" glyph-name="m" horiz-adv-x="1022" d="M826 556T886 496T947 320V0H878V312Q878 401 835 448T718 495Q641 495 595 444T549 296V0H480V312Q480 401 437 448T319 495Q242 495 196 444T150 296V0H80V546H150V452Q176 503 224 529T331 556Q402
|
||||
556 455 522T533 422Q555 487 608 521T730 556Q826 556 886 496Z" />
|
||||
<glyph unicode="n" glyph-name="n" horiz-adv-x="633" d="M434 556T496 496T558 320V0H489V312Q489 401 445 448T323 495Q244 495 197 445T150 298V0H80V546H150V453Q176 503 225 529T336 556Q434 556 496 496Z" />
|
||||
<glyph unicode="o" glyph-name="o" horiz-adv-x="642" d="M242 -8T181 26T84 124T48 273Q48 358 84 421T182 519T321 554Q398 554 460 520T558 422T594 273Q594 189 558 125T459 27T319 -8Q242 -8 181 26ZM373 53T419 77T493 151T522 273Q522 345 494 394T420
|
||||
468T320 493Q266 493 220 469T147 395T119 273Q119 201 146 152T219 78T319 53Q373 53 419 77Z" />
|
||||
<glyph unicode="p" glyph-name="p" horiz-adv-x="675" d="M175 481T231 517T366 554Q440 554 499 520T592 422T626 274Q626 190 593 126T500 27T366 -8Q289 -8 232 28T149 120V-258H80V546H149V426Q175 481 231 517ZM555 342T529 391T456 467T352 493Q296 493
|
||||
250 466T176 389T149 273Q149 207 176 157T249 80T352 53Q410 53 456 79T528 156T555 274Q555 342 529 391Z" />
|
||||
<glyph unicode="q" glyph-name="q" horiz-adv-x="675" d="M48 358T82 421T175 519T310 554Q387 554 444 518T525 426V546H595V-258H525V120Q501 65 444 29T308 -8Q234 -8 175 27T82 126T48 274Q48 358 82 421ZM525 339T498 389T425 466T322 493Q264 493 218 467T146
|
||||
392T119 274Q119 207 145 157T218 80T322 53Q378 53 424 80T498 157T525 273Q525 339 498 389Z" />
|
||||
<glyph unicode="r" glyph-name="r" horiz-adv-x="362" d="M173 500T220 528T337 556V483H318Q242 483 196 442T150 305V0H80V546H150V449Q173 500 220 528Z" />
|
||||
<glyph unicode="s" glyph-name="s" horiz-adv-x="510" d="M174 -8T115 35T48 154H120Q125 108 163 80T267 51Q324 51 356 78T389 145Q389 173 371 191T326 219T251 242Q190 258 152 274T88 321T61 406Q61 446 85 480T153 534T253 554Q341 554 395 510T453 387H383Q380
|
||||
435 346 464T251 494Q198 494 165 469T132 407Q132 375 151 355T200 323T278 297Q337 281 372 266T432 222T458 145Q458 101 434 67T367 12T268 -8Q174 -8 115 35Z" />
|
||||
<glyph unicode="t" glyph-name="t" horiz-adv-x="356" d="M171 487V148Q171 98 190 79T257 60H321V0H246Q172 0 136 34T100 148V487H24V546H100V683H171V546H321V487H171Z" />
|
||||
<glyph unicode="u" glyph-name="u" horiz-adv-x="633" d="M553 546V0H483V96Q459 45 409 18T297 -9Q199 -9 137 51T75 227V546H144V235Q144 146 188 99T310 52Q389 52 436 102T483 249V546H553Z" />
|
||||
<glyph unicode="v" glyph-name="v" horiz-adv-x="547" d="M274 68L458 546H532L313 0H234L15 546H90L274 68Z" />
|
||||
<glyph unicode="w" glyph-name="w" horiz-adv-x="815" d="M800 546L629 0H559L408 458L257 0H186L15 546H86L222 71L375 546H445L596 70L731 546H800Z" />
|
||||
<glyph unicode="x" glyph-name="x" horiz-adv-x="460" d="M366 0L225 220L89 0H15L191 273L17 546H96L235 329L370 546H443L269 276L445 0H366Z" />
|
||||
<glyph unicode="y" glyph-name="y" horiz-adv-x="545" d="M530 546L206 -257H133L239 3L15 546H92L278 80L458 546H530Z" />
|
||||
<glyph unicode="z" glyph-name="z" horiz-adv-x="441" d="M117 58H403V0H37V58L318 488H42V546H398V488L117 58Z" />
|
||||
<glyph unicode="{" glyph-name="braceleft" horiz-adv-x="413" d="M86 402Q191 426 191 519Q191 565 180 647Q179 656 174 702T169 788Q169 860 208 896T314 933H364V872H326Q282 872 260 851T237 783Q237 748 242 704T248 649Q259 565 259 517Q259 462 232 425T147
|
||||
374V372Q204 359 231 322T259 229Q259 182 248 98Q247 87 242 43T237 -37Q237 -84 259 -105T326 -126H364V-187H314Q247 -187 208 -151T169 -42Q169 -3 174 43T180 100Q191 183 191 227Q191 320 86 345V402Z" />
|
||||
<glyph unicode="|" glyph-name="bar" horiz-adv-x="261" d="M166 -100H96V790H166V-100Z" />
|
||||
<glyph unicode="}" glyph-name="braceright" horiz-adv-x="413" d="M222 320T222 227Q222 183 233 100Q234 90 239 44T244 -42Q244 -114 205 -150T99 -187H49V-126H87Q131 -126 153 -105T176 -37Q176 -2 171 42T165 98Q154 182 154 229Q154 284 181 321T266 372V374Q209
|
||||
387 182 424T154 517Q154 565 165 649Q166 659 171 703T176 783Q176 830 154 851T87 872H49V933H99Q166 933 205 897T244 788Q244 749 239 703T233 647Q222 565 222 519Q222 426 327 402V345Q222 320 222 227Z" />
|
||||
<glyph unicode="~" glyph-name="asciitilde" horiz-adv-x="487" d="M49 321T80 353T162 386Q189 386 210 377T258 349Q284 333 298 326T330 319Q357 319 374 337T396 385H449Q428 256 325 256Q300 256 281 265T232 292Q208 308 193 315T158 323Q132 323 114 305T91
|
||||
257H38Q49 321 80 353Z" />
|
||||
<glyph unicode=" " glyph-name="uni00A0" horiz-adv-x="274" />
|
||||
<glyph unicode="¡" glyph-name="exclamdown" horiz-adv-x="277" d="M160 561T174 546T189 509Q189 487 175 473T139 458Q117 458 103 472T88 509Q88 531 102 546T139 561Q160 561 174 546ZM106 371H165L174 -143H98L106 371Z" />
|
||||
<glyph unicode="¢" glyph-name="cent" horiz-adv-x="642" d="M382 68T426 101T482 192H548Q537 115 480 65T333 10V-90H289V11Q184 19 124 88T63 264Q63 371 123 440T289 518V614H333V519Q423 514 480 464T548 337H482Q470 395 426 428T315 461Q234 461 182
|
||||
410T130 264Q130 170 182 119T315 68Q382 68 426 101Z" />
|
||||
<glyph unicode="£" glyph-name="sterling" horiz-adv-x="596" d="M533 58V-1H102L90 41Q133 90 153 131T174 233Q174 269 160 314H46V364H142Q127 408 119 440T111 513Q111 573 137 619T210 690T319 716Q418 716 472 659T532 514H468Q464 578 426 617T319
|
||||
657Q258 657 218 621T177 510Q177 474 185 442T210 364H404V314H227Q240 266 240 235Q240 184 222 141T165 58H533Z" />
|
||||
<glyph unicode="¤" glyph-name="currency" horiz-adv-x="526" d="M432 315T399 269L459 209L426 176L366 236Q321 202 262 202Q202 202 158 235L99 176L66 209L126 269Q94 312 94 377Q94 442 127 486L66 547L99 580L160 519Q204 552 263 552Q320 552 366
|
||||
519L426 580L459 547L398 486Q432 439 432 377Q432 315 399 269ZM307 248T339 282T372 377Q372 436 340 471T262 507Q216 507 185 472T154 377Q154 317 184 283T262 248Q307 248 339 282Z" />
|
||||
<glyph unicode="¥" glyph-name="yen" horiz-adv-x="585" d="M382 372H530V320L355 319L330 272V225H530V172H330V0H260V172H60V225H260V272L235 319L60 320V372H207L34 699H113L294 336L475 699H554L382 372Z" />
|
||||
<glyph unicode="¦" glyph-name="brokenbar" horiz-adv-x="261" d="M96 790H166V420H96V790ZM166 -100H96V270H166V-100Z" />
|
||||
<glyph unicode="§" glyph-name="section" horiz-adv-x="572" d="M426 84T460 52T494 -32Q494 -74 471 -108T404 -162T300 -182Q209 -182 151 -138T87 -16H157Q163 -66 197 -98T300 -131Q358 -131 391 -108T424 -38Q424 -10 409 10T359 47T261 83Q156 114
|
||||
103 155T50 270Q50 329 91 374T207 435Q147 458 113 490T78 574Q78 615 101 649T169 702T274 722Q365 722 422 679T485 557H415Q411 605 376 638T274 672Q215 672 182 649T148 580Q148 551 163 531T213 494T312 457Q417 426 469 385T522 270Q522 212 482 167T367
|
||||
106Q426 84 460 52ZM121 216T166 181T289 146Q365 146 408 182T451 270Q451 325 406 359T284 394Q233 394 196 377T140 332T121 270Q121 216 166 181Z" />
|
||||
<glyph unicode="¨" glyph-name="dieresis" horiz-adv-x="315" d="M62 623T49 636T35 669Q35 688 48 701T81 715Q100 715 113 702T127 669Q127 650 114 637T81 623Q62 623 49 636ZM216 623T203 636T189 669Q189 688 202 701T235 715Q254 715 267 702T280 669Q280
|
||||
650 267 637T235 623Q216 623 203 636Z" />
|
||||
<glyph unicode="©" glyph-name="copyright" horiz-adv-x="796" d="M499 703T577 658T699 533T743 350Q743 247 700 167T578 41T398 -4Q297 -4 219 41T97 166T53 350Q53 453 96 533T218 658T398 703Q499 703 577 658ZM304 670T235 630T127 517T89 350Q89 256
|
||||
127 184T235 71T398 30Q491 30 561 70T669 183T707 350Q707 444 669 516T562 629T398 670Q304 670 235 630ZM338 584T289 556T211 475T182 351Q182 279 211 226T289 145T398 117Q472 117 527 157T602 267H537Q521 219 485 194T398 169Q332 169 289 216T245 350Q245
|
||||
436 288 484T398 532Q447 532 484 507T537 433H602Q583 505 528 544T398 584Q338 584 289 556Z" />
|
||||
<glyph unicode="ª" glyph-name="ordfeminine" horiz-adv-x="445" d="M35 582T56 623T115 686T200 709Q251 709 286 687T337 629V703H394V353H337V426Q322 390 287 369T202 347Q154 347 116 370T57 435T35 529Q35 582 56 623ZM94 466T128 429T214 392Q267
|
||||
392 302 429T337 528Q337 590 302 627T214 664Q163 664 129 628T94 529Q94 466 128 429Z" />
|
||||
<glyph unicode="«" glyph-name="guillemotleft" horiz-adv-x="435" d="M144 120L45 295L144 470H215L113 295L215 120H144ZM314 120L215 295L314 470H385L283 295L385 120H314Z" />
|
||||
<glyph unicode="¬" glyph-name="logicalnot" horiz-adv-x="651" d="M607 430V230H538V373H45V430H607Z" />
|
||||
<glyph unicode="­" glyph-name="uni00AD" horiz-adv-x="519" d="M675 400V341H286V400H675Z" />
|
||||
<glyph unicode="®" glyph-name="registered" horiz-adv-x="502" d="M309 708T353 682T423 610T449 507Q449 450 424 405T354 333T252 307Q195 307 150 333T80 404T54 507Q54 564 79 610T150 682T252 708Q309 708 353 682ZM324 340T368 387T413 507Q413 580
|
||||
369 627T252 674Q179 674 135 627T90 507Q90 434 134 387T252 340Q324 340 368 387ZM339 526T325 510T286 488L346 402L295 401L240 486H217V401H174V616H267Q300 616 319 599T339 551Q339 526 325 510ZM217 522H264Q278 522 287 529T296 550Q296 564 287 570T264
|
||||
577H217V522Z" />
|
||||
<glyph unicode="¯" glyph-name="overscore" horiz-adv-x="387" d="M363 700V646H24V700H363Z" />
|
||||
<glyph unicode="°" glyph-name="degree" horiz-adv-x="394" d="M29 601T76 649T197 697Q271 697 318 649T365 522Q365 470 344 431T284 369T196 347Q121 347 75 395T29 522Q29 601 76 649ZM307 584T276 619T196 654Q148 654 117 619T86 522Q86 460 116 426T196
|
||||
391Q244 391 275 425T307 522Q307 584 276 619Z" />
|
||||
<glyph unicode="±" glyph-name="plusminus" horiz-adv-x="657" d="M361 381V170H583V110H74V170H296V381H74V440H296V628H361V440H583V381H361Z" />
|
||||
<glyph unicode="²" glyph-name="twosuperior" horiz-adv-x="322" d="M281 399V352H34V392L145 487Q179 517 197 542T215 601Q215 632 198 648T155 665Q127 665 111 649T90 602H33Q36 649 68 679T157 709Q210 709 242 679T275 603Q275 563 253 532T183 463L100
|
||||
399H281Z" />
|
||||
<glyph unicode="³" glyph-name="threesuperior" horiz-adv-x="323" d="M36 656T70 682T161 709Q213 709 249 680T285 608Q285 578 268 557T221 528V526Q250 517 268 496T287 443Q287 403 252 375T157 347Q100 347 66 374T28 451H84Q92 391 157 391Q189 391
|
||||
208 406T227 449Q227 477 207 492T154 508H106V547H154Q186 547 205 562T225 606Q225 632 207 648T157 664Q98 664 85 614H31Q36 656 70 682Z" />
|
||||
<glyph unicode="´" glyph-name="acute" horiz-adv-x="253" d="M229 707L24 588V642L229 770V707Z" />
|
||||
<glyph unicode="µ" glyph-name="uni00B5" horiz-adv-x="638" d="M558 546V0H488V113Q464 53 414 22T301 -10Q251 -10 211 11T149 80V-258H80V546H149V252Q149 153 195 102T320 51Q397 51 442 101T488 248V546H558Z" />
|
||||
<glyph unicode="¶" glyph-name="paragraph" horiz-adv-x="564" d="M484 0H421V634H335V0H272V289H264Q147 289 88 344T28 489Q28 579 88 634T264 690H484V0Z" />
|
||||
<glyph unicode="·" glyph-name="middot" horiz-adv-x="183" d="M72 295T58 310T43 347Q43 369 57 383T94 398Q115 398 129 384T144 347Q144 325 130 310T94 295Q72 295 58 310Z" />
|
||||
<glyph unicode="¸" glyph-name="cedilla" horiz-adv-x="265" d="M172 -65T206 -89T241 -160Q241 -205 209 -231T124 -258H24V-211H110Q147 -211 164 -199T182 -160Q182 -112 110 -112H64V7H113V-67Q172 -65 206 -89Z" />
|
||||
<glyph unicode="¹" glyph-name="onesuperior" horiz-adv-x="183" d="M29 659V704H140V352H83V659H29Z" />
|
||||
<glyph unicode="º" glyph-name="ordmasculine" horiz-adv-x="429" d="M35 581T58 622T123 686T215 709Q266 709 307 687T371 623T395 527Q395 474 371 433T306 368T214 345Q163 345 122 368T58 432T35 527Q35 581 58 622ZM336 591T301 627T214 663Q163 663
|
||||
129 627T94 527Q94 463 128 428T214 392Q265 392 300 428T336 527Q336 591 301 627Z" />
|
||||
<glyph unicode="»" glyph-name="guillemotright" horiz-adv-x="435" d="M152 295L50 470H121L220 295L121 120H50L152 295ZM322 295L220 470H291L390 295L291 120H220L322 295Z" />
|
||||
<glyph unicode="¼" glyph-name="onequarter" horiz-adv-x="602" d="M41 659V704H152V352H95V659H41ZM493 700L127 0H60L427 700H493ZM568 71H518V0H461V71H282V106L445 354H518V110H568V71ZM462 296L340 110H462V296Z" />
|
||||
<glyph unicode="½" glyph-name="onehalf" horiz-adv-x="650" d="M92 659H38V704H149V352H92V659ZM479 700L119 0H52L412 700H479ZM599 46V-1H352V39L463 134Q497 164 515 189T533 248Q533 279 516 295T473 312Q445 312 429 296T408 249H351Q354 296 386 326T475
|
||||
356Q528 356 560 326T593 250Q593 210 571 179T501 110L418 46H599Z" />
|
||||
<glyph unicode="¾" glyph-name="threequarters" horiz-adv-x="680" d="M46 656T80 682T171 709Q223 709 259 680T295 608Q295 578 278 557T231 528V526Q260 517 278 496T297 443Q297 403 262 375T167 347Q110 347 76 374T38 451H94Q102 391 167 391Q199 391
|
||||
218 406T237 449Q237 477 217 492T164 508H116V547H164Q196 547 215 562T235 606Q235 632 217 648T167 664Q108 664 95 614H41Q46 656 80 682ZM589 700L212 0H146L523 700H589ZM652 71H602V0H545V71H366V106L529 354H602V110H652V71ZM547 296L425 110H547V296Z"
|
||||
/>
|
||||
<glyph unicode="¿" glyph-name="questiondown" horiz-adv-x="502" d="M343 551T357 536T372 499Q372 477 358 463T321 448Q300 448 286 462T271 499Q271 521 285 536T321 551Q343 551 357 536ZM194 -162T145 -137T68 -66T40 42Q40 150 106 200T288 251L291
|
||||
361H351L355 201H329Q226 201 167 169T107 42Q107 -24 148 -63T258 -102Q326 -102 366 -65T406 36H473Q473 -24 446 -68T370 -137T258 -162Q194 -162 145 -137Z" />
|
||||
<glyph unicode="À" glyph-name="Agrave" horiz-adv-x="652" d="M485 166H167L106 0H32L287 690H366L620 0H546L485 166ZM464 224L326 602L188 224H464ZM419 786V732L214 851V914L419 786Z" />
|
||||
<glyph unicode="Á" glyph-name="Aacute" horiz-adv-x="652" d="M485 166H167L106 0H32L287 690H366L620 0H546L485 166ZM464 224L326 602L188 224H464ZM419 851L214 732V786L419 914V851Z" />
|
||||
<glyph unicode="Â" glyph-name="Acircumflex" horiz-adv-x="652" d="M485 166H167L106 0H32L287 690H366L620 0H546L485 166ZM464 224L326 602L188 224H464ZM326 832L192 748V805L326 887L460 805V748L326 832Z" />
|
||||
<glyph unicode="Ã" glyph-name="Atilde" horiz-adv-x="652" d="M485 166H167L106 0H32L287 690H366L620 0H546L485 166ZM464 224L326 602L188 224H464ZM201 795T224 819T283 843Q301 843 314 837T345 818Q360 807 371 802T395 796Q412 796 424 807T439 841H481Q477
|
||||
797 453 773T392 748Q373 748 360 754T328 774Q314 785 304 790T280 795Q244 795 238 750H195Q201 795 224 819Z" />
|
||||
<glyph unicode="Ä" glyph-name="Adieresis" horiz-adv-x="652" d="M485 166H167L106 0H32L287 690H366L620 0H546L485 166ZM464 224L326 602L188 224H464ZM231 767T218 780T204 813Q204 832 217 845T250 859Q269 859 282 846T296 813Q296 794 283 781T250
|
||||
767Q231 767 218 780ZM385 767T372 780T358 813Q358 832 371 845T404 859Q423 859 436 846T449 813Q449 794 436 781T404 767Q385 767 372 780Z" />
|
||||
<glyph unicode="Å" glyph-name="Aring" horiz-adv-x="652" d="M485 166H167L106 0H32L287 690H366L620 0H546L485 166ZM464 224L326 602L188 224H464ZM428 809T399 782T326 754Q283 754 254 781T224 854Q224 899 253 926T326 954Q370 954 399 927T428 854Q428
|
||||
809 399 782ZM385 882T368 898T326 915Q301 915 285 899T268 854Q268 827 284 810T326 793Q351 793 368 810T385 854Q385 882 368 898Z" />
|
||||
<glyph unicode="Æ" glyph-name="AE" horiz-adv-x="882" d="M528 644V380H793V324H528V56H823V0H458V166H184L88 0H11L417 700H823V644H528ZM458 222V640L216 222H458Z" />
|
||||
<glyph unicode="Ç" glyph-name="Ccedilla" horiz-adv-x="771" d="M477 55T538 94T630 204H712Q677 112 603 58T425 -5V-67Q484 -65 518 -89T553 -160Q553 -205 521 -231T436 -258H336V-211H422Q459 -211 476 -199T494 -160Q494 -112 422 -112H376V-6Q283
|
||||
-3 208 43T91 169T48 350Q48 453 93 534T216 661T390 707Q507 707 590 652T712 495H630Q600 566 539 606T390 646Q313 646 252 610T155 507T120 350Q120 261 155 194T251 91T390 55Q477 55 538 94Z" />
|
||||
<glyph unicode="È" glyph-name="Egrave" horiz-adv-x="503" d="M150 642V381H415V323H150V58H445V0H80V700H445V642H150ZM341 786V732L136 851V914L341 786Z" />
|
||||
<glyph unicode="É" glyph-name="Eacute" horiz-adv-x="503" d="M150 642V381H415V323H150V58H445V0H80V700H445V642H150ZM341 851L136 732V786L341 914V851Z" />
|
||||
<glyph unicode="Ê" glyph-name="Ecircumflex" horiz-adv-x="503" d="M150 642V381H415V323H150V58H445V0H80V700H445V642H150ZM248 832L114 748V805L248 887L382 805V748L248 832Z" />
|
||||
<glyph unicode="Ë" glyph-name="Edieresis" horiz-adv-x="503" d="M150 642V381H415V323H150V58H445V0H80V700H445V642H150ZM153 767T140 780T126 813Q126 832 139 845T172 859Q191 859 204 846T218 813Q218 794 205 781T172 767Q153 767 140 780ZM307 767T294
|
||||
780T280 813Q280 832 293 845T326 859Q345 859 358 846T371 813Q371 794 358 781T326 767Q307 767 294 780Z" />
|
||||
<glyph unicode="Ì" glyph-name="Igrave" horiz-adv-x="229" d="M150 699V0H80V699H150ZM207 786V732L2 851V914L207 786Z" />
|
||||
<glyph unicode="Í" glyph-name="Iacute" horiz-adv-x="229" d="M150 699V0H80V699H150ZM207 851L2 732V786L207 914V851Z" />
|
||||
<glyph unicode="Î" glyph-name="Icircumflex" horiz-adv-x="229" d="M150 699V0H80V699H150ZM115 832L-19 748V805L115 887L249 805V748L115 832Z" />
|
||||
<glyph unicode="Ï" glyph-name="Idieresis" horiz-adv-x="229" d="M150 699V0H80V699H150ZM19 767T6 780T-8 813Q-8 832 5 845T38 859Q57 859 70 846T84 813Q84 794 71 781T38 767Q19 767 6 780ZM173 767T160 780T146 813Q146 832 159 845T192 859Q211 859
|
||||
224 846T237 813Q237 794 224 781T192 767Q173 767 160 780Z" />
|
||||
<glyph unicode="Ð" glyph-name="Eth" horiz-adv-x="730" d="M428 699T511 657T638 536T682 348Q682 240 638 162T511 42T312 0H104V316H9V381H104V699H312Q428 699 511 657ZM457 55T533 132T610 348Q610 486 534 564T312 642H175V381H379V316H175V55H312Q457
|
||||
55 533 132Z" />
|
||||
<glyph unicode="Ñ" glyph-name="Ntilde" horiz-adv-x="686" d="M607 0H537L150 588V0H80V699H150L537 112V699H607V0ZM218 795T241 819T300 843Q318 843 331 837T362 818Q377 807 388 802T412 796Q429 796 441 807T456 841H498Q494 797 470 773T409 748Q390
|
||||
748 377 754T345 774Q331 785 321 790T297 795Q261 795 255 750H212Q218 795 241 819Z" />
|
||||
<glyph unicode="Ò" glyph-name="Ograve" horiz-adv-x="788" d="M297 -7T218 38T94 165T48 350Q48 453 93 534T218 661T394 707Q492 707 571 662T695 535T740 350Q740 247 695 166T571 39T394 -7Q297 -7 218 38ZM472 54T534 90T632 193T668 350Q668 439 632
|
||||
506T534 609T394 645Q316 645 254 609T156 506T120 350Q120 261 156 194T254 90T394 54Q472 54 534 90ZM491 786V732L286 851V914L491 786Z" />
|
||||
<glyph unicode="Ó" glyph-name="Oacute" horiz-adv-x="788" d="M297 -7T218 38T94 165T48 350Q48 453 93 534T218 661T394 707Q492 707 571 662T695 535T740 350Q740 247 695 166T571 39T394 -7Q297 -7 218 38ZM472 54T534 90T632 193T668 350Q668 439 632
|
||||
506T534 609T394 645Q316 645 254 609T156 506T120 350Q120 261 156 194T254 90T394 54Q472 54 534 90ZM491 851L286 732V786L491 914V851Z" />
|
||||
<glyph unicode="Ô" glyph-name="Ocircumflex" horiz-adv-x="788" d="M297 -7T218 38T94 165T48 350Q48 453 93 534T218 661T394 707Q492 707 571 662T695 535T740 350Q740 247 695 166T571 39T394 -7Q297 -7 218 38ZM472 54T534 90T632 193T668 350Q668 439
|
||||
632 506T534 609T394 645Q316 645 254 609T156 506T120 350Q120 261 156 194T254 90T394 54Q472 54 534 90ZM399 832L265 748V805L399 887L533 805V748L399 832Z" />
|
||||
<glyph unicode="Õ" glyph-name="Otilde" horiz-adv-x="788" d="M297 -7T218 38T94 165T48 350Q48 453 93 534T218 661T394 707Q492 707 571 662T695 535T740 350Q740 247 695 166T571 39T394 -7Q297 -7 218 38ZM472 54T534 90T632 193T668 350Q668 439 632
|
||||
506T534 609T394 645Q316 645 254 609T156 506T120 350Q120 261 156 194T254 90T394 54Q472 54 534 90ZM273 795T296 819T355 843Q373 843 386 837T417 818Q432 807 443 802T467 796Q484 796 496 807T511 841H553Q549 797 525 773T464 748Q445 748 432 754T400
|
||||
774Q386 785 376 790T352 795Q316 795 310 750H267Q273 795 296 819Z" />
|
||||
<glyph unicode="Ö" glyph-name="Odieresis" horiz-adv-x="788" d="M297 -7T218 38T94 165T48 350Q48 453 93 534T218 661T394 707Q492 707 571 662T695 535T740 350Q740 247 695 166T571 39T394 -7Q297 -7 218 38ZM472 54T534 90T632 193T668 350Q668 439
|
||||
632 506T534 609T394 645Q316 645 254 609T156 506T120 350Q120 261 156 194T254 90T394 54Q472 54 534 90ZM304 767T291 780T277 813Q277 832 290 845T323 859Q342 859 355 846T369 813Q369 794 356 781T323 767Q304 767 291 780ZM458 767T445 780T431 813Q431
|
||||
832 444 845T477 859Q496 859 509 846T522 813Q522 794 509 781T477 767Q458 767 445 780Z" />
|
||||
<glyph unicode="×" glyph-name="multiply" horiz-adv-x="591" d="M461 160L296 325L131 160L85 206L250 371L86 536L132 581L296 417L459 580L505 534L342 371L507 205L461 160Z" />
|
||||
<glyph unicode="Ø" glyph-name="Oslash" horiz-adv-x="788" d="M650 597Q693 549 716 486T740 350Q740 247 695 166T571 39T394 -7Q329 -7 272 13T169 73L102 0H42L137 104Q94 151 71 214T48 350Q48 453 93 534T218 661T394 707Q459 707 516 687T619 627L686
|
||||
700H745L650 597ZM120 231T182 152L575 580Q539 612 493 628T394 645Q316 645 254 609T156 506T120 350Q120 231 182 152ZM668 469T605 548L212 120Q248 88 294 71T394 54Q472 54 534 90T632 193T668 350Q668 469 605 548Z" />
|
||||
<glyph unicode="Ù" glyph-name="Ugrave" horiz-adv-x="661" d="M147 699V259Q147 155 196 105T332 55Q418 55 466 104T515 259V699H585V260Q585 127 515 60T331 -7Q218 -7 148 60T77 260V699H147ZM423 786V732L218 851V914L423 786Z" />
|
||||
<glyph unicode="Ú" glyph-name="Uacute" horiz-adv-x="661" d="M147 699V259Q147 155 196 105T332 55Q418 55 466 104T515 259V699H585V260Q585 127 515 60T331 -7Q218 -7 148 60T77 260V699H147ZM423 851L218 732V786L423 914V851Z" />
|
||||
<glyph unicode="Û" glyph-name="Ucircumflex" horiz-adv-x="661" d="M147 699V259Q147 155 196 105T332 55Q418 55 466 104T515 259V699H585V260Q585 127 515 60T331 -7Q218 -7 148 60T77 260V699H147ZM330 832L196 748V805L330 887L464 805V748L330 832Z" />
|
||||
<glyph unicode="Ü" glyph-name="Udieresis" horiz-adv-x="661" d="M147 699V259Q147 155 196 105T332 55Q418 55 466 104T515 259V699H585V260Q585 127 515 60T331 -7Q218 -7 148 60T77 260V699H147ZM235 767T222 780T208 813Q208 832 221 845T254 859Q273
|
||||
859 286 846T300 813Q300 794 287 781T254 767Q235 767 222 780ZM389 767T376 780T362 813Q362 832 375 845T408 859Q427 859 440 846T453 813Q453 794 440 781T408 767Q389 767 376 780Z" />
|
||||
<glyph unicode="Ý" glyph-name="Yacute" horiz-adv-x="564" d="M542 699L318 272V0H248V272L22 699H101L283 336L464 699H542ZM375 851L170 732V786L375 914V851Z" />
|
||||
<glyph unicode="Þ" glyph-name="Thorn" horiz-adv-x="564" d="M527 260T468 205T291 150H150V0H80V700H149V551H291Q408 551 467 496T527 350Q527 260 468 205ZM376 207T415 244T455 350Q455 494 291 494H150V207H291Q376 207 415 244Z" />
|
||||
<glyph unicode="ß" glyph-name="germandbls" horiz-adv-x="665" d="M66 653T123 710T289 768Q354 768 401 747T472 689T497 609Q497 562 474 531T408 463Q378 437 365 421T351 385Q351 360 375 342T468 302Q539 279 571 242T604 147Q604 76 556 33T424 -10Q340
|
||||
-10 287 37T226 167H297Q302 112 335 80T424 47Q475 47 503 72T532 142Q532 182 508 206T426 249Q346 276 313 304T280 376Q280 411 299 436T356 495Q392 527 409 550T427 604Q427 652 390 680T288 709Q212 709 174 668T136 552V0H66V560Q66 653 123 710Z" />
|
||||
<glyph unicode="à" glyph-name="agrave" horiz-adv-x="675" d="M48 358T81 421T174 519T309 554Q387 554 443 518T525 426V546H595V0H525V121Q499 65 443 29T308 -8Q234 -8 175 27T82 126T48 274Q48 358 81 421ZM525 339T498 389T425 466T322 493Q264 493
|
||||
218 467T146 392T119 274Q119 207 145 157T218 80T322 53Q378 53 424 80T498 157T525 273Q525 339 498 389ZM431 642V588L226 707V770L431 642Z" />
|
||||
<glyph unicode="á" glyph-name="aacute" horiz-adv-x="675" d="M48 358T81 421T174 519T309 554Q387 554 443 518T525 426V546H595V0H525V121Q499 65 443 29T308 -8Q234 -8 175 27T82 126T48 274Q48 358 81 421ZM525 339T498 389T425 466T322 493Q264 493
|
||||
218 467T146 392T119 274Q119 207 145 157T218 80T322 53Q378 53 424 80T498 157T525 273Q525 339 498 389ZM431 707L226 588V642L431 770V707Z" />
|
||||
<glyph unicode="â" glyph-name="acircumflex" horiz-adv-x="675" d="M48 358T81 421T174 519T309 554Q387 554 443 518T525 426V546H595V0H525V121Q499 65 443 29T308 -8Q234 -8 175 27T82 126T48 274Q48 358 81 421ZM525 339T498 389T425 466T322 493Q264
|
||||
493 218 467T146 392T119 274Q119 207 145 157T218 80T322 53Q378 53 424 80T498 157T525 273Q525 339 498 389ZM339 688L205 604V661L339 743L473 661V604L339 688Z" />
|
||||
<glyph unicode="ã" glyph-name="atilde" horiz-adv-x="675" d="M48 358T81 421T174 519T309 554Q387 554 443 518T525 426V546H595V0H525V121Q499 65 443 29T308 -8Q234 -8 175 27T82 126T48 274Q48 358 81 421ZM525 339T498 389T425 466T322 493Q264 493
|
||||
218 467T146 392T119 274Q119 207 145 157T218 80T322 53Q378 53 424 80T498 157T525 273Q525 339 498 389ZM213 651T236 675T295 699Q313 699 326 693T357 674Q372 663 383 658T407 652Q424 652 436 663T451 697H493Q489 653 465 629T404 604Q385 604 372 610T340
|
||||
630Q326 641 316 646T292 651Q256 651 250 606H207Q213 651 236 675Z" />
|
||||
<glyph unicode="ä" glyph-name="adieresis" horiz-adv-x="675" d="M48 358T81 421T174 519T309 554Q387 554 443 518T525 426V546H595V0H525V121Q499 65 443 29T308 -8Q234 -8 175 27T82 126T48 274Q48 358 81 421ZM525 339T498 389T425 466T322 493Q264
|
||||
493 218 467T146 392T119 274Q119 207 145 157T218 80T322 53Q378 53 424 80T498 157T525 273Q525 339 498 389ZM244 623T231 636T217 669Q217 688 230 701T263 715Q282 715 295 702T309 669Q309 650 296 637T263 623Q244 623 231 636ZM398 623T385 636T371 669Q371
|
||||
688 384 701T417 715Q436 715 449 702T462 669Q462 650 449 637T417 623Q398 623 385 636Z" />
|
||||
<glyph unicode="å" glyph-name="aring" horiz-adv-x="675" d="M48 358T81 421T174 519T309 554Q387 554 443 518T525 426V546H595V0H525V121Q499 65 443 29T308 -8Q234 -8 175 27T82 126T48 274Q48 358 81 421ZM525 339T498 389T425 466T322 493Q264 493
|
||||
218 467T146 392T119 274Q119 207 145 157T218 80T322 53Q378 53 424 80T498 157T525 273Q525 339 498 389ZM441 665T412 638T339 610Q296 610 267 637T237 710Q237 755 266 782T339 810Q383 810 412 783T441 710Q441 665 412 638ZM398 738T381 754T339 771Q314
|
||||
771 298 755T281 710Q281 683 297 666T339 649Q364 649 381 666T398 710Q398 738 381 754Z" />
|
||||
<glyph unicode="æ" glyph-name="ae" horiz-adv-x="1108" d="M1061 273T1057 248H596Q600 184 629 140T702 73T796 51Q868 51 916 84T977 173H1053Q1034 93 969 43T807 -8Q733 -8 674 27T588 126V0H527V126Q500 66 443 29T309 -8Q234 -8 175 27T82 126T48
|
||||
274Q48 358 82 421T176 519T312 554Q387 554 443 519T529 423V546H588V422Q620 488 677 521T807 554Q884 554 941 520T1030 429T1061 302Q1061 273 1057 248ZM991 362T965 406T895 472T797 494Q745 494 701 472T628 405T596 300H989Q991 362 965 406ZM378 53T424
|
||||
80T498 157T525 273Q525 339 498 389T425 466T322 493Q264 493 218 467T146 392T119 274Q119 207 145 157T218 80T322 53Q378 53 424 80Z" />
|
||||
<glyph unicode="ç" glyph-name="ccedilla" horiz-adv-x="613" d="M382 51T428 84T489 178H564Q546 99 487 49T336 -7V-67Q395 -65 429 -89T464 -160Q464 -205 432 -231T347 -258H247V-211H333Q370 -211 387 -199T405 -160Q405 -112 333 -112H287V-7Q217 -1
|
||||
163 34T79 131T48 273Q48 358 82 421T176 519T313 554Q414 554 479 504T564 368H489Q475 427 429 460T313 494Q258 494 214 469T145 395T119 273Q119 201 144 151T214 76T313 51Q382 51 428 84Z" />
|
||||
<glyph unicode="è" glyph-name="egrave" horiz-adv-x="622" d="M574 265T572 246H119Q122 184 149 140T220 74T316 51Q384 51 430 84T492 173H566Q546 93 481 43T316 -8Q239 -8 178 26T83 124T48 273Q48 358 82 422T177 520T316 554Q394 554 452 520T542
|
||||
429T574 301Q574 265 572 246ZM504 364T479 407T409 472T313 494Q235 494 180 444T119 303H503Q504 364 479 407ZM403 642V588L198 707V770L403 642Z" />
|
||||
<glyph unicode="é" glyph-name="eacute" horiz-adv-x="622" d="M574 265T572 246H119Q122 184 149 140T220 74T316 51Q384 51 430 84T492 173H566Q546 93 481 43T316 -8Q239 -8 178 26T83 124T48 273Q48 358 82 422T177 520T316 554Q394 554 452 520T542
|
||||
429T574 301Q574 265 572 246ZM504 364T479 407T409 472T313 494Q235 494 180 444T119 303H503Q504 364 479 407ZM403 707L198 588V642L403 770V707Z" />
|
||||
<glyph unicode="ê" glyph-name="ecircumflex" horiz-adv-x="622" d="M574 265T572 246H119Q122 184 149 140T220 74T316 51Q384 51 430 84T492 173H566Q546 93 481 43T316 -8Q239 -8 178 26T83 124T48 273Q48 358 82 422T177 520T316 554Q394 554 452 520T542
|
||||
429T574 301Q574 265 572 246ZM504 364T479 407T409 472T313 494Q235 494 180 444T119 303H503Q504 364 479 407ZM311 688L177 604V661L311 743L445 661V604L311 688Z" />
|
||||
<glyph unicode="ë" glyph-name="edieresis" horiz-adv-x="622" d="M574 265T572 246H119Q122 184 149 140T220 74T316 51Q384 51 430 84T492 173H566Q546 93 481 43T316 -8Q239 -8 178 26T83 124T48 273Q48 358 82 422T177 520T316 554Q394 554 452 520T542
|
||||
429T574 301Q574 265 572 246ZM504 364T479 407T409 472T313 494Q235 494 180 444T119 303H503Q504 364 479 407ZM216 623T203 636T189 669Q189 688 202 701T235 715Q254 715 267 702T281 669Q281 650 268 637T235 623Q216 623 203 636ZM370 623T357 636T343 669Q343
|
||||
688 356 701T389 715Q408 715 421 702T434 669Q434 650 421 637T389 623Q370 623 357 636Z" />
|
||||
<glyph unicode="ì" glyph-name="igrave" horiz-adv-x="229" d="M150 546V0H80V546H150ZM463 642V588L258 707V770L463 642Z" />
|
||||
<glyph unicode="í" glyph-name="iacute" horiz-adv-x="229" d="M150 546V0H80V546H150ZM463 707L258 588V642L463 770V707Z" />
|
||||
<glyph unicode="î" glyph-name="icircumflex" horiz-adv-x="229" d="M150 546V0H80V546H150ZM371 688L237 604V661L371 743L505 661V604L371 688Z" />
|
||||
<glyph unicode="ï" glyph-name="idieresis" horiz-adv-x="229" d="M150 546V0H80V546H150ZM275 623T262 636T248 669Q248 688 261 701T294 715Q313 715 326 702T340 669Q340 650 327 637T294 623Q275 623 262 636ZM429 623T416 636T402 669Q402 688 415 701T448
|
||||
715Q467 715 480 702T493 669Q493 650 480 637T448 623Q429 623 416 636Z" />
|
||||
<glyph unicode="ð" glyph-name="eth" horiz-adv-x="640" d="M521 587T556 500T592 312Q592 208 557 136T461 28T318 -8Q238 -8 177 28T82 129T48 281Q48 363 82 425T176 522T314 556Q382 556 434 525T515 432Q500 493 472 544T397 647L258 599V640L366 677Q343
|
||||
700 294 740H366L418 695L554 742V701L448 664Q521 587 556 500ZM373 51T419 77T493 153T521 273Q521 343 494 394T420 471T319 497Q263 497 218 472T146 398T119 281Q119 209 145 157T216 78T318 51Q373 51 419 77Z" />
|
||||
<glyph unicode="ñ" glyph-name="ntilde" horiz-adv-x="633" d="M434 556T496 496T558 320V0H489V312Q489 401 445 448T323 495Q244 495 197 445T150 298V0H80V546H150V453Q176 503 225 529T336 556Q434 556 496 496ZM184 651T207 675T266 699Q284 699 297
|
||||
693T328 674Q343 663 354 658T378 652Q395 652 407 663T422 697H464Q460 653 436 629T375 604Q356 604 343 610T311 630Q297 641 287 646T263 651Q227 651 221 606H178Q184 651 207 675Z" />
|
||||
<glyph unicode="ò" glyph-name="ograve" horiz-adv-x="642" d="M242 -8T181 26T84 124T48 273Q48 358 84 421T182 519T321 554Q398 554 460 520T558 422T594 273Q594 189 558 125T459 27T319 -8Q242 -8 181 26ZM373 53T419 77T493 151T522 273Q522 345 494
|
||||
394T420 468T320 493Q266 493 220 469T147 395T119 273Q119 201 146 152T219 78T319 53Q373 53 419 77ZM415 647V593L210 712V775L415 647Z" />
|
||||
<glyph unicode="ó" glyph-name="oacute" horiz-adv-x="642" d="M242 -8T181 26T84 124T48 273Q48 358 84 421T182 519T321 554Q398 554 460 520T558 422T594 273Q594 189 558 125T459 27T319 -8Q242 -8 181 26ZM373 53T419 77T493 151T522 273Q522 345 494
|
||||
394T420 468T320 493Q266 493 220 469T147 395T119 273Q119 201 146 152T219 78T319 53Q373 53 419 77ZM415 712L210 593V647L415 775V712Z" />
|
||||
<glyph unicode="ô" glyph-name="ocircumflex" horiz-adv-x="642" d="M242 -8T181 26T84 124T48 273Q48 358 84 421T182 519T321 554Q398 554 460 520T558 422T594 273Q594 189 558 125T459 27T319 -8Q242 -8 181 26ZM373 53T419 77T493 151T522 273Q522 345
|
||||
494 394T420 468T320 493Q266 493 220 469T147 395T119 273Q119 201 146 152T219 78T319 53Q373 53 419 77ZM323 693L189 609V666L323 748L457 666V609L323 693Z" />
|
||||
<glyph unicode="õ" glyph-name="otilde" horiz-adv-x="642" d="M242 -8T181 26T84 124T48 273Q48 358 84 421T182 519T321 554Q398 554 460 520T558 422T594 273Q594 189 558 125T459 27T319 -8Q242 -8 181 26ZM373 53T419 77T493 151T522 273Q522 345 494
|
||||
394T420 468T320 493Q266 493 220 469T147 395T119 273Q119 201 146 152T219 78T319 53Q373 53 419 77ZM197 656T220 680T279 704Q297 704 310 698T341 679Q356 668 367 663T391 657Q408 657 420 668T435 702H477Q473 658 449 634T388 609Q369 609 356 615T324
|
||||
635Q310 646 300 651T276 656Q240 656 234 611H191Q197 656 220 680Z" />
|
||||
<glyph unicode="ö" glyph-name="odieresis" horiz-adv-x="642" d="M242 -8T181 26T84 124T48 273Q48 358 84 421T182 519T321 554Q398 554 460 520T558 422T594 273Q594 189 558 125T459 27T319 -8Q242 -8 181 26ZM373 53T419 77T493 151T522 273Q522 345
|
||||
494 394T420 468T320 493Q266 493 220 469T147 395T119 273Q119 201 146 152T219 78T319 53Q373 53 419 77ZM227 628T214 641T200 674Q200 693 213 706T246 720Q265 720 278 707T292 674Q292 655 279 642T246 628Q227 628 214 641ZM381 628T368 641T354 674Q354
|
||||
693 367 706T400 720Q419 720 432 707T445 674Q445 655 432 642T400 628Q381 628 368 641Z" />
|
||||
<glyph unicode="÷" glyph-name="divide" horiz-adv-x="637" d="M302 534T288 549T273 586Q273 608 287 622T324 637Q345 637 359 623T374 586Q374 564 360 549T324 534Q302 534 288 549ZM576 400V341H67V400H576ZM302 105T288 120T273 157Q273 179 287 193T324
|
||||
208Q345 208 359 194T374 157Q374 135 360 120T324 105Q302 105 288 120Z" />
|
||||
<glyph unicode="ø" glyph-name="oslash" horiz-adv-x="642" d="M525 468Q594 391 594 273Q594 189 558 125T459 27T319 -8Q219 -8 145 50L100 0H47L117 77Q84 114 66 163T48 273Q48 358 84 421T182 519T321 554Q424 554 497 495L544 546H596L525 468ZM119
|
||||
185T162 127L453 446Q399 493 320 493Q266 493 220 469T147 395T119 273Q119 185 162 127ZM522 361T479 417L189 98Q243 53 319 53Q373 53 419 77T493 151T522 273Q522 361 479 417Z" />
|
||||
<glyph unicode="ù" glyph-name="ugrave" horiz-adv-x="633" d="M553 546V0H483V96Q459 45 409 18T297 -9Q199 -9 137 51T75 227V546H144V235Q144 146 188 99T310 52Q389 52 436 102T483 249V546H553ZM409 642V588L204 707V770L409 642Z" />
|
||||
<glyph unicode="ú" glyph-name="uacute" horiz-adv-x="633" d="M553 546V0H483V96Q459 45 409 18T297 -9Q199 -9 137 51T75 227V546H144V235Q144 146 188 99T310 52Q389 52 436 102T483 249V546H553ZM409 707L204 588V642L409 770V707Z" />
|
||||
<glyph unicode="û" glyph-name="ucircumflex" horiz-adv-x="633" d="M553 546V0H483V96Q459 45 409 18T297 -9Q199 -9 137 51T75 227V546H144V235Q144 146 188 99T310 52Q389 52 436 102T483 249V546H553ZM317 688L183 604V661L317 743L451 661V604L317 688Z" />
|
||||
<glyph unicode="ü" glyph-name="udieresis" horiz-adv-x="633" d="M553 546V0H483V96Q459 45 409 18T297 -9Q199 -9 137 51T75 227V546H144V235Q144 146 188 99T310 52Q389 52 436 102T483 249V546H553ZM222 623T209 636T195 669Q195 688 208 701T241 715Q260
|
||||
715 273 702T287 669Q287 650 274 637T241 623Q222 623 209 636ZM376 623T363 636T349 669Q349 688 362 701T395 715Q414 715 427 702T440 669Q440 650 427 637T395 623Q376 623 363 636Z" />
|
||||
<glyph unicode="ý" glyph-name="yacute" horiz-adv-x="545" d="M530 546L206 -257H133L239 3L15 546H92L278 80L458 546H530ZM365 707L160 588V642L365 770V707Z" />
|
||||
<glyph unicode="þ" glyph-name="thorn" horiz-adv-x="675" d="M174 476T230 515T366 554Q440 554 499 520T592 422T626 274Q626 190 593 126T500 27T366 -8Q287 -8 231 31T149 136V-258H80V740H149V412Q174 476 230 515ZM555 342T529 391T456 467T352 493Q296
|
||||
493 250 466T176 389T149 273Q149 207 176 157T249 80T352 53Q410 53 456 79T528 156T555 274Q555 342 529 391Z" />
|
||||
<glyph unicode="ÿ" glyph-name="ydieresis" horiz-adv-x="545" d="M530 546L206 -257H133L239 3L15 546H92L278 80L458 546H530ZM178 623T165 636T151 669Q151 688 164 701T197 715Q216 715 229 702T243 669Q243 650 230 637T197 623Q178 623 165 636ZM332
|
||||
623T319 636T305 669Q305 688 318 701T351 715Q370 715 383 702T396 669Q396 650 383 637T351 623Q332 623 319 636Z" />
|
||||
<glyph unicode="–" glyph-name="endash" horiz-adv-x="649" d="M584 400V341H65V400H584Z" />
|
||||
<glyph unicode="—" glyph-name="emdash" horiz-adv-x="849" d="M784 400V341H65V400H784Z" />
|
||||
<glyph unicode="‘" glyph-name="quoteleft" horiz-adv-x="197" d="M105 483H24L111 699H162L105 483Z" />
|
||||
<glyph unicode="’" glyph-name="quoteright" horiz-adv-x="197" d="M89 699H170L82 483H31L89 699Z" />
|
||||
<glyph unicode="‚" glyph-name="quotesinglbase" horiz-adv-x="160" d="M50 96H131L43 -120H-8L50 96Z" />
|
||||
<glyph unicode="“" glyph-name="quotedblleft" horiz-adv-x="342" d="M105 483H24L111 699H162L105 483ZM250 483H169L257 699H308L250 483Z" />
|
||||
<glyph unicode="”" glyph-name="quotedblright" horiz-adv-x="342" d="M89 699H170L82 483H31L89 699ZM234 699H315L227 483H176L234 699Z" />
|
||||
<glyph unicode="„" glyph-name="quotedblbase" horiz-adv-x="307" d="M50 96H131L43 -120H-8L50 96ZM197 96H278L191 -120H140L197 96Z" />
|
||||
<glyph unicode="•" glyph-name="bullet" horiz-adv-x="366" d="M135 218T101 251T67 333Q67 382 101 415T182 449Q231 449 264 416T298 333Q298 285 265 252T182 218Q135 218 101 251Z" />
|
||||
<glyph unicode="‹" glyph-name="guilsinglleft" horiz-adv-x="265" d="M144 120L45 295L144 470H215L113 295L215 120H144Z" />
|
||||
<glyph unicode="›" glyph-name="guilsinglright" horiz-adv-x="265" d="M152 295L50 470H121L220 295L121 120H50L152 295Z" />
|
||||
</font>
|
||||
</defs>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 51 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,323 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<defs >
|
||||
<font id="Poppins" horiz-adv-x="859" ><font-face
|
||||
font-family="Poppins Medium"
|
||||
units-per-em="1000"
|
||||
panose-1="0 0 6 0 0 0 0 0 0 0"
|
||||
ascent="1050"
|
||||
descent="-350"
|
||||
alphabetic="0" />
|
||||
<glyph unicode=" " glyph-name="space" horiz-adv-x="260" />
|
||||
<glyph unicode="!" glyph-name="exclam" horiz-adv-x="321" d="M218 695L205 210H110L97 695H218ZM130 -7T109 14T88 66Q88 97 109 118T161 139Q191 139 212 118T233 66Q233 35 212 14T161 -7Q130 -7 109 14Z" />
|
||||
<glyph unicode=""" glyph-name="quotedbl" horiz-adv-x="323" d="M137 797L125 592H47L34 797H137ZM288 797L276 592H198L185 797H288Z" />
|
||||
<glyph unicode="#" glyph-name="numbersign" horiz-adv-x="872" d="M658 458L621 285H753V185H600L560 0H451L491 185H295L255 0H146L186 185H31V285H207L244 458H90V558H265L304 740H413L374 558H570L609 740H718L679 558H812V458H658ZM549 458H353L316 285H512L549
|
||||
458Z" />
|
||||
<glyph unicode="$" glyph-name="dollar" horiz-adv-x="650" d="M544 148T520 104T448 30T335 -6V-87H270V-6Q176 3 118 53T60 185H182Q185 146 207 121T270 88V308Q203 325 161 342T90 398T60 502Q60 585 118 639T270 703V784H335V703Q423 695 476 648T537 517H415Q412
|
||||
548 391 572T335 606V390Q402 374 444 357T515 302T544 198Q544 148 520 104ZM176 467T200 444T270 407V609Q227 604 202 578T176 508Q176 467 200 444ZM379 95T404 123T429 192Q429 232 405 254T335 291V88Q379 95 404 123Z" />
|
||||
<glyph unicode="%" glyph-name="percent" horiz-adv-x="794" d="M42 626T84 667T194 709Q261 709 303 668T346 553Q346 480 304 438T194 396Q127 396 85 438T42 553Q42 626 84 667ZM652 696L253 0H141L540 696H652ZM131 640T131 553Q131 465 194 465Q224 465 240
|
||||
486T257 553Q257 640 194 640Q131 640 131 553ZM449 217T491 258T601 300Q667 300 709 259T752 144Q752 71 710 29T601 -13Q534 -13 492 29T449 144Q449 217 491 258ZM537 231T537 144Q537 57 600 57Q663 57 663 144Q663 231 600 231Q537 231 537 144Z" />
|
||||
<glyph unicode="&" glyph-name="ampersand" horiz-adv-x="761" d="M612 0L526 86Q476 36 417 12T285 -13Q211 -13 154 13T66 87T35 200Q35 272 76 328T198 418Q169 453 157 483T145 551Q145 597 168 633T236 690T338 711Q397 711 438 689T500 627T517 540H403Q404
|
||||
577 385 597T333 618Q300 618 280 599T259 551Q259 524 274 498T329 429L513 246L584 363H707L617 209L592 168L761 0H612ZM379 84T451 161L267 346Q149 299 149 204Q149 153 187 119T285 84Q379 84 451 161Z" />
|
||||
<glyph unicode="'" glyph-name="quotesingle" horiz-adv-x="172" d="M137 797L125 592H47L34 797H137Z" />
|
||||
<glyph unicode="(" glyph-name="parenleft" horiz-adv-x="492" d="M229 -92T177 53T124 364Q124 534 180 685T347 934H465V923Q350 817 292 669T234 364Q234 213 288 72T445 -175V-186H327Q229 -92 177 53Z" />
|
||||
<glyph unicode=")" glyph-name="parenright" horiz-adv-x="492" d="M47 -186V-175Q150 -69 204 72T258 364Q258 521 200 669T27 923V934H145Q255 836 311 685T368 364Q368 198 316 53T165 -186H47Z" />
|
||||
<glyph unicode="*" glyph-name="asterisk" horiz-adv-x="504" d="M392 679L437 599L300 548L437 497L391 415L277 505L298 360H206L225 505L111 413L63 498L199 549L63 598L109 680L226 590L206 736H299L277 590L392 679Z" />
|
||||
<glyph unicode="+" glyph-name="plus" horiz-adv-x="714" d="M612 313H410V106H304V313H102V409H304V616H410V409H612V313Z" />
|
||||
<glyph unicode="," glyph-name="comma" horiz-adv-x="225" d="M200 137L79 -139H5L76 137H200Z" />
|
||||
<glyph unicode="-" glyph-name="hyphen" horiz-adv-x="585" d="M498 410V314H87V410H498Z" />
|
||||
<glyph unicode="." glyph-name="period" horiz-adv-x="241" d="M90 -7T69 14T48 66Q48 97 69 118T121 139Q151 139 172 118T193 66Q193 35 172 14T121 -7Q90 -7 69 14Z" />
|
||||
<glyph unicode="/" glyph-name="slash" horiz-adv-x="514" d="M445 944L173 -175H61L332 944H445Z" />
|
||||
<glyph unicode="0" glyph-name="zero" horiz-adv-x="641" d="M60 547T118 644T320 742Q463 742 521 645T580 374Q580 199 522 101T320 2Q177 2 119 100T60 374Q60 547 118 644ZM468 455T458 511T415 602T320 638Q257 638 225 603T183 511T172 374Q172 290 182
|
||||
233T224 141T320 106Q383 106 415 141T458 233T468 374Q468 455 458 511Z" />
|
||||
<glyph unicode="1" glyph-name="one" horiz-adv-x="350" d="M45 625V729H253V0H138V625H45Z" />
|
||||
<glyph unicode="2" glyph-name="two" horiz-adv-x="577" d="M123 155Q219 238 274 291T367 403T404 519Q404 579 376 613T286 647Q227 647 195 610T160 509H50Q53 623 118 683T285 744Q394 744 455 684T517 524Q517 452 481 386T394 267T265 145L220 105H537V10H51V93L123
|
||||
155Z" />
|
||||
<glyph unicode="3" glyph-name="three" horiz-adv-x="594" d="M64 642T129 694T297 746Q367 746 418 721T495 653T521 556Q521 494 488 450T409 391V387Q468 369 501 322T534 200Q534 141 507 95T427 23T300 -4Q192 -4 123 51T48 211H158Q162 158 199 125T299
|
||||
91Q360 91 393 124T426 211Q426 281 382 310T245 340H219V434H246Q327 435 369 461T412 543Q412 591 381 619T293 648Q237 648 206 620T169 549H58Q64 642 129 694Z" />
|
||||
<glyph unicode="4" glyph-name="four" horiz-adv-x="647" d="M46 152V238L382 720H520V251H613V152H520V0H408V152H46ZM413 604L177 251H413V604Z" />
|
||||
<glyph unicode="5" glyph-name="five" horiz-adv-x="639" d="M530 631H195V432Q216 460 257 479T346 498Q430 498 482 462T557 371T580 255Q580 181 552 124T467 33T328 0Q219 0 153 54T74 197H185Q196 150 234 123T329 95Q400 95 435 138T471 252Q471 324 435
|
||||
362T329 401Q280 401 247 377T198 310H90V731H530V631Z" />
|
||||
<glyph unicode="6" glyph-name="six" horiz-adv-x="642" d="M441 606T412 629T331 652Q252 652 213 592T172 391Q198 435 248 459T356 483Q422 483 472 455T551 372T580 243Q580 173 553 118T471 32T341 0Q238 0 180 45T98 174T74 381Q74 747 332 747Q432 747
|
||||
489 693T557 560H452Q441 606 412 629ZM270 387T228 351T185 245Q185 176 224 136T335 95Q398 95 434 134T471 238Q471 306 436 346T331 387Q270 387 228 351Z" />
|
||||
<glyph unicode="7" glyph-name="seven" horiz-adv-x="560" d="M522 641L244 0H129L410 629H40V726H522V641Z" />
|
||||
<glyph unicode="8" glyph-name="eight" horiz-adv-x="638" d="M79 433T79 545Q79 599 106 644T187 715T319 742Q396 742 450 716T532 644T559 545Q559 489 531 447T455 381Q512 360 545 313T578 201Q578 136 545 86T453 9T319 -18Q244 -18 186 9T94 86T61 201Q61
|
||||
266 94 313T183 381Q79 433 79 545ZM450 587T415 617T319 647Q259 647 224 617T189 530Q189 480 225 449T319 417Q376 417 413 449T450 531Q450 587 415 617ZM253 331T212 299T170 205Q170 148 210 113T319 77Q387 77 426 113T466 205Q466 265 426 298T319 331Q253
|
||||
331 212 299Z" />
|
||||
<glyph unicode="9" glyph-name="nine" horiz-adv-x="635" d="M212 148T245 122T334 96Q405 96 438 152T471 343Q447 309 404 291T309 272Q244 272 191 298T108 377T77 505Q77 615 141 680T319 746Q455 746 512 656T570 378Q570 249 549 167T474 43T327 1Q220 1
|
||||
162 57T97 198H202Q212 148 245 122ZM389 368T423 405T458 505Q458 574 422 612T322 651Q259 651 223 612T186 508Q186 447 221 408T329 368Q389 368 423 405Z" />
|
||||
<glyph unicode=":" glyph-name="colon" horiz-adv-x="245" d="M90 -7T69 14T48 66Q48 97 69 118T121 139Q151 139 172 118T193 66Q193 35 172 14T121 -7Q90 -7 69 14ZM90 413T69 434T48 486Q48 517 69 538T121 559Q151 559 172 538T193 486Q193 455 172 434T121
|
||||
413Q90 413 69 434Z" />
|
||||
<glyph unicode=";" glyph-name="semicolon" horiz-adv-x="304" d="M112 413T91 434T70 486Q70 517 91 538T143 559Q173 559 194 538T215 486Q215 455 194 434T143 413Q112 413 91 434ZM227 137L106 -139H32L103 137H227Z" />
|
||||
<glyph unicode="<" glyph-name="less" horiz-adv-x="612" d="M328 134L98 361L328 588H472L241 361L472 134H328Z" />
|
||||
<glyph unicode="=" glyph-name="equal" horiz-adv-x="774" d="M653 523V427H121V523H653ZM653 296V200H121V296H653Z" />
|
||||
<glyph unicode=">" glyph-name="greater" horiz-adv-x="590" d="M112 588H256L486 361L256 134H112L343 361L112 588Z" />
|
||||
<glyph unicode="?" glyph-name="question" horiz-adv-x="538" d="M364 705T425 649T487 496Q487 395 423 344T253 293L249 214H150L145 371H178Q275 371 326 397T378 496Q378 549 348 579T263 609Q209 609 178 580T147 499H40Q40 559 67 606T144 679T262 705Q364
|
||||
705 425 649ZM167 -7T146 14T125 66Q125 97 146 118T198 139Q228 139 249 118T270 66Q270 35 249 14T198 -7Q167 -7 146 14Z" />
|
||||
<glyph unicode="@" glyph-name="at" horiz-adv-x="1025" d="M702 646T785 604T911 487T955 311Q955 231 928 158T849 39T727 -7Q676 -7 647 15T611 79Q580 39 533 16T435 -7Q358 -7 315 39T271 166Q271 242 302 308T391 413T519 453Q606 453 641 394L650 444H749L699
|
||||
158Q696 137 696 121Q696 95 706 82T744 69Q782 69 809 106T849 199T863 306Q863 433 789 500T574 567Q456 567 363 511T216 357T163 139Q163 11 239 -56T456 -123Q551 -123 622 -88L637 -164Q546 -203 433 -203Q324 -203 242 -162T115 -46T70 130Q70 273 136 391T321
|
||||
577T588 646Q702 646 785 604ZM512 81T546 105T601 170T621 257Q621 305 595 335T520 366Q477 366 445 340T395 271T377 183Q377 136 400 109T470 81Q512 81 546 105Z" />
|
||||
<glyph unicode="A" glyph-name="A" horiz-adv-x="697" d="M494 142H203L153 0H34L283 696H415L664 0H544L494 142ZM462 235L349 558L235 235H462Z" />
|
||||
<glyph unicode="B" glyph-name="B" horiz-adv-x="630" d="M503 347T542 298T581 187Q581 134 554 92T474 25T353 0H75V695H340Q411 695 462 671T539 607T565 516Q565 456 533 416T447 357Q503 347 542 298ZM189 403H330Q386 403 417 428T449 502Q449 549 418 575T330
|
||||
602H189V403ZM401 93T434 121T467 199Q467 250 432 280T339 310H189V93H343Q401 93 434 121Z" />
|
||||
<glyph unicode="C" glyph-name="C" horiz-adv-x="773" d="M37 451T84 532T213 658T392 704Q503 704 589 650T715 495H578Q551 550 503 577T392 604Q323 604 269 573T185 484T154 349Q154 272 184 214T269 125T392 93Q455 93 503 120T578 202H715Q676 102 590 48T392
|
||||
-6Q294 -6 213 39T85 166T37 349Q37 451 84 532Z" />
|
||||
<glyph unicode="D" glyph-name="D" horiz-adv-x="709" d="M413 695T496 653T625 531T671 345Q671 239 626 161T497 42T302 0H75V695H302Q413 695 496 653ZM424 93T489 159T554 345Q554 466 489 534T302 602H189V93H302Q424 93 489 159Z" />
|
||||
<glyph unicode="E" glyph-name="E" horiz-adv-x="524" d="M189 603V399H429V306H189V93H459V0H75V696H459V603H189Z" />
|
||||
<glyph unicode="F" glyph-name="F" horiz-adv-x="515" d="M484 695V602H189V397H419V304H189V0H75V695H484Z" />
|
||||
<glyph unicode="G" glyph-name="G" horiz-adv-x="773" d="M578 495Q551 547 503 573T392 600Q323 600 269 569T185 481T154 349Q154 274 184 217T269 128T392 97Q485 97 543 149T614 290H353V381H736V292Q725 211 679 143T558 35T392 -6Q294 -6 213 39T85 166T37
|
||||
349Q37 451 84 532T213 658T392 704Q503 704 589 650T715 495H578Z" />
|
||||
<glyph unicode="H" glyph-name="H" horiz-adv-x="705" d="M630 695V0H516V304H189V0H75V695H189V397H516V695H630Z" />
|
||||
<glyph unicode="I" glyph-name="I" horiz-adv-x="264" d="M189 695V0H75V695H189Z" />
|
||||
<glyph unicode="J" glyph-name="J" horiz-adv-x="564" d="M454 695V194Q454 101 398 47T249 -7Q157 -7 101 47T44 194H159Q160 148 182 121T249 94Q293 94 316 121T339 194V695H454Z" />
|
||||
<glyph unicode="K" glyph-name="K" horiz-adv-x="633" d="M458 0L189 311V0H75V695H189V378L459 695H602L300 347L607 0H458Z" />
|
||||
<glyph unicode="L" glyph-name="L" horiz-adv-x="444" d="M189 92H424V0H75V695H189V92Z" />
|
||||
<glyph unicode="M" glyph-name="M" horiz-adv-x="882" d="M807 695V0H693V476L481 0H402L189 476V0H75V695H198L442 150L685 695H807Z" />
|
||||
<glyph unicode="N" glyph-name="N" horiz-adv-x="721" d="M646 0H532L189 519V0H75V696H189L532 178V696H646V0Z" />
|
||||
<glyph unicode="O" glyph-name="O" horiz-adv-x="784" d="M295 -7T214 38T85 165T37 349Q37 451 84 532T213 658T392 704Q490 704 571 659T700 532T747 349Q747 247 700 166T572 39T392 -7Q295 -7 214 38ZM461 92T515 123T599 213T630 349Q630 426 600 484T515
|
||||
573T392 604Q323 604 269 573T185 484T154 349Q154 272 184 214T269 124T392 92Q461 92 515 123Z" />
|
||||
<glyph unicode="P" glyph-name="P" horiz-adv-x="595" d="M561 435T536 388T456 312T315 282H189V0H75V695H315Q395 695 450 668T533 593T561 488Q561 435 536 388ZM380 375T412 404T444 488Q444 602 315 602H189V375H315Q380 375 412 404Z" />
|
||||
<glyph unicode="Q" glyph-name="Q" horiz-adv-x="787" d="M613 -126L491 6Q446 -7 392 -7Q295 -7 214 38T85 165T37 349Q37 451 84 532T213 658T392 704Q490 704 571 659T700 532T747 349Q747 253 706 176T591 51L758 -126H613ZM154 272T184 214T269 124T392 92Q461
|
||||
92 515 123T599 213T630 349Q630 426 600 484T515 573T392 604Q323 604 269 573T185 484T154 349Q154 272 184 214Z" />
|
||||
<glyph unicode="R" glyph-name="R" horiz-adv-x="632" d="M436 0L276 278H189V0H75V695H315Q395 695 450 667T533 592T561 487Q561 419 522 364T400 288L572 0H436ZM189 369H315Q379 369 411 401T444 487Q444 541 412 571T315 602H189V369Z" />
|
||||
<glyph unicode="S" glyph-name="S" horiz-adv-x="604" d="M234 -7T178 17T90 87T58 192H180Q184 147 215 118T304 89Q363 89 396 117T429 191Q429 226 409 248T358 282T273 308Q205 326 163 344T90 402T60 506Q60 566 90 611T174 680T299 704Q400 704 464 654T536
|
||||
515H410Q407 553 374 580T287 607Q238 607 207 582T176 510Q176 478 195 458T245 425T327 399Q396 380 439 361T513 303T544 197Q544 144 516 97T433 22T304 -7Q234 -7 178 17Z" />
|
||||
<glyph unicode="T" glyph-name="T" horiz-adv-x="564" d="M524 695V602H339V0H225V602H39V695H524Z" />
|
||||
<glyph unicode="U" glyph-name="U" horiz-adv-x="690" d="M188 695V252Q188 173 229 133T345 93Q420 93 461 133T503 252V695H617V254Q617 169 580 110T481 22T344 -7Q269 -7 208 22T110 110T74 254V695H188Z" />
|
||||
<glyph unicode="V" glyph-name="V" horiz-adv-x="694" d="M674 695L413 0H281L19 695H141L347 117L554 695H674Z" />
|
||||
<glyph unicode="W" glyph-name="W" horiz-adv-x="999" d="M980 695L774 0H645L499 526L344 0L216 -1L19 695H140L284 129L440 695H568L713 132L858 695H980Z" />
|
||||
<glyph unicode="X" glyph-name="X" horiz-adv-x="660" d="M394 347L610 0H482L325 252L178 0H51L267 347L50 695H178L336 441L484 695H611L394 347Z" />
|
||||
<glyph unicode="Y" glyph-name="Y" horiz-adv-x="605" d="M590 695L360 252V0H246V252L15 695H142L303 354L464 695H590Z" />
|
||||
<glyph unicode="Z" glyph-name="Z" horiz-adv-x="558" d="M185 99H508V0H50V89L372 596H50V695H508V606L185 99Z" />
|
||||
<glyph unicode="[" glyph-name="bracketleft" horiz-adv-x="485" d="M356 934V840H255V-91H356V-186H148V934H356Z" />
|
||||
<glyph unicode="\" glyph-name="backslash" horiz-adv-x="717" d="M464 -175L164 944H276L576 -175H464Z" />
|
||||
<glyph unicode="]" glyph-name="bracketright" horiz-adv-x="484" d="M336 -186H128V-91H229V840H128V934H336V-186Z" />
|
||||
<glyph unicode="^" glyph-name="asciicircum" horiz-adv-x="654" d="M154 168H36L273 696H381L619 168H500L328 558L154 168Z" />
|
||||
<glyph unicode="_" glyph-name="underscore" horiz-adv-x="798" d="M684 -40V-146H126V-40H684Z" />
|
||||
<glyph unicode="`" glyph-name="grave" horiz-adv-x="254" d="M231 674V590L10 699V796L231 674Z" />
|
||||
<glyph unicode="a" glyph-name="a" horiz-adv-x="678" d="M37 361T71 425T165 524T297 560Q362 560 410 535T488 471V551H603V0H488V82Q459 43 409 17T295 -9Q224 -9 165 27T72 129T37 278Q37 361 71 425ZM488 333T465 375T403 439T321 461Q277 461 239 440T178
|
||||
377T154 278Q154 221 177 178T239 113T321 90Q365 90 403 112T464 176T488 276Q488 333 465 375Z" />
|
||||
<glyph unicode="b" glyph-name="b" horiz-adv-x="678" d="M218 509T268 534T381 560Q454 560 513 525T606 426T640 278Q640 195 606 130T513 28T381 -9Q317 -9 268 16T189 80V0H75V740H189V469Q218 509 268 534ZM524 335T501 376T439 439T356 461Q313 461 275
|
||||
439T213 375T189 276Q189 219 212 177T274 112T356 90Q400 90 438 112T500 178T524 278Q524 335 501 376Z" />
|
||||
<glyph unicode="c" glyph-name="c" horiz-adv-x="600" d="M37 361T71 425T167 525T307 560Q407 560 472 513T561 377H438Q423 418 390 441T307 464Q237 464 196 415T154 276Q154 187 195 137T307 87Q406 87 438 174H561Q537 90 471 41T307 -9Q228 -9 167 26T72
|
||||
126T37 276Q37 361 71 425Z" />
|
||||
<glyph unicode="d" glyph-name="d" horiz-adv-x="678" d="M37 361T71 425T165 524T298 560Q352 560 404 537T488 474V740H603V0H488V83Q460 43 411 17T297 -9Q225 -9 166 27T72 129T37 278Q37 361 71 425ZM488 333T465 375T403 439T321 461Q277 461 239 440T178
|
||||
377T154 278Q154 221 177 178T239 113T321 90Q365 90 403 112T464 176T488 276Q488 333 465 375Z" />
|
||||
<glyph unicode="e" glyph-name="e" horiz-adv-x="617" d="M580 258T576 233H155Q160 167 204 127T312 87Q404 87 442 164H565Q540 88 475 40T312 -9Q233 -9 171 26T73 126T37 276Q37 361 71 425T168 525T312 560Q390 560 451 526T546 431T580 289Q580 258 576
|
||||
233ZM461 325Q460 388 416 426T307 464Q248 464 206 427T156 325H461Z" />
|
||||
<glyph unicode="f" glyph-name="f" horiz-adv-x="332" d="M306 458H204V0H89V458H24V551H89V590Q89 685 139 728T298 772V677Q246 677 225 658T204 590V551H306V458Z" />
|
||||
<glyph unicode="g" glyph-name="g" horiz-adv-x="678" d="M361 560T410 535T488 471V551H603V-9Q603 -85 571 -144T479 -238T334 -272Q222 -272 148 -220T64 -77H177Q190 -120 232 -146T334 -173Q403 -173 445 -131T488 -9V83Q459 44 410 18T297 -9Q225 -9 166
|
||||
27T72 129T37 278Q37 361 71 425T165 524T297 560Q361 560 410 535ZM488 333T465 375T403 439T321 461Q277 461 239 440T178 377T154 278Q154 221 177 178T239 113T321 90Q365 90 403 112T464 176T488 276Q488 333 465 375Z" />
|
||||
<glyph unicode="h" glyph-name="h" horiz-adv-x="649" d="M423 560T472 533T550 453T579 325V0H466V308Q466 382 429 421T328 461Q264 461 227 422T189 308V0H75V740H189V487Q218 522 262 541T360 560Q423 560 472 533Z" />
|
||||
<glyph unicode="i" glyph-name="i" horiz-adv-x="264" d="M102 624T81 645T60 697Q60 728 81 749T133 770Q163 770 184 749T205 697Q205 666 184 645T133 624Q102 624 81 645ZM189 551V0H75V551H189Z" />
|
||||
<glyph unicode="j" glyph-name="j" horiz-adv-x="264" d="M102 624T81 645T60 697Q60 728 81 749T133 770Q163 770 184 749T205 697Q205 666 184 645T133 624Q102 624 81 645ZM189 -108Q189 -189 149 -225T31 -262H-28V-166H11Q46 -166 60 -153T75 -108V551H189V-108Z" />
|
||||
<glyph unicode="k" glyph-name="k" horiz-adv-x="554" d="M293 275L547 0H393L189 237V0H75V740H189V310L389 551H547L293 275Z" />
|
||||
<glyph unicode="l" glyph-name="l" horiz-adv-x="264" d="M189 740V0H75V740H189Z" />
|
||||
<glyph unicode="m" glyph-name="m" horiz-adv-x="1039" d="M807 560T858 533T939 453T969 325V0H856V308Q856 382 819 421T718 461Q654 461 617 422T579 308V0H466V308Q466 382 429 421T328 461Q264 461 227 422T189 308V0H75V551H189V488Q217 522 260 541T352
|
||||
560Q418 560 470 532T550 451Q575 501 628 530T742 560Q807 560 858 533Z" />
|
||||
<glyph unicode="n" glyph-name="n" horiz-adv-x="649" d="M418 560T469 533T550 453T579 325V0H466V308Q466 382 429 421T328 461Q264 461 227 422T189 308V0H75V551H189V488Q217 522 260 541T353 560Q418 560 469 533Z" />
|
||||
<glyph unicode="o" glyph-name="o" horiz-adv-x="638" d="M236 -9T173 26T74 126T38 276Q38 360 75 425T176 525T319 560Q398 560 462 525T563 425T600 276Q600 192 562 127T459 27T314 -9Q236 -9 173 26ZM358 90T396 111T459 174T483 276Q483 336 460 377T399
|
||||
440T317 461Q273 461 236 440T176 378T154 276Q154 187 199 139T314 90Q358 90 396 111Z" />
|
||||
<glyph unicode="p" glyph-name="p" horiz-adv-x="678" d="M218 508T268 534T381 560Q453 560 512 525T606 425T640 278Q640 195 606 130T513 28T381 -9Q318 -9 269 16T189 80V-262H75V551H189V470Q218 508 268 534ZM524 335T501 376T439 439T356 461Q313 461 275
|
||||
439T213 375T189 276Q189 219 212 177T274 112T356 90Q400 90 438 112T500 178T524 278Q524 335 501 376Z" />
|
||||
<glyph unicode="q" glyph-name="q" horiz-adv-x="678" d="M37 361T71 425T165 524T298 560Q362 560 411 534T488 471V551H603V-262H488V80Q461 43 410 17T294 -9Q223 -9 165 27T72 129T37 278Q37 361 71 425ZM488 333T465 375T403 439T321 461Q277 461 239 440T178
|
||||
377T154 278Q154 221 177 178T239 113T321 90Q365 90 403 112T464 176T488 276Q488 333 465 375Z" />
|
||||
<glyph unicode="r" glyph-name="r" horiz-adv-x="384" d="M214 513T255 536T354 560V442H325Q258 442 224 408T189 290V0H75V551H189V471Q214 513 255 536Z" />
|
||||
<glyph unicode="s" glyph-name="s" horiz-adv-x="534" d="M210 -9T159 14T77 78T45 169H163Q166 134 196 111T273 87Q321 87 347 105T374 153Q374 184 345 199T251 232Q189 249 150 265T83 314T54 401Q54 445 80 481T154 539T266 560Q360 560 417 513T479 383H365Q362
|
||||
420 335 442T262 464Q217 464 193 447T169 402Q169 380 185 365T224 342T292 320Q352 304 390 288T457 239T486 154Q486 107 460 70T387 12T275 -9Q210 -9 159 14Z" />
|
||||
<glyph unicode="t" glyph-name="t" horiz-adv-x="372" d="M208 458V153Q208 122 222 109T272 95H342V0H252Q175 0 134 36T93 153V458H28V551H93V688H208V551H342V458H208Z" />
|
||||
<glyph unicode="u" glyph-name="u" horiz-adv-x="649" d="M574 551V0H460V65Q433 31 390 12T297 -8Q232 -8 181 19T100 99T70 227V551H183V244Q183 170 220 131T321 91Q385 91 422 130T460 244V551H574Z" />
|
||||
<glyph unicode="v" glyph-name="v" horiz-adv-x="576" d="M288 102L444 551H565L355 0H219L10 551H132L288 102Z" />
|
||||
<glyph unicode="w" glyph-name="w" horiz-adv-x="825" d="M815 551L644 0H524L413 407L302 0H182L10 551H126L241 108L358 551H477L589 110L703 551H815Z" />
|
||||
<glyph unicode="x" glyph-name="x" horiz-adv-x="499" d="M311 279L489 0H360L241 187L129 0H10L188 271L10 551H139L258 364L370 551H489L311 279Z" />
|
||||
<glyph unicode="y" glyph-name="y" horiz-adv-x="582" d="M571 551L233 -259H115L227 9L10 551H137L292 131L453 551H571Z" />
|
||||
<glyph unicode="z" glyph-name="z" horiz-adv-x="471" d="M176 93H426V0H44V93L295 458H44V551H426V458L176 93Z" />
|
||||
<glyph unicode="{" glyph-name="braceleft" horiz-adv-x="516" d="M126 417Q174 422 199 446T225 509Q225 545 217 641Q208 731 208 785Q208 856 249 896T359 936H426V837H382Q350 837 335 823T319 776Q319 752 322 712T326 655Q335 563 335 505Q335 454 310 420T231
|
||||
375V373Q284 362 309 328T335 243Q335 185 326 93Q325 76 322 36T319 -28Q319 -60 334 -74T382 -89H426V-188H359Q291 -188 250 -148T208 -37Q208 17 217 107Q225 203 225 239Q225 278 200 302T126 331V417Z" />
|
||||
<glyph unicode="|" glyph-name="bar" horiz-adv-x="324" d="M219 -113H105V801H219V-113Z" />
|
||||
<glyph unicode="}" glyph-name="braceright" horiz-adv-x="516" d="M342 326T317 302T291 239Q291 203 299 107Q308 17 308 -37Q308 -108 267 -148T157 -188H90V-89H134Q166 -89 181 -75T197 -28Q197 -4 194 36T190 93Q181 185 181 243Q181 294 206 328T285 373V375Q232
|
||||
386 207 420T181 505Q181 563 190 655Q191 672 194 712T197 776Q197 808 182 822T134 837H90V936H157Q225 936 266 896T308 785Q308 731 299 641Q291 545 291 509Q291 470 316 446T390 417V331Q342 326 317 302Z" />
|
||||
<glyph unicode="~" glyph-name="asciitilde" horiz-adv-x="553" d="M51 322T92 362T195 403Q223 403 244 394T294 367Q319 352 333 345T366 338Q391 338 410 354T434 401H517Q502 317 461 277T357 236Q329 236 308 245T259 272Q237 287 221 294T187 301Q161 301
|
||||
142 285T118 238H36Q51 322 92 362Z" />
|
||||
<glyph unicode=" " glyph-name="uni00A0" horiz-adv-x="260" />
|
||||
<glyph unicode="¡" glyph-name="exclamdown" horiz-adv-x="321" d="M191 567T212 546T233 494Q233 463 212 442T161 421Q130 421 109 442T88 494Q88 525 109 546T161 567Q191 567 212 546ZM110 350H205L218 -135H97L110 350Z" />
|
||||
<glyph unicode="¢" glyph-name="cent" horiz-adv-x="690" d="M383 92T415 113T459 174H565Q557 104 502 56T361 -1V-88H296V-1Q185 9 126 81T66 259Q66 365 125 437T296 520V607H361V520Q447 511 502 463T565 345H459Q447 384 415 405T329 427Q258 427 216
|
||||
382T174 259Q174 181 216 137T329 92Q383 92 415 113Z" />
|
||||
<glyph unicode="£" glyph-name="sterling" horiz-adv-x="646" d="M558 91V-2H95L75 60Q117 105 137 149T157 260Q157 280 152 302H42V381H127Q106 444 106 503Q106 570 135 619T215 694T333 721Q440 721 495 661T552 508H448Q448 562 420 593T333 625Q279
|
||||
625 247 594T214 497Q214 468 220 441T237 381H431V302H260Q265 279 265 259Q265 162 198 91H558Z" />
|
||||
<glyph unicode="¤" glyph-name="currency" horiz-adv-x="548" d="M460 317T429 274L488 215L438 164L376 225Q332 199 272 199Q215 199 171 224L111 164L60 215L118 274Q89 317 89 377Q89 439 120 482L60 541L111 592L173 530Q218 555 274 555Q331 555 376
|
||||
530L438 592L488 541L429 482Q460 437 460 377Q460 317 429 274ZM310 270T337 298T365 377Q365 428 338 456T273 485Q235 485 209 457T183 377Q183 326 208 298T272 270Q310 270 337 298Z" />
|
||||
<glyph unicode="¥" glyph-name="yen" horiz-adv-x="605" d="M434 395H560V313L391 311L360 252V222H560V140H360V0H246V140H46V222H246V252L215 311L46 313V395H171L15 695H142L302 356L462 695H590L434 395Z" />
|
||||
<glyph unicode="¦" glyph-name="brokenbar" horiz-adv-x="324" d="M105 801H219V413H105V801ZM219 -113H105V275H219V-113Z" />
|
||||
<glyph unicode="§" glyph-name="section" horiz-adv-x="578" d="M458 59T481 29T504 -46Q504 -91 478 -129T404 -189T290 -212Q197 -212 139 -169T80 -47H194Q197 -87 221 -110T290 -133Q338 -133 364 -114T390 -56Q390 -33 377 -17T331 16T233 56Q135 91
|
||||
88 134T41 244Q41 298 72 340T164 404Q121 429 98 459T74 534Q74 579 100 617T174 677T288 700Q381 700 439 657T498 535H384Q381 575 357 598T288 621Q240 621 214 602T188 544Q188 521 201 505T247 472T345 432Q443 397 490 354T537 244Q537 191 507 150T415
|
||||
84Q458 59 481 29ZM158 201T194 171T291 140Q350 140 385 170T420 244Q420 288 384 318T288 348Q229 348 194 318T158 244Q158 201 194 171Z" />
|
||||
<glyph unicode="¨" glyph-name="dieresis" horiz-adv-x="312" d="M45 620T28 637T10 680Q10 705 27 722T70 740Q95 740 112 723T130 680Q130 655 113 638T70 620Q45 620 28 637ZM217 620T200 637T182 680Q182 705 199 722T242 740Q267 740 284 723T302 680Q302
|
||||
655 285 638T242 620Q217 620 200 637Z" />
|
||||
<glyph unicode="©" glyph-name="copyright" horiz-adv-x="789" d="M497 704T576 659T699 532T743 348Q743 245 699 164T576 37T395 -9Q293 -9 214 36T90 163T46 348Q46 451 90 532T213 658T395 704Q497 704 576 659ZM304 658T237 620T133 512T96 348Q96 255
|
||||
132 185T236 76T395 37Q485 37 552 76T656 185T693 348Q693 441 657 511T553 620T395 658Q304 658 237 620ZM331 578T281 550T203 469T174 349Q174 281 203 229T281 148T392 119Q468 119 523 159T597 266H493Q480 234 456 217T392 200Q339 200 307 238T275 349Q275
|
||||
421 307 459T392 497Q430 497 456 480T493 431H597Q578 501 524 539T392 578Q331 578 281 550Z" />
|
||||
<glyph unicode="ª" glyph-name="ordfeminine" horiz-adv-x="456" d="M31 582T53 622T114 686T199 709Q242 709 274 694T325 655V703H414V353H325V399Q308 376 276 362T202 347Q154 347 115 370T54 436T31 530Q31 582 53 622ZM123 477T153 447T224 416Q266
|
||||
416 295 446T325 528Q325 580 296 610T224 640Q183 640 153 611T123 529Q123 477 153 447Z" />
|
||||
<glyph unicode="«" glyph-name="guillemotleft" horiz-adv-x="489" d="M137 120L45 295L137 470H247L151 295L247 120H137ZM329 120L237 295L329 470H439L343 295L439 120H329Z" />
|
||||
<glyph unicode="¬" glyph-name="logicalnot" horiz-adv-x="649" d="M605 435V208H491V346H37V435H605Z" />
|
||||
<glyph unicode="­" glyph-name="uni00AD" horiz-adv-x="585" d="M498 410V314H87V410H498Z" />
|
||||
<glyph unicode="®" glyph-name="registered" horiz-adv-x="517" d="M319 705T366 678T440 604T467 496Q467 436 441 389T367 314T259 287Q199 287 152 314T77 388T50 496Q50 556 77 603T151 678T259 705Q319 705 366 678ZM331 333T374 378T418 496Q418 569
|
||||
375 614T259 659Q186 659 143 614T100 496Q100 423 143 378T259 333Q331 333 374 378ZM351 514T340 498T310 473L363 391H287L243 466H236V391H173V606H274Q309 606 330 587T351 536Q351 514 340 498ZM236 517H270Q278 517 283 521T289 534Q289 542 284 546T270
|
||||
550H236V517Z" />
|
||||
<glyph unicode="¯" glyph-name="overscore" horiz-adv-x="386" d="M376 720V635H10V720H376Z" />
|
||||
<glyph unicode="°" glyph-name="degree" horiz-adv-x="427" d="M28 605T80 653T214 702Q267 702 309 681T375 619T399 525Q399 472 375 432T307 369T211 347Q129 347 79 396T28 525Q28 605 80 653ZM308 578T280 607T212 637Q173 637 146 608T118 525Q118
|
||||
471 144 443T211 414Q251 414 279 443T308 525Q308 578 280 607Z" />
|
||||
<glyph unicode="±" glyph-name="plusminus" horiz-adv-x="717" d="M412 372V223H613V127H104V223H306V372H104V468H306V621H412V468H613V372H412Z" />
|
||||
<glyph unicode="²" glyph-name="twosuperior" horiz-adv-x="340" d="M298 424V352H29V418L137 497Q170 523 186 545T203 593Q203 616 191 629T159 643Q141 643 130 633T117 605H27Q29 653 64 682T162 711Q203 711 233 695T280 653T297 597Q297 561 276 533T203
|
||||
471L130 424H298Z" />
|
||||
<glyph unicode="³" glyph-name="threesuperior" horiz-adv-x="342" d="M26 654T65 682T166 711Q204 711 236 697T287 659T306 606Q306 576 289 557T245 529V527Q273 517 291 497T309 446Q309 404 268 376T162 347Q98 347 59 376T18 457H106Q110 435 124 424T161
|
||||
413Q184 413 198 425T213 458Q213 478 198 489T159 501H122V559H156Q181 559 195 570T210 601Q210 621 197 632T159 644Q117 644 107 609H22Q26 654 65 682Z" />
|
||||
<glyph unicode="´" glyph-name="acute" horiz-adv-x="241" d="M231 699L10 590V674L231 796V699Z" />
|
||||
<glyph unicode="µ" glyph-name="uni00B5" horiz-adv-x="654" d="M579 551V0H465V87Q438 40 393 16T289 -8Q229 -8 188 23V-262H75V551H188V243Q188 169 225 130T326 90Q390 90 427 129T465 243V551H579Z" />
|
||||
<glyph unicode="¶" glyph-name="paragraph" horiz-adv-x="630" d="M555 0H454V606H387V0H286V282H272Q154 282 95 339T35 488Q35 579 95 637T272 695H555V0Z" />
|
||||
<glyph unicode="·" glyph-name="middot" horiz-adv-x="244" d="M94 262T73 283T52 335Q52 366 73 387T125 408Q155 408 176 387T197 335Q197 304 176 283T125 262Q94 262 73 283Z" />
|
||||
<glyph unicode="¸" glyph-name="cedilla" horiz-adv-x="279" d="M197 -48T233 -75T269 -153Q269 -203 233 -232T142 -262H10V-190H119Q147 -190 161 -182T175 -153Q175 -132 161 -124T119 -116H64V7H139V-48Q197 -48 233 -75Z" />
|
||||
<glyph unicode="¹" glyph-name="onesuperior" horiz-adv-x="209" d="M20 636V704H163V352H74V636H20Z" />
|
||||
<glyph unicode="º" glyph-name="ordmasculine" horiz-adv-x="444" d="M31 582T56 623T124 686T222 709Q276 709 319 687T388 624T413 528Q413 475 388 434T318 370T220 347Q166 347 123 369T56 433T31 528Q31 582 56 623ZM321 580T292 610T221 640Q180 640
|
||||
152 611T123 527Q123 475 151 446T220 417Q261 417 291 446T321 527Q321 580 292 610Z" />
|
||||
<glyph unicode="»" glyph-name="guillemotright" horiz-adv-x="489" d="M145 295L50 470H159L252 295L159 120H50L145 295ZM337 295L242 470H351L444 295L351 120H242L337 295Z" />
|
||||
<glyph unicode="¼" glyph-name="onequarter" horiz-adv-x="682" d="M34 636V704H177V352H88V636H34ZM553 696L171 0H63L446 696H553ZM643 67H598V0H509V67H323V117L474 353H598V123H643V67ZM511 285L412 123H511V285Z" />
|
||||
<glyph unicode="½" glyph-name="onehalf" horiz-adv-x="701" d="M88 636H34V704H177V352H88V636ZM542 696L171 0H63L434 696H542ZM657 71V-1H388V65L496 144Q529 170 545 192T562 240Q562 263 550 276T518 290Q500 290 489 280T476 252H386Q388 300 423 329T521
|
||||
358Q562 358 592 342T639 300T656 244Q656 208 635 180T562 118L489 71H657Z" />
|
||||
<glyph unicode="¾" glyph-name="threequarters" horiz-adv-x="742" d="M41 654T80 682T181 711Q219 711 251 697T302 659T321 606Q321 576 304 557T260 529V527Q288 517 306 497T324 446Q324 404 283 376T177 347Q113 347 74 376T33 457H121Q125 435 139
|
||||
424T176 413Q199 413 213 425T228 458Q228 478 213 489T174 501H137V559H171Q196 559 210 570T225 601Q225 621 212 632T174 644Q132 644 122 609H37Q41 654 80 682ZM648 696L246 0H139L541 696H648ZM716 67H671V0H582V67H396V117L547 353H671V123H716V67ZM584
|
||||
285L485 123H584V285Z" />
|
||||
<glyph unicode="¿" glyph-name="questiondown" horiz-adv-x="538" d="M371 561T392 540T413 488Q413 457 392 436T340 415Q310 415 289 436T268 488Q268 519 289 540T340 561Q371 561 392 540ZM174 -151T113 -95T51 58Q51 159 115 210T285 261L289 340H388L393
|
||||
183H360Q263 183 212 157T160 58Q160 5 190 -25T275 -55Q329 -55 360 -26T391 55H498Q498 -5 471 -52T394 -125T276 -151Q174 -151 113 -95Z" />
|
||||
<glyph unicode="À" glyph-name="Agrave" horiz-adv-x="697" d="M494 142H203L153 0H34L283 696H415L664 0H544L494 142ZM462 235L349 558L235 235H462ZM452 819V735L231 844V941L452 819Z" />
|
||||
<glyph unicode="Á" glyph-name="Aacute" horiz-adv-x="697" d="M494 142H203L153 0H34L283 696H415L664 0H544L494 142ZM462 235L349 558L235 235H462ZM452 844L231 735V819L452 941V844Z" />
|
||||
<glyph unicode="Â" glyph-name="Acircumflex" horiz-adv-x="697" d="M494 142H203L153 0H34L283 696H415L664 0H544L494 142ZM462 235L349 558L235 235H462ZM349 821L206 735V824L349 907L492 824V735L349 821Z" />
|
||||
<glyph unicode="Ã" glyph-name="Atilde" horiz-adv-x="697" d="M494 142H203L153 0H34L283 696H415L664 0H544L494 142ZM462 235L349 558L235 235H462ZM194 811T224 840T299 870Q318 870 332 864T366 846Q381 836 391 831T415 826Q432 826 443 836T458 868H522Q514
|
||||
810 484 781T409 751Q390 751 375 757T342 776Q324 787 315 791T293 796Q276 796 265 785T250 753H186Q194 811 224 840Z" />
|
||||
<glyph unicode="Ä" glyph-name="Adieresis" horiz-adv-x="697" d="M494 142H203L153 0H34L283 696H415L664 0H544L494 142ZM462 235L349 558L235 235H462ZM238 765T221 782T203 825Q203 850 220 867T263 885Q288 885 305 868T323 825Q323 800 306 783T263
|
||||
765Q238 765 221 782ZM410 765T393 782T375 825Q375 850 392 867T435 885Q460 885 477 868T495 825Q495 800 478 783T435 765Q410 765 393 782Z" />
|
||||
<glyph unicode="Å" glyph-name="Aring" horiz-adv-x="697" d="M494 142H203L153 0H34L283 696H415L664 0H544L494 142ZM462 235L349 558L235 235H462ZM462 810T430 780T349 750Q302 750 270 780T237 859Q237 909 269 939T349 969Q397 969 429 939T462 859Q462
|
||||
810 430 780ZM398 883T384 897T349 911Q329 911 315 897T301 860Q301 838 315 824T349 809Q370 809 384 823T398 860Q398 883 384 897Z" />
|
||||
<glyph unicode="Æ" glyph-name="AE" horiz-adv-x="921" d="M586 607V396H825V308H586V89H855V0H472V142H213L136 0H12L395 696H855V607H586ZM472 231V617L262 231H472Z" />
|
||||
<glyph unicode="Ç" glyph-name="Ccedilla" horiz-adv-x="773" d="M455 93T503 120T578 202H715Q679 110 603 57T427 -5V-48Q485 -48 521 -75T557 -153Q557 -203 521 -232T430 -262H298V-190H407Q435 -190 449 -182T463 -153Q463 -132 449 -124T407 -116H352V-4Q264
|
||||
5 192 52T79 176T37 349Q37 451 84 532T213 658T392 704Q503 704 589 650T715 495H578Q551 550 503 577T392 604Q323 604 269 573T185 484T154 349Q154 272 184 214T269 125T392 93Q455 93 503 120Z" />
|
||||
<glyph unicode="È" glyph-name="Egrave" horiz-adv-x="524" d="M189 603V399H429V306H189V93H459V0H75V696H459V603H189ZM365 819V735L144 844V941L365 819Z" />
|
||||
<glyph unicode="É" glyph-name="Eacute" horiz-adv-x="524" d="M189 603V399H429V306H189V93H459V0H75V696H459V603H189ZM365 844L144 735V819L365 941V844Z" />
|
||||
<glyph unicode="Ê" glyph-name="Ecircumflex" horiz-adv-x="524" d="M189 603V399H429V306H189V93H459V0H75V696H459V603H189ZM262 821L119 735V824L262 907L405 824V735L262 821Z" />
|
||||
<glyph unicode="Ë" glyph-name="Edieresis" horiz-adv-x="524" d="M189 603V399H429V306H189V93H459V0H75V696H459V603H189ZM151 765T134 782T116 825Q116 850 133 867T176 885Q201 885 218 868T236 825Q236 800 219 783T176 765Q151 765 134 782ZM323 765T306
|
||||
782T288 825Q288 850 305 867T348 885Q373 885 390 868T408 825Q408 800 391 783T348 765Q323 765 306 782Z" />
|
||||
<glyph unicode="Ì" glyph-name="Igrave" horiz-adv-x="264" d="M189 695V0H75V695H189ZM235 819V735L14 844V941L235 819Z" />
|
||||
<glyph unicode="Í" glyph-name="Iacute" horiz-adv-x="264" d="M189 695V0H75V695H189ZM235 844L14 735V819L235 941V844Z" />
|
||||
<glyph unicode="Î" glyph-name="Icircumflex" horiz-adv-x="264" d="M189 695V0H75V695H189ZM132 821L-11 735V824L132 907L275 824V735L132 821Z" />
|
||||
<glyph unicode="Ï" glyph-name="Idieresis" horiz-adv-x="264" d="M189 695V0H75V695H189ZM21 765T4 782T-14 825Q-14 850 3 867T46 885Q71 885 88 868T106 825Q106 800 89 783T46 765Q21 765 4 782ZM193 765T176 782T158 825Q158 850 175 867T218 885Q243
|
||||
885 260 868T278 825Q278 800 261 783T218 765Q193 765 176 782Z" />
|
||||
<glyph unicode="Ð" glyph-name="Eth" horiz-adv-x="720" d="M425 695T508 653T636 531T682 345Q682 239 637 161T508 42T314 0H86V293H9V398H86V695H314Q425 695 508 653ZM435 87T500 156T565 345Q565 466 500 534T314 603H201V398H379V293H201V87H314Q435
|
||||
87 500 156Z" />
|
||||
<glyph unicode="Ñ" glyph-name="Ntilde" horiz-adv-x="721" d="M646 0H532L189 519V0H75V696H189L532 178V696H646V0ZM206 811T236 840T311 870Q330 870 344 864T378 846Q393 836 403 831T427 826Q444 826 455 836T470 868H534Q526 810 496 781T421 751Q402
|
||||
751 387 757T354 776Q336 787 327 791T305 796Q288 796 277 785T262 753H198Q206 811 236 840Z" />
|
||||
<glyph unicode="Ò" glyph-name="Ograve" horiz-adv-x="784" d="M295 -7T214 38T85 165T37 349Q37 451 84 532T213 658T392 704Q490 704 571 659T700 532T747 349Q747 247 700 166T572 39T392 -7Q295 -7 214 38ZM461 92T515 123T599 213T630 349Q630 426 600
|
||||
484T515 573T392 604Q323 604 269 573T185 484T154 349Q154 272 184 214T269 124T392 92Q461 92 515 123ZM495 819V735L274 844V941L495 819Z" />
|
||||
<glyph unicode="Ó" glyph-name="Oacute" horiz-adv-x="784" d="M295 -7T214 38T85 165T37 349Q37 451 84 532T213 658T392 704Q490 704 571 659T700 532T747 349Q747 247 700 166T572 39T392 -7Q295 -7 214 38ZM461 92T515 123T599 213T630 349Q630 426 600
|
||||
484T515 573T392 604Q323 604 269 573T185 484T154 349Q154 272 184 214T269 124T392 92Q461 92 515 123ZM495 844L274 735V819L495 941V844Z" />
|
||||
<glyph unicode="Ô" glyph-name="Ocircumflex" horiz-adv-x="784" d="M295 -7T214 38T85 165T37 349Q37 451 84 532T213 658T392 704Q490 704 571 659T700 532T747 349Q747 247 700 166T572 39T392 -7Q295 -7 214 38ZM461 92T515 123T599 213T630 349Q630
|
||||
426 600 484T515 573T392 604Q323 604 269 573T185 484T154 349Q154 272 184 214T269 124T392 92Q461 92 515 123ZM392 821L249 735V824L392 907L535 824V735L392 821Z" />
|
||||
<glyph unicode="Õ" glyph-name="Otilde" horiz-adv-x="784" d="M295 -7T214 38T85 165T37 349Q37 451 84 532T213 658T392 704Q490 704 571 659T700 532T747 349Q747 247 700 166T572 39T392 -7Q295 -7 214 38ZM461 92T515 123T599 213T630 349Q630 426 600
|
||||
484T515 573T392 604Q323 604 269 573T185 484T154 349Q154 272 184 214T269 124T392 92Q461 92 515 123ZM237 811T267 840T342 870Q361 870 375 864T409 846Q424 836 434 831T458 826Q475 826 486 836T501 868H565Q557 810 527 781T452 751Q433 751 418 757T385
|
||||
776Q367 787 358 791T336 796Q319 796 308 785T293 753H229Q237 811 267 840Z" />
|
||||
<glyph unicode="Ö" glyph-name="Odieresis" horiz-adv-x="784" d="M295 -7T214 38T85 165T37 349Q37 451 84 532T213 658T392 704Q490 704 571 659T700 532T747 349Q747 247 700 166T572 39T392 -7Q295 -7 214 38ZM461 92T515 123T599 213T630 349Q630 426
|
||||
600 484T515 573T392 604Q323 604 269 573T185 484T154 349Q154 272 184 214T269 124T392 92Q461 92 515 123ZM281 765T264 782T246 825Q246 850 263 867T306 885Q331 885 348 868T366 825Q366 800 349 783T306 765Q281 765 264 782ZM453 765T436 782T418 825Q418
|
||||
850 435 867T478 885Q503 885 520 868T538 825Q538 800 521 783T478 765Q453 765 436 782Z" />
|
||||
<glyph unicode="×" glyph-name="multiply" horiz-adv-x="699" d="M502 138L350 290L198 138L123 213L276 365L127 514L200 587L349 438L498 587L573 512L424 363L575 211L502 138Z" />
|
||||
<glyph unicode="Ø" glyph-name="Oslash" horiz-adv-x="784" d="M659 589Q701 542 724 481T747 349Q747 247 700 166T572 39T392 -7Q331 -7 276 11T175 63L117 0H26L126 108Q84 156 61 217T37 349Q37 451 84 532T213 658T392 704Q453 704 509 686T610 634L667
|
||||
696H758L659 589ZM154 256T200 188L539 557Q476 604 392 604Q323 604 269 573T185 484T154 349Q154 256 200 188ZM630 443T585 508L246 140Q306 92 392 92Q461 92 515 123T599 213T630 349Q630 443 585 508Z" />
|
||||
<glyph unicode="Ù" glyph-name="Ugrave" horiz-adv-x="690" d="M188 695V252Q188 173 229 133T345 93Q420 93 461 133T503 252V695H617V254Q617 169 580 110T481 22T344 -7Q269 -7 208 22T110 110T74 254V695H188ZM448 819V735L227 844V941L448 819Z" />
|
||||
<glyph unicode="Ú" glyph-name="Uacute" horiz-adv-x="690" d="M188 695V252Q188 173 229 133T345 93Q420 93 461 133T503 252V695H617V254Q617 169 580 110T481 22T344 -7Q269 -7 208 22T110 110T74 254V695H188ZM448 844L227 735V819L448 941V844Z" />
|
||||
<glyph unicode="Û" glyph-name="Ucircumflex" horiz-adv-x="690" d="M188 695V252Q188 173 229 133T345 93Q420 93 461 133T503 252V695H617V254Q617 169 580 110T481 22T344 -7Q269 -7 208 22T110 110T74 254V695H188ZM345 821L202 735V824L345 907L488
|
||||
824V735L345 821Z" />
|
||||
<glyph unicode="Ü" glyph-name="Udieresis" horiz-adv-x="690" d="M188 695V252Q188 173 229 133T345 93Q420 93 461 133T503 252V695H617V254Q617 169 580 110T481 22T344 -7Q269 -7 208 22T110 110T74 254V695H188ZM234 765T217 782T199 825Q199 850 216
|
||||
867T259 885Q284 885 301 868T319 825Q319 800 302 783T259 765Q234 765 217 782ZM406 765T389 782T371 825Q371 850 388 867T431 885Q456 885 473 868T491 825Q491 800 474 783T431 765Q406 765 389 782Z" />
|
||||
<glyph unicode="Ý" glyph-name="Yacute" horiz-adv-x="605" d="M590 695L360 252V0H246V252L15 695H142L303 354L464 695H590ZM406 844L185 735V819L406 941V844Z" />
|
||||
<glyph unicode="Þ" glyph-name="Thorn" horiz-adv-x="595" d="M561 295T536 248T456 172T315 142H189V0H75V696H188V555H315Q395 555 450 528T533 453T561 348Q561 295 536 248ZM380 231T412 262T444 348Q444 403 412 434T315 466H189V231H315Q380 231 412 262Z" />
|
||||
<glyph unicode="ß" glyph-name="germandbls" horiz-adv-x="699" d="M54 654T116 713T302 773Q375 773 427 749T505 685T532 601Q532 549 508 516T441 447Q418 426 408 415T397 390Q397 372 418 358T502 322Q577 297 611 257T645 155Q645 81 591 36T443 -10Q352
|
||||
-10 296 38T232 173H348Q350 130 374 106T443 81Q528 81 528 146Q528 179 509 198T437 235Q355 262 319 293T282 374Q282 409 300 435T356 496Q388 526 403 546T418 592Q418 633 387 655T300 678Q229 678 199 645T168 547V0H54V562Q54 654 116 713Z" />
|
||||
<glyph unicode="à" glyph-name="agrave" horiz-adv-x="678" d="M37 361T71 425T165 524T297 560Q362 560 410 535T488 471V551H603V0H488V82Q459 43 409 17T295 -9Q224 -9 165 27T72 129T37 278Q37 361 71 425ZM488 333T465 375T403 439T321 461Q277 461
|
||||
239 440T178 377T154 278Q154 221 177 178T239 113T321 90Q365 90 403 112T464 176T488 276Q488 333 465 375ZM442 674V590L221 699V796L442 674Z" />
|
||||
<glyph unicode="á" glyph-name="aacute" horiz-adv-x="678" d="M37 361T71 425T165 524T297 560Q362 560 410 535T488 471V551H603V0H488V82Q459 43 409 17T295 -9Q224 -9 165 27T72 129T37 278Q37 361 71 425ZM488 333T465 375T403 439T321 461Q277 461
|
||||
239 440T178 377T154 278Q154 221 177 178T239 113T321 90Q365 90 403 112T464 176T488 276Q488 333 465 375ZM442 699L221 590V674L442 796V699Z" />
|
||||
<glyph unicode="â" glyph-name="acircumflex" horiz-adv-x="678" d="M37 361T71 425T165 524T297 560Q362 560 410 535T488 471V551H603V0H488V82Q459 43 409 17T295 -9Q224 -9 165 27T72 129T37 278Q37 361 71 425ZM488 333T465 375T403 439T321 461Q277
|
||||
461 239 440T178 377T154 278Q154 221 177 178T239 113T321 90Q365 90 403 112T464 176T488 276Q488 333 465 375ZM339 676L196 590V679L339 762L482 679V590L339 676Z" />
|
||||
<glyph unicode="ã" glyph-name="atilde" horiz-adv-x="678" d="M37 361T71 425T165 524T297 560Q362 560 410 535T488 471V551H603V0H488V82Q459 43 409 17T295 -9Q224 -9 165 27T72 129T37 278Q37 361 71 425ZM488 333T465 375T403 439T321 461Q277 461
|
||||
239 440T178 377T154 278Q154 221 177 178T239 113T321 90Q365 90 403 112T464 176T488 276Q488 333 465 375ZM184 666T214 695T289 725Q308 725 322 719T356 701Q371 691 381 686T405 681Q422 681 433 691T448 723H512Q504 665 474 636T399 606Q380 606 365 612T332
|
||||
631Q314 642 305 646T283 651Q266 651 255 640T240 608H176Q184 666 214 695Z" />
|
||||
<glyph unicode="ä" glyph-name="adieresis" horiz-adv-x="678" d="M37 361T71 425T165 524T297 560Q362 560 410 535T488 471V551H603V0H488V82Q459 43 409 17T295 -9Q224 -9 165 27T72 129T37 278Q37 361 71 425ZM488 333T465 375T403 439T321 461Q277 461
|
||||
239 440T178 377T154 278Q154 221 177 178T239 113T321 90Q365 90 403 112T464 176T488 276Q488 333 465 375ZM228 620T211 637T193 680Q193 705 210 722T253 740Q278 740 295 723T313 680Q313 655 296 638T253 620Q228 620 211 637ZM400 620T383 637T365 680Q365
|
||||
705 382 722T425 740Q450 740 467 723T485 680Q485 655 468 638T425 620Q400 620 383 637Z" />
|
||||
<glyph unicode="å" glyph-name="aring" horiz-adv-x="678" d="M37 361T71 425T165 524T297 560Q362 560 410 535T488 471V551H603V0H488V82Q459 43 409 17T295 -9Q224 -9 165 27T72 129T37 278Q37 361 71 425ZM488 333T465 375T403 439T321 461Q277 461 239
|
||||
440T178 377T154 278Q154 221 177 178T239 113T321 90Q365 90 403 112T464 176T488 276Q488 333 465 375ZM452 665T420 635T339 605Q292 605 260 635T227 714Q227 764 259 794T339 824Q387 824 419 794T452 714Q452 665 420 635ZM388 738T374 752T339 766Q319 766
|
||||
305 752T291 715Q291 693 305 679T339 664Q360 664 374 678T388 715Q388 738 374 752Z" />
|
||||
<glyph unicode="æ" glyph-name="ae" horiz-adv-x="1085" d="M1048 262T1044 237H605Q611 190 636 156T696 105T769 87Q824 87 859 108T909 164H1033Q1008 88 945 40T789 -9Q729 -9 676 16T590 83V0H492V83Q458 42 408 17T297 -9Q225 -9 166 27T72 129T37
|
||||
278Q37 361 71 425T167 525T303 560Q423 560 495 473V551H590V473Q632 519 680 539T789 560Q864 560 923 526T1015 430T1048 291Q1048 262 1044 237ZM930 319Q929 384 884 424T770 464Q708 464 662 424T605 319H930ZM365 90T403 112T464 176T488 276Q488 333 465
|
||||
375T403 439T321 461Q277 461 239 440T178 377T154 278Q154 221 177 178T239 113T321 90Q365 90 403 112Z" />
|
||||
<glyph unicode="ç" glyph-name="ccedilla" horiz-adv-x="600" d="M406 87T438 174H561Q539 98 483 50T341 -7V-48Q399 -48 435 -75T471 -153Q471 -203 435 -232T344 -262H212V-190H321Q349 -190 363 -182T377 -153Q377 -132 363 -124T321 -116H266V-6Q198
|
||||
2 146 39T66 137T37 276Q37 361 71 425T167 525T307 560Q407 560 472 513T561 377H438Q423 418 390 441T307 464Q237 464 196 415T154 276Q154 187 195 137T307 87Q406 87 438 174Z" />
|
||||
<glyph unicode="è" glyph-name="egrave" horiz-adv-x="617" d="M580 258T576 233H155Q160 167 204 127T312 87Q404 87 442 164H565Q540 88 475 40T312 -9Q233 -9 171 26T73 126T37 276Q37 361 71 425T168 525T312 560Q390 560 451 526T546 431T580 289Q580
|
||||
258 576 233ZM461 325Q460 388 416 426T307 464Q248 464 206 427T156 325H461ZM412 674V590L191 699V796L412 674Z" />
|
||||
<glyph unicode="é" glyph-name="eacute" horiz-adv-x="617" d="M580 258T576 233H155Q160 167 204 127T312 87Q404 87 442 164H565Q540 88 475 40T312 -9Q233 -9 171 26T73 126T37 276Q37 361 71 425T168 525T312 560Q390 560 451 526T546 431T580 289Q580
|
||||
258 576 233ZM461 325Q460 388 416 426T307 464Q248 464 206 427T156 325H461ZM412 699L191 590V674L412 796V699Z" />
|
||||
<glyph unicode="ê" glyph-name="ecircumflex" horiz-adv-x="617" d="M580 258T576 233H155Q160 167 204 127T312 87Q404 87 442 164H565Q540 88 475 40T312 -9Q233 -9 171 26T73 126T37 276Q37 361 71 425T168 525T312 560Q390 560 451 526T546 431T580 289Q580
|
||||
258 576 233ZM461 325Q460 388 416 426T307 464Q248 464 206 427T156 325H461ZM309 676L166 590V679L309 762L452 679V590L309 676Z" />
|
||||
<glyph unicode="ë" glyph-name="edieresis" horiz-adv-x="617" d="M580 258T576 233H155Q160 167 204 127T312 87Q404 87 442 164H565Q540 88 475 40T312 -9Q233 -9 171 26T73 126T37 276Q37 361 71 425T168 525T312 560Q390 560 451 526T546 431T580 289Q580
|
||||
258 576 233ZM461 325Q460 388 416 426T307 464Q248 464 206 427T156 325H461ZM198 620T181 637T163 680Q163 705 180 722T223 740Q248 740 265 723T283 680Q283 655 266 638T223 620Q198 620 181 637ZM370 620T353 637T335 680Q335 705 352 722T395 740Q420 740
|
||||
437 723T455 680Q455 655 438 638T395 620Q370 620 353 637Z" />
|
||||
<glyph unicode="ì" glyph-name="igrave" horiz-adv-x="264" d="M189 551V0H75V551H189ZM235 674V590L14 699V796L235 674Z" />
|
||||
<glyph unicode="í" glyph-name="iacute" horiz-adv-x="264" d="M189 551V0H75V551H189ZM235 699L14 590V674L235 796V699Z" />
|
||||
<glyph unicode="î" glyph-name="icircumflex" horiz-adv-x="264" d="M189 551V0H75V551H189ZM388 676L245 590V679L388 762L531 679V590L388 676Z" />
|
||||
<glyph unicode="ï" glyph-name="idieresis" horiz-adv-x="264" d="M189 551V0H75V551H189ZM277 620T260 637T242 680Q242 705 259 722T302 740Q327 740 344 723T362 680Q362 655 345 638T302 620Q277 620 260 637ZM449 620T432 637T414 680Q414 705 431 722T474
|
||||
740Q499 740 516 723T534 680Q534 655 517 638T474 620Q449 620 432 637Z" />
|
||||
<glyph unicode="ð" glyph-name="eth" horiz-adv-x="636" d="M599 503T599 317Q599 212 562 139T461 28T314 -9Q235 -9 172 26T73 126T37 276Q37 360 73 425T170 525T307 560Q356 560 394 546T466 503Q438 568 387 628L264 588V649L343 675Q309 707 269 740H385Q406
|
||||
722 426 702L551 743V682L470 655Q599 503 599 317ZM358 87T396 109T458 173T482 276Q482 336 459 378T398 442T316 464Q272 464 235 443T176 379T154 276Q154 216 175 173T233 109T314 87Q358 87 396 109Z" />
|
||||
<glyph unicode="ñ" glyph-name="ntilde" horiz-adv-x="649" d="M418 560T469 533T550 453T579 325V0H466V308Q466 382 429 421T328 461Q264 461 227 422T189 308V0H75V551H189V488Q217 522 260 541T353 560Q418 560 469 533ZM180 666T210 695T285 725Q304
|
||||
725 318 719T352 701Q367 691 377 686T401 681Q418 681 429 691T444 723H508Q500 665 470 636T395 606Q376 606 361 612T328 631Q310 642 301 646T279 651Q262 651 251 640T236 608H172Q180 666 210 695Z" />
|
||||
<glyph unicode="ò" glyph-name="ograve" horiz-adv-x="638" d="M236 -9T173 26T74 126T38 276Q38 360 75 425T176 525T319 560Q398 560 462 525T563 425T600 276Q600 192 562 127T459 27T314 -9Q236 -9 173 26ZM358 90T396 111T459 174T483 276Q483 336 460
|
||||
377T399 440T317 461Q273 461 236 440T176 378T154 276Q154 187 199 139T314 90Q358 90 396 111ZM422 683V599L201 708V805L422 683Z" />
|
||||
<glyph unicode="ó" glyph-name="oacute" horiz-adv-x="638" d="M236 -9T173 26T74 126T38 276Q38 360 75 425T176 525T319 560Q398 560 462 525T563 425T600 276Q600 192 562 127T459 27T314 -9Q236 -9 173 26ZM358 90T396 111T459 174T483 276Q483 336 460
|
||||
377T399 440T317 461Q273 461 236 440T176 378T154 276Q154 187 199 139T314 90Q358 90 396 111ZM422 708L201 599V683L422 805V708Z" />
|
||||
<glyph unicode="ô" glyph-name="ocircumflex" horiz-adv-x="638" d="M236 -9T173 26T74 126T38 276Q38 360 75 425T176 525T319 560Q398 560 462 525T563 425T600 276Q600 192 562 127T459 27T314 -9Q236 -9 173 26ZM358 90T396 111T459 174T483 276Q483
|
||||
336 460 377T399 440T317 461Q273 461 236 440T176 378T154 276Q154 187 199 139T314 90Q358 90 396 111ZM319 685L176 599V688L319 771L462 688V599L319 685Z" />
|
||||
<glyph unicode="õ" glyph-name="otilde" horiz-adv-x="638" d="M236 -9T173 26T74 126T38 276Q38 360 75 425T176 525T319 560Q398 560 462 525T563 425T600 276Q600 192 562 127T459 27T314 -9Q236 -9 173 26ZM358 90T396 111T459 174T483 276Q483 336 460
|
||||
377T399 440T317 461Q273 461 236 440T176 378T154 276Q154 187 199 139T314 90Q358 90 396 111ZM164 675T194 704T269 734Q288 734 302 728T336 710Q351 700 361 695T385 690Q402 690 413 700T428 732H492Q484 674 454 645T379 615Q360 615 345 621T312 640Q294
|
||||
651 285 655T263 660Q246 660 235 649T220 617H156Q164 675 194 704Z" />
|
||||
<glyph unicode="ö" glyph-name="odieresis" horiz-adv-x="638" d="M236 -9T173 26T74 126T38 276Q38 360 75 425T176 525T319 560Q398 560 462 525T563 425T600 276Q600 192 562 127T459 27T314 -9Q236 -9 173 26ZM358 90T396 111T459 174T483 276Q483 336
|
||||
460 377T399 440T317 461Q273 461 236 440T176 378T154 276Q154 187 199 139T314 90Q358 90 396 111ZM208 629T191 646T173 689Q173 714 190 731T233 749Q258 749 275 732T293 689Q293 664 276 647T233 629Q208 629 191 646ZM380 629T363 646T345 689Q345 714 362
|
||||
731T405 749Q430 749 447 732T465 689Q465 664 448 647T405 629Q380 629 363 646Z" />
|
||||
<glyph unicode="÷" glyph-name="divide" horiz-adv-x="679" d="M316 505T295 526T274 578Q274 609 295 630T347 651Q377 651 398 630T419 578Q419 547 398 526T347 505Q316 505 295 526ZM600 410V314H90V410H600ZM316 75T295 96T274 148Q274 179 295 200T347
|
||||
221Q377 221 398 200T419 148Q419 117 398 96T347 75Q316 75 295 96Z" />
|
||||
<glyph unicode="ø" glyph-name="oslash" horiz-adv-x="638" d="M533 467Q600 390 600 276Q600 192 562 127T459 27T314 -9Q218 -9 147 43L107 0H28L104 83Q38 160 38 276Q38 360 75 425T176 525T319 560Q417 560 490 507L531 551H610L533 467ZM154 213T180
|
||||
166L418 427Q375 461 317 461Q273 461 236 440T176 378T154 276Q154 213 180 166ZM483 338T457 383L218 121Q258 90 314 90Q358 90 396 111T459 174T483 276Q483 338 457 383Z" />
|
||||
<glyph unicode="ù" glyph-name="ugrave" horiz-adv-x="649" d="M574 551V0H460V65Q433 31 390 12T297 -8Q232 -8 181 19T100 99T70 227V551H183V244Q183 170 220 131T321 91Q385 91 422 130T460 244V551H574ZM428 674V590L207 699V796L428 674Z" />
|
||||
<glyph unicode="ú" glyph-name="uacute" horiz-adv-x="649" d="M574 551V0H460V65Q433 31 390 12T297 -8Q232 -8 181 19T100 99T70 227V551H183V244Q183 170 220 131T321 91Q385 91 422 130T460 244V551H574ZM428 699L207 590V674L428 796V699Z" />
|
||||
<glyph unicode="û" glyph-name="ucircumflex" horiz-adv-x="649" d="M574 551V0H460V65Q433 31 390 12T297 -8Q232 -8 181 19T100 99T70 227V551H183V244Q183 170 220 131T321 91Q385 91 422 130T460 244V551H574ZM325 676L182 590V679L325 762L468 679V590L325
|
||||
676Z" />
|
||||
<glyph unicode="ü" glyph-name="udieresis" horiz-adv-x="649" d="M574 551V0H460V65Q433 31 390 12T297 -8Q232 -8 181 19T100 99T70 227V551H183V244Q183 170 220 131T321 91Q385 91 422 130T460 244V551H574ZM214 620T197 637T179 680Q179 705 196 722T239
|
||||
740Q264 740 281 723T299 680Q299 655 282 638T239 620Q214 620 197 637ZM386 620T369 637T351 680Q351 705 368 722T411 740Q436 740 453 723T471 680Q471 655 454 638T411 620Q386 620 369 637Z" />
|
||||
<glyph unicode="ý" glyph-name="yacute" horiz-adv-x="582" d="M571 551L233 -259H115L227 9L10 551H137L292 131L453 551H571ZM394 699L173 590V674L394 796V699Z" />
|
||||
<glyph unicode="þ" glyph-name="thorn" horiz-adv-x="678" d="M217 501T266 530T381 560Q453 560 512 525T606 425T640 278Q640 195 606 130T513 28T381 -9Q316 -9 267 21T189 103V-262H75V740H189V453Q217 501 266 530ZM524 335T501 376T439 439T356 461Q313
|
||||
461 275 439T213 375T189 276Q189 219 212 177T274 112T356 90Q400 90 438 112T500 178T524 278Q524 335 501 376Z" />
|
||||
<glyph unicode="ÿ" glyph-name="ydieresis" horiz-adv-x="582" d="M571 551L233 -259H115L227 9L10 551H137L292 131L453 551H571ZM180 620T163 637T145 680Q145 705 162 722T205 740Q230 740 247 723T265 680Q265 655 248 638T205 620Q180 620 163 637ZM352
|
||||
620T335 637T317 680Q317 705 334 722T377 740Q402 740 419 723T437 680Q437 655 420 638T377 620Q352 620 335 637Z" />
|
||||
<glyph unicode="–" glyph-name="endash" horiz-adv-x="708" d="M622 410V314H87V410H622Z" />
|
||||
<glyph unicode="—" glyph-name="emdash" horiz-adv-x="924" d="M837 410V314H87V410H837Z" />
|
||||
<glyph unicode="‘" glyph-name="quoteleft" horiz-adv-x="242" d="M149 457H25L130 695H210L149 457Z" />
|
||||
<glyph unicode="’" glyph-name="quoteright" horiz-adv-x="242" d="M93 695H217L112 457H32L93 695Z" />
|
||||
<glyph unicode="‚" glyph-name="quotesinglbase" horiz-adv-x="215" d="M66 135H190L85 -103H5L66 135Z" />
|
||||
<glyph unicode="“" glyph-name="quotedblleft" horiz-adv-x="422" d="M149 457H25L130 695H210L149 457ZM329 457H205L310 695H390L329 457Z" />
|
||||
<glyph unicode="”" glyph-name="quotedblright" horiz-adv-x="422" d="M93 695H217L112 457H32L93 695ZM273 695H397L292 457H212L273 695Z" />
|
||||
<glyph unicode="„" glyph-name="quotedblbase" horiz-adv-x="397" d="M66 135H190L85 -103H5L66 135ZM248 135H372L267 -103H187L248 135Z" />
|
||||
<glyph unicode="•" glyph-name="bullet" horiz-adv-x="462" d="M194 203T165 220T118 267T100 333Q100 388 138 426T230 464Q286 464 324 426T362 333Q362 278 324 241T230 203Q194 203 165 220Z" />
|
||||
<glyph unicode="‹" glyph-name="guilsinglleft" horiz-adv-x="297" d="M137 120L45 295L137 470H247L151 295L247 120H137Z" />
|
||||
<glyph unicode="›" glyph-name="guilsinglright" horiz-adv-x="297" d="M145 295L50 470H159L252 295L159 120H50L145 295Z" />
|
||||
</font>
|
||||
</defs>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 52 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user