![]() Server : Apache/2.4.62 (Unix) OpenSSL/1.0.2k-fips System : Linux server1.richineiserver.com 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64 User : fdshops ( 1003) PHP Version : 8.2.21 Disable Function : NONE Directory : /home/fdshops/public_html/Modules/Connector/Http/Controllers/Api/ |
<?php namespace Modules\Connector\Http\Controllers\Api; use App\Contact; use App\Product; use App\Transaction; use App\Utils\Util; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Support\Facades\Auth; use Modules\Connector\Transformers\NewContactResource; use Modules\Connector\Transformers\NewProductResource; use Modules\Connector\Transformers\NewSellResource; /** * @group New end points * @authenticated * * APIs for sell list, product list and contact list */ class ProductSellController extends ApiController { /** * All Utils instance. */ protected $commonUtil; /** * Constructor * * @param ProductUtils $product * @return void */ public function __construct( Util $commonUtil ) { $this->commonUtil = $commonUtil; parent::__construct(); } /** * New List products * * @queryParam order_by Values: product_name or newest * @queryParam order_direction Values: asc or desc * @queryParam location_custom_field_1 Custom field 1 of the location * @queryParam category_id comma separated ids of one or multiple category * @queryParam sub_category_id comma separated ids of one or multiple sub-category * @queryParam location_id Example: 1 * @queryParam not_for_sell (1, 0) * @queryParam send_lot_detail Send lot details in each variation location details(1, 0) * @queryParam name Search term for product name * @queryParam sku Search term for product sku * @queryParam product_ids comma separated ids of products Example: 1,2 * @queryParam per_page Total records per page. default: 10, Set -1 for no pagination Example:10 * @response { "data": [ { "id": 2, "name": "Levis Men's Slimmy Fit Jeans", "business_id": 1, "type": "variable", "exemption_type_id": null, "enable_stock": 1, "sku": "AS0002", "product_custom_field1": null, "product_custom_field2": null, "product_custom_field3": null, "product_custom_field4": null, "woocommerce_media_id": null, "product_description": null, "is_inactive": 0, "repair_model_id": null, "not_for_selling": 0, "ecom_shipping_class_id": null, "ecom_active_in_store": 1, "woocommerce_product_id": 627, "woocommerce_disable_sync": 0, "image_url": "http://local.pos.com/uploads/img/1528727964_levis_jeans.jpg", "product_variations": [ { "id": 2, "variation_template_id": 5, "name": "Waist Size", "product_id": 2, "is_dummy": 0, "variations": [ { "id": 2, "name": "28", "product_id": 2, "sub_sku": "AS0002-1", "product_variation_id": 2, "woocommerce_variation_id": 658, "default_purchase_price": "70.0000", "dpp_inc_tax": "77.0000", "default_sell_price": "70.0000", "sell_price_inc_tax": "77.0000", "combo_variations": null, "variation_location_details": [ { "id": 1, "product_id": 2, "product_variation_id": 2, "variation_id": 2, "location_id": 1, "qty_available": "71.0000" } ], "media": [], "discounts": [] }, { "id": 3, "name": "30", "product_id": 2, "sub_sku": "AS0002-2", "product_variation_id": 2, "woocommerce_variation_id": 659, "default_purchase_price": "70.0000", "dpp_inc_tax": "77.0000", "default_sell_price": "70.0000", "sell_price_inc_tax": "77.0000", "combo_variations": null, "variation_location_details": [ { "id": 2, "product_id": 2, "product_variation_id": 2, "variation_id": 3, "location_id": 1, "qty_available": "89.0000" } ], "media": [], "discounts": [] }, { "id": 4, "name": "32", "product_id": 2, "sub_sku": "AS0002-3", "product_variation_id": 2, "woocommerce_variation_id": 660, "default_purchase_price": "70.0000", "dpp_inc_tax": "77.0000", "default_sell_price": "70.0000", "sell_price_inc_tax": "77.0000", "combo_variations": null, "variation_location_details": [ { "id": 3, "product_id": 2, "product_variation_id": 2, "variation_id": 4, "location_id": 1, "qty_available": "127.0000" }, { "id": 1371, "product_id": 2, "product_variation_id": 2, "variation_id": 4, "location_id": 7, "qty_available": "-1.0000" } ], "media": [], "discounts": [] }, { "id": 5, "name": "34", "product_id": 2, "sub_sku": "AS0002-4", "product_variation_id": 2, "woocommerce_variation_id": 661, "default_purchase_price": "72.0000", "dpp_inc_tax": "79.2000", "default_sell_price": "72.0000", "sell_price_inc_tax": "79.2000", "combo_variations": null, "variation_location_details": [ { "id": 4, "product_id": 2, "product_variation_id": 2, "variation_id": 5, "location_id": 1, "qty_available": "128.0000" } ], "media": [], "discounts": [] }, { "id": 6, "name": "36", "product_id": 2, "sub_sku": "AS0002-5", "product_variation_id": 2, "woocommerce_variation_id": 662, "default_purchase_price": "72.0000", "dpp_inc_tax": "79.2000", "default_sell_price": "72.0000", "sell_price_inc_tax": "79.2000", "combo_variations": null, "variation_location_details": [ { "id": 5, "product_id": 2, "product_variation_id": 2, "variation_id": 6, "location_id": 1, "qty_available": "99.0000" } ], "media": [], "discounts": [] } ] } ], "brand": { "id": 1, "business_id": 1, "name": "Levis", "description": null, "created_by": 1, "use_for_repair": 1, "deleted_at": null, "created_at": "2018-01-03 21:19:47", "updated_at": "2018-01-03 21:19:47" }, "unit": { "id": 1, "business_id": 1, "actual_name": "Pieces", "short_name": "Pc(s)", "allow_decimal": 0, "base_unit_id": null, "base_unit_multiplier": null }, "category": { "id": 1, "name": "Men's", "business_id": 1, "short_code": "sfefef", "parent_id": 0, "category_type": "product", "description": null, "slug": null, "woocommerce_cat_id": null }, "sub_category": { "id": 4, "name": "Jeans", "business_id": 1, "short_code": null, "parent_id": 1, "category_type": "product", "description": null, "slug": null, "woocommerce_cat_id": null }, "product_tax": { "id": 1, "business_id": 1, "name": "VAT@10%", "amount": 10, "is_tax_group": 0, "for_tax_group": 0, "created_by": 1, "woocommerce_tax_rate_id": null, "deleted_at": null, "created_at": "2018-01-04 02:40:07", "updated_at": "2018-01-04 02:40:07" }, "product_locations": [ { "id": 1, "business_id": 1, "name": "Location 1", "custom_field1": "gdgdgd88", "custom_field2": null, "custom_field3": null, "custom_field4": null } ] } ], "links": { "first": "http://local.pos.com/connector/api/new_product?per_page=1&page=1", "last": "http://local.pos.com/connector/api/new_product?per_page=1&page=1088", "prev": null, "next": "http://local.pos.com/connector/api/new_product?per_page=1&page=2" }, "meta": { "current_page": 1, "from": 1, "last_page": 1088, "path": "http://local.pos.com/connector/api/new_product", "per_page": "1", "to": 1, "total": 1088 } } */ public function newProduct() { $user = Auth::user(); $business_id = $user->business_id; $filters = request()->only(['category_id', 'location_id', 'sub_category_id', 'product_custom_field_1', 'location_custom_field_1', 'per_page']); $filters['not_for_sell'] = request()->input('not_for_sell') == 1 ? true : false; $filters['product_ids'] = ! empty(request()->input('product_ids')) ? explode(',', request()->input('product_ids')) : null; $search = request()->only(['sku', 'name']); //order $order_by = null; $order_direction = null; if (! empty(request()->input('order_by'))) { $order_by = in_array(request()->input('order_by'), ['product_name', 'newest']) ? request()->input('order_by') : null; $order_direction = in_array(request()->input('order_direction'), ['asc', 'desc']) ? request()->input('order_direction') : 'asc'; } $products = $this->__getProducts($business_id, $filters, $search, true, $order_by, $order_direction); return NewProductResource::collection($products); } /** * Function to query product * * @return Response */ private function __getProducts($business_id, $filters = [], $search = [], $pagination = false, $order_by = null, $order_direction = null) { $query = Product::select('products.*')->where('products.business_id', $business_id); $with = ['product_variations.variations.variation_location_details', 'brand', 'unit', 'category', 'sub_category', 'product_tax', 'product_variations.variations.media', 'product_locations']; if (! empty($filters['category_id'])) { $category_ids = explode(',', $filters['category_id']); $query->whereIn('category_id', $category_ids); } if (! empty($filters['sub_category_id'])) { $sub_category_id = explode(',', $filters['sub_category_id']); $query->whereIn('sub_category_id', $sub_category_id); } if (! empty($filters['product_custom_field_1'])) { $query->where('product_custom_field1', $filters['product_custom_field_1']); } if (! empty($filters['not_for_sell'])) { $query->where('not_for_selling', 1); } if (! empty($filters['location_custom_field_1'])) { $query->leftjoin('product_locations as pl', 'pl.product_id', '=', 'products.id') ->leftjoin('business_locations as bl', 'pl.location_id', '=', 'bl.id') ->where('bl.custom_field1', $filters['location_custom_field_1']); } if (! empty($filters['location_id'])) { $location_id = $filters['location_id']; $query->whereHas('product_locations', function ($q) use ($location_id) { $q->where('product_locations.location_id', $location_id); }); $with['product_variations.variations.variation_location_details'] = function ($q) use ($location_id) { $q->where('location_id', $location_id); }; $with['product_locations'] = function ($q) use ($location_id) { $q->where('product_locations.location_id', $location_id); }; } if (! empty($filters['product_ids'])) { $query->whereIn('id', $filters['product_ids']); } $query->groupBy('products.id'); if (! empty($search)) { $query->where(function ($query) use ($search) { if (! empty($search['name'])) { $query->where('products.name', 'like', '%'.$search['name'].'%'); } if (! empty($search['sku'])) { $sku = $search['sku']; $query->orWhere('sku', 'like', '%'.$sku.'%'); $query->orWhereHas('variations', function ($q) use ($sku) { $q->where('variations.sub_sku', 'like', '%'.$sku.'%'); }); } }); } //Order by if (! empty($order_by)) { if ($order_by == 'product_name') { $query->orderBy('products.name', $order_direction); } if ($order_by == 'newest') { $query->orderBy('products.id', $order_direction); } } $query->with($with); $perPage = ! empty($filters['per_page']) ? $filters['per_page'] : $this->perPage; if ($pagination && $perPage != -1) { $products = $query->paginate($perPage); $products->appends(request()->query()); } else { $products = $query->get(); } return $products; } /** * New List sells * * @queryParam location_id id of the location Example: 1 * @queryParam contact_id id of the customer * @queryParam payment_status Comma separated values of payment statuses. Available values due, partial, paid, overdue Example: due,partial * @queryParam start_date format:Y-m-d Example: 2018-06-25 * @queryParam end_date format:Y-m-d Example: 2018-06-25 * @queryParam user_id id of the user who created the sale * @queryParam service_staff_id id of the service staff assigned with the sale * @queryParam shipping_status Shipping Status of the sale ('ordered', 'packed', 'shipped', 'delivered', 'cancelled') Example: ordered * @queryParam source Source of the sale * @queryParam customer_group_id id of the customer group * @queryParam product_name name of the product * @queryParam product_sku sku of the product or variation * @queryParam product_custom_field_1 custome field 1 of the product * @queryParam location_custom_field_1 custome field 1 of the location * @queryParam location_invoice_scheme_prefix Invoice scheme prefix of the location * @queryParam product_category_id category id of the product * @queryParam product_sub_category_id Sub category id of the product * @queryParam sell_ids comma separated ids of the sells Example: 55,64 * @queryParam only_subscriptions Filter only subcription invoices (1, 0) * @queryParam send_purchase_details Get purchase details of each sell line (1, 0) * @queryParam order_by_date Sort sell list by date ('asc', 'desc') Example: desc * @queryParam per_page Total records per page. default: 10, Set -1 for no pagination Example:10 * * @response { "data": [ { "id": 6, "business_id": 1, "location_id": 1, "res_table_id": null, "type": "sell", "status": "final", "is_quotation": 0, "payment_status": "paid", "contact_id": 4, "customer_group_id": null, "invoice_no": "AS0001", "ref_no": "", "source": null, "unique_hash": null, "hash_control": null, "subscription_no": null, "subscription_repeat_on": null, "transaction_date": "2018-04-10 13:23:21", "total_before_tax": "770.0000", "tax_id": null, "tax_amount": "0.0000", "discount_type": "percentage", "discount_amount": "0.0000", "rp_redeemed": 0, "rp_redeemed_amount": "0.0000", "shipping_details": null, "shipping_address": null, "shipping_status": null, "delivered_to": null, "additional_notes": null, "staff_note": null, "round_off_amount": "0.0000", "final_total": "770.0000", "expense_sub_category_id": null, "is_direct_sale": 0, "is_suspend": 0, "total_amount_recovered": null, "crm_is_order_request": 0, "mfg_production_cost": "0.0000", "mfg_production_cost_type": "percentage", "mfg_is_final": 0, "is_created_from_api": 0, "essentials_duration": "0.00", "essentials_duration_unit": null, "essentials_amount_per_unit_duration": "0.0000", "essentials_allowances": null, "essentials_deductions": null, "repair_completed_on": null, "repair_warranty_id": null, "repair_brand_id": null, "repair_status_id": null, "repair_model_id": null, "repair_job_sheet_id": null, "repair_defects": null, "repair_serial_no": null, "repair_checklist": null, "repair_security_pwd": null, "repair_security_pattern": null, "repair_due_date": null, "repair_device_id": null, "repair_updates_notif": 0, "invoice_token": "00f79f7fd292225e8c303a6bf8626d06", "pjt_project_id": null, "pjt_title": null, "woocommerce_order_id": null, "selling_price_group_id": null, "created_at": "2018-01-06 07:06:11", "updated_at": "2021-10-23 11:42:13", "location_name": "Location 1", "location_custom_field1": "gdgdgd88", "location_invoice_scheme_prefix": "AS", "table_name": null, "table_description": null, "contact": "Harry", "customer_group_name": "grp 2", "sell_lines": [ { "id": 1, "transaction_id": 6, "product_id": 2, "quantity": 10, "quantity_returned": "0.0000", "unit_price_before_discount": "70.0000", "unit_price": "70.0000", "line_discount_type": null, "line_discount_amount": "0.0000", "unit_price_inc_tax": "77.0000", "item_tax": "7.0000", "tax_id": 1, "discount_id": null, "lot_no_line_id": null, "sell_line_note": null, "woocommerce_line_items_id": null, "children_type": "", "created_at": "2018-01-06 07:06:11", "updated_at": "2018-01-06 07:06:11", "product_name": "Levis Men's Slimmy Fit Jeans", "product_custom_field_1": null, "product_type": "variable", "product_sku": "AS0002", "category": { "id": 1, "name": "Men's", "business_id": 1, "short_code": "sfefef", "parent_id": 0, "created_by": 1, "category_type": "product", "description": null, "slug": null, "woocommerce_cat_id": null }, "sub_category": { "id": 4, "name": "Jeans", "business_id": 1, "short_code": null, "parent_id": 1, "created_by": 1, "category_type": "product", "description": null, "slug": null, "woocommerce_cat_id": null }, "product_variations": { "id": 3, "name": "30", "product_id": 2, "sub_sku": "AS0002-2", "product_variation_id": 2, "default_purchase_price": "70.0000", "dpp_inc_tax": "77.0000", "default_sell_price": "70.0000", "sell_price_inc_tax": "77.0000" } } ], "payment_lines": [ { "id": 1, "transaction_id": 6, "business_id": null, "is_return": 0, "amount": "770.0000", "method": "cash", "card_type": "visa", "paid_on": "2018-01-09 17:30:35", "payment_ref_no": null } ], "invoice_url": "http://local.pos.com/invoice/00f79f7fd292225e8c303a6bf8626d06", "payment_link": "" } ], "links": { "first": "http://local.pos.com/connector/api/new_sell?per_page=1&page=1", "last": "http://local.pos.com/connector/api/new_sell?per_page=1&page=213", "prev": null, "next": "http://local.pos.com/connector/api/new_sell?per_page=1&page=2" }, "meta": { "current_page": 1, "from": 1, "last_page": 213, "path": "http://local.pos.com/connector/api/new_sell", "per_page": "1", "to": 1, "total": 213 } } */ public function newSell() { $user = Auth::user(); $business_id = $user->business_id; $is_admin = $this->commonUtil->is_admin($user, $business_id); if (! $is_admin && ! auth()->user()->hasAnyPermission(['sell.view', 'direct_sell.access', 'direct_sell.view', 'view_own_sell_only', 'view_commission_agent_sell', 'access_shipping', 'access_own_shipping', 'access_commission_agent_shipping'])) { abort(403, 'Unauthorized action.'); } $filters = request()->only(['location_id', 'contact_id', 'payment_status', 'start_date', 'end_date', 'user_id', 'service_staff_id', 'only_subscriptions', 'per_page', 'shipping_status', 'order_by_date', 'source', 'customer_group_id', 'product_name', 'product_sku', 'product_custom_field_1', 'location_custom_field_1', 'location_invoice_scheme_prefix', 'product_category_id', 'product_sub_category_id']); $with = ['sell_lines', 'payment_lines', 'sell_lines.product', 'sell_lines.product.category', 'sell_lines.product.sub_category', 'sell_lines.variations']; $query = Transaction::where('transactions.business_id', $business_id) ->where('transactions.type', 'sell') ->leftjoin('business_locations as bl', 'bl.id', '=', 'transactions.location_id') ->leftjoin('invoice_schemes as isc', 'isc.id', '=', 'bl.invoice_scheme_id') ->leftjoin('res_tables as tab', 'tab.id', '=', 'transactions.res_table_id') ->leftjoin('contacts as c', 'c.id', '=', 'transactions.contact_id') ->leftjoin('customer_groups as cg', 'c.customer_group_id', '=', 'cg.id'); if (! empty(request()->input('sell_ids'))) { $sell_ids = explode(',', request()->input('sell_ids')); $query->whereIn('transactions.id', $sell_ids); } if (! empty(request()->input('send_purchase_details')) && request()->input('send_purchase_details') == 1) { $with[] = 'sell_lines.sell_line_purchase_lines'; $with[] = 'sell_lines.sell_line_purchase_lines.purchase_line'; } $query->with($with); $permitted_locations = $user->permitted_locations($business_id); if ($permitted_locations != 'all') { $query->whereIn('transactions.location_id', $permitted_locations); } if (! $user->can('direct_sell.view')) { $query->where(function ($q) use ($user) { if ($user->hasAnyPermission(['view_own_sell_only', 'access_own_shipping'])) { $q->where('transactions.created_by', $user->id); } //if user is commission agent display only assigned sells if ($user->hasAnyPermission(['view_commission_agent_sell', 'access_commission_agent_shipping'])) { $q->orWhere('transactions.commission_agent', $user->id); } }); } if (! empty($filters['location_id'])) { $query->where('transactions.location_id', $filters['location_id']); } if (! empty($filters['contact_id'])) { $query->where('transactions.contact_id', $filters['contact_id']); } if (! empty($filters['customer_group_id'])) { $query->where('c.customer_group_id', $filters['customer_group_id']); } if (! empty($filters['location_custom_field_1'])) { $query->where('bl.custom_field1', $filters['location_custom_field_1']); } if (! empty($filters['location_invoice_scheme_prefix'])) { $location_invoice_scheme_prefix = $filters['location_invoice_scheme_prefix']; $query->where('isc.prefix', 'like', $location_invoice_scheme_prefix); } if (! empty($filters['product_name']) || ! empty($filters['product_custom_field_1']) || ! empty($filters['product_category_id']) || ! empty($filters['product_sub_category_id'])) { $product_name = $filters['product_name'] ?? null; $product_custom_field1 = $filters['product_custom_field_1'] ?? ''; $product_category_id = $filters['product_category_id'] ?? ''; $product_sub_category_id = $filters['product_sub_category_id'] ?? ''; $query->whereHas('sell_lines.product', function ($q) use ($product_name, $product_custom_field1, $product_category_id, $product_sub_category_id) { if (! empty($product_name)) { $q->where('name', 'like', "%{$product_name}%"); } if (! empty($product_custom_field1)) { $q->where('product_custom_field1', $product_custom_field1); } if (! empty($product_category_id)) { $q->where('category_id', $product_category_id); } if (! empty($product_sub_category_id)) { $q->where('sub_category_id', $product_sub_category_id); } }); } if (! empty($filters['product_sku'])) { $product_sku = $filters['product_sku']; $query->whereHas('sell_lines.product.variations', function ($q) use ($product_sku) { $q->where('sub_sku', 'like', "{$product_sku}%"); }); } $payment_status = []; if (! empty($filters['payment_status'])) { $payment_status = explode(',', $filters['payment_status']); } if (! $is_admin) { $payment_status_arr = []; if (auth()->user()->can('view_paid_sells_only')) { $payment_status_arr[] = 'paid'; } if (auth()->user()->can('view_due_sells_only')) { $payment_status_arr[] = 'due'; } if (auth()->user()->can('view_partial_sells_only')) { $payment_status_arr[] = 'partial'; } if (empty($payment_status_arr)) { if (auth()->user()->can('view_overdue_sells_only')) { $sells->OverDue(); } } else { if (auth()->user()->can('view_overdue_sells_only')) { $sells->where(function ($q) use ($payment_status_arr) { $q->whereIn('transactions.payment_status', $payment_status_arr) ->orWhere(function ($qr) { $qr->OverDue(); }); }); } else { $sells->whereIn('transactions.payment_status', $payment_status_arr); } } } if (! empty($payment_status)) { $query->where(function ($q) use ($payment_status) { $is_overdue = false; if (in_array('overdue', $payment_status)) { $is_overdue = true; $key = array_search('overdue', $payment_status); unset($payment_status[$key]); } if (! empty($payment_status)) { $q->whereIn('transactions.payment_status', $payment_status); } if ($is_overdue) { $q->orWhere(function ($qr) { $qr->whereIn('transactions.payment_status', ['due', 'partial']) ->whereNotNull('transactions.pay_term_number') ->whereNotNull('transactions.pay_term_type') ->whereRaw("IF(transactions.pay_term_type='days', DATE_ADD(transactions.transaction_date, INTERVAL transactions.pay_term_number DAY) < CURDATE(), DATE_ADD(transactions.transaction_date, INTERVAL transactions.pay_term_number MONTH) < CURDATE())"); }); } }); } if (! empty($filters['start_date'])) { $query->whereDate('transactions.transaction_date', '>=', $filters['start_date']); } if (! empty($filters['end_date'])) { $query->whereDate('transactions.transaction_date', '<=', $filters['end_date']); } if (! empty($filters['order_by_date'])) { $order_by_date = in_array($filters['order_by_date'], ['asc', 'desc']) ? $filters['order_by_date'] : 'desc'; $query->orderBy('transactions.transaction_date', $order_by_date); } if (! empty($filters['user_id'])) { $query->where('transactions.created_by', $filters['user_id']); } if (! empty($filters['service_staff_id'])) { $query->where('transactions.res_waiter_id', $filters['service_staff_id']); } if (! empty($filters['shipping_status'])) { $query->where('transactions.shipping_status', $filters['shipping_status']); } if (! empty($filters['only_subscriptions']) && $filters['only_subscriptions'] == 1) { $query->where(function ($q) { $q->whereNotNull('transactions.recur_parent_id') ->orWhere('transactions.is_recurring', 1); }); } if (! empty($filters['source'])) { //only exception for woocommerce if ($filters['source'] == 'woocommerce') { $query->whereNotNull('transactions.woocommerce_order_id'); } else { $query->where('transactions.source', $filters['source']); } } $query->select('transactions.*', 'bl.name as location_name', 'bl.custom_field1 as location_custom_field1', 'isc.prefix as location_invoice_scheme_prefix', 'tab.name as table_name', 'tab.description as table_description', 'c.name as contact', 'cg.name as customer_group_name' ) ->groupBy('transactions.id'); $perPage = ! empty($filters['per_page']) ? $filters['per_page'] : $this->perPage; if ($perPage == -1) { $sells = $query->get(); } else { $sells = $query->paginate($perPage); $sells->appends(request()->query()); } return NewSellResource::collection($sells); } /** * New List contact * * @queryParam type required Type of contact (supplier, customer) * @queryParam customer_group_id id of the customer group * @queryParam custom_field_1 Custom field 1 of the contact * @queryParam contact_ids comma separated ids of contacts Example: 2,3 * @queryParam name Search term for contact name * @queryParam biz_name Search term for contact's business name * @queryParam mobile_num Search term for contact's mobile number * @queryParam contact_id Search term for contact's contact_id. Ex(CO0005) * @queryParam order_by Column name to sort the result, Column: name, supplier_business_name * @queryParam direction Direction to sort the result, Direction: desc, asc * @queryParam per_page Total records per page. default: 10, Set -1 for no pagination Example:10 * @response { "data": [ { "id": 18, "business_id": 1, "type": "customer", "name": "Mr. Rohit Kumar Agrawalla", "prefix": "Mr.", "first_name": "Rohit", "middle_name": "Kumar", "last_name": "Agrawalla", "email": null, "contact_status": "active", "mobile": "8596859647", "credit_limit": null, "converted_by": null, "converted_on": null, "balance": "40.0000", "total_rp": 0, "total_rp_used": 0, "total_rp_expired": 0, "customer_group_id": 1, "crm_source": null, "crm_life_stage": null, "custom_field1": null, "custom_field2": null, "custom_field3": null, "custom_field4": null, "custom_field5": null, "custom_field6": null, "custom_field7": null, "custom_field8": null, "custom_field9": null, "custom_field10": null, "remember_token": null, "password": null } ], "links": { "first": "http://local.pos.com/connector/api/new_contactapi?customer_group_id=1&page=1", "last": "http://local.pos.com/connector/api/new_contactapi?customer_group_id=1&page=1", "prev": null, "next": null }, "meta": { "current_page": 1, "from": 1, "last_page": 1, "path": "http://local.pos.com/connector/api/new_contactapi", "per_page": 10, "to": 1, "total": 1 } } */ public function newContactApi(Request $request) { $user = Auth::user(); $business_id = $user->business_id; $type = request()->get('type', null); $query = Contact::where('business_id', $business_id); if ($type == 'supplier') { $query->onlySuppliers(); } if ($type == 'customer') { $query->onlyCustomers(); } if (! empty(request()->input('custom_field_1'))) { $query->where('custom_field1', request()->input('custom_field_1')); } if (! empty(request()->input('customer_group_id'))) { $query->where('customer_group_id', request()->input('customer_group_id')); } if (! empty(request()->input('contact_ids'))) { $contact_ids = explode(',', request()->input('contact_ids')); $query->whereIn('id', $contact_ids); } $search = request()->only(['name', 'biz_name', 'mobile_num', 'contact_id']); if (! empty($search)) { $query->where(function ($query) use ($search) { if (! empty($search['name'])) { $query->where('contacts.name', 'like', '%'.$search['name'].'%'); } if (! empty($search['biz_name'])) { $query->orWhere('contacts.supplier_business_name', 'like', '%'.$search['biz_name'].'%'); } if (! empty($search['mobile_num'])) { $query->orWhere('contacts.mobile', 'like', '%'.$search['mobile_num'].'%') ->orWhere('contacts.landline', 'like', '%'.$search['mobile_num'].'%') ->orWhere('contacts.alternate_number', 'like', '%'.$search['mobile_num'].'%'); } if (! empty($search['contact_id'])) { $query->orWhere('contacts.contact_id', 'like', '%'.$search['contact_id'].'%'); } }); } $order_by = request()->input('order_by'); $order_by_dir = request()->input('direction'); if (! empty($order_by) && ! empty($order_by_dir)) { $query->orderBy($order_by, $order_by_dir); } $per_page = ! empty(request()->input('per_page')) ? request()->input('per_page') : $this->perPage; if ($per_page != -1) { $contacts = $query->paginate($per_page); $contacts->appends(request()->query()); } else { $contacts = $query->get(); } return NewContactResource::collection($contacts); } }