false, 'read' => true, 'update' => true, 'delete' => false, ]; /** * Adding relation * Example : [ 'nexopos_users as user', 'user.id', '=', 'nexopos_orders.author_id' ] * * @param array */ public $relations = [ [ 'nexopos_users as customer', 'customer.id', '=', 'nexopos_customers_rewards.customer_id' ], ]; /** * all tabs mentionned on the tabs relations * are ignored on the parent model. */ protected $tabsRelations = [ // 'tab_name' => [ YourRelatedModel::class, 'localkey_on_relatedmodel', 'foreignkey_on_crud_model' ], ]; /** * Pick * Restrict columns you retrieve from relation. * Should be an array of associative keys, where * keys are either the related table or alias name. * Example : [ * 'user' => [ 'username' ], // here the relation on the table nexopos_users is using "user" as an alias * ] */ public $pick = [ 'customer' => [ 'name' ], ]; /** * Define where statement * * @var array **/ protected $listWhere = []; /** * Define where in statement * * @var array */ protected $whereIn = []; /** * Fields which will be filled during post/put */ public $fillable = [ 'target', 'points' ]; /** * Define Constructor */ public function __construct() { parent::__construct(); } /** * Return the label used for the crud * instance * * @return array **/ public function getLabels() { return [ 'list_title' => __( 'Customer Rewards List' ), 'list_description' => __( 'Display all customer rewards.' ), 'no_entry' => __( 'No customer rewards has been registered' ), 'create_new' => __( 'Add a new customer reward' ), 'create_title' => __( 'Create a new customer reward' ), 'create_description' => __( 'Register a new customer reward and save it.' ), 'edit_title' => __( 'Edit customer reward' ), 'edit_description' => __( 'Modify Customer Reward.' ), 'back_to_list' => __( 'Return to Customer Rewards' ), ]; } /** * Check whether a feature is enabled * **/ public function isEnabled( $feature ): bool { return false; // by default } /** * Fields * * @param object/null * @return array of field */ public function getForm( $entry = null ) { return [ 'main' => [ 'label' => __( 'Name' ), // 'name' => 'name', // 'value' => $entry->name ?? '', 'description' => __( 'Provide a name to the resource.' ), ], 'tabs' => [ 'general' => [ 'label' => __( 'General' ), 'fields' => [ [ 'type' => 'text', 'name' => 'points', 'label' => __( 'Points' ), 'value' => $entry->points ?? '', ], [ 'type' => 'text', 'name' => 'target', 'label' => __( 'Target' ), 'value' => $entry->target ?? '', ], ], ], ], ]; } /** * Filter POST input fields * * @param array of fields * @return array of fields */ public function filterPostInputs( $inputs ) { return $inputs; } /** * Filter PUT input fields * * @param array of fields * @return array of fields */ public function filterPutInputs( $inputs, CustomerReward $entry ) { return $inputs; } /** * Before saving a record * * @param Request $request * @return void */ public function beforePost( $request ) { return $request; } /** * After saving a record * * @param Request $request * @return void */ public function afterPost( $request, CustomerReward $entry ) { return $request; } /** * get * * @param string * @return mixed */ public function get( $param ) { switch ( $param ) { case 'model': return $this->model; break; } } /** * Before updating a record * * @param Request $request * @param object entry * @return void */ public function beforePut( $request, $entry ) { return $request; } /** * After updating a record * * @param Request $request * @param object entry * @return void */ public function afterPut( $request, $entry ) { return $request; } /** * Before Delete * * @return void */ public function beforeDelete( $namespace, $id, $model ) { // ... } /** * Define Columns */ public function getColumns(): array { return [ 'customer_name' => [ 'label' => __( 'Customer' ), '$direction' => '', '$sort' => false, ], 'reward_name' => [ 'label' => __( 'Reward Name' ), '$direction' => '', '$sort' => false, ], 'points' => [ 'label' => __( 'Points' ), '$direction' => '', '$sort' => false, ], 'target' => [ 'label' => __( 'Target' ), '$direction' => '', '$sort' => false, ], 'updated_at' => [ 'label' => __( 'Last Update' ), '$direction' => '', '$sort' => false, ], ]; } public function hook( $query ): void { $query->where( 'customer_id', request()->query( 'customer_id' ) ); } /** * Define actions */ public function setActions( CrudEntry $entry ): CrudEntry { // Snippet 1 $entry->action( identifier: 'edit', label: __( 'Edit' ), type: 'GOTO', url: ns()->url( '/dashboard/' . $this->getSlug() . '/edit/' . $entry->id ) ); // Snippet 2 $entry->action( identifier: 'delete', label: __( 'Delete' ), type: 'DELETE', url: ns()->url( '/api/crud/ns.customers-rewards/' . $entry->id ), confirm: [ 'message' => __( 'Would you like to delete this ?' ), ] ); return $entry; } public function getSlug(): string { return str_replace( '{customer_id}', request()->query( 'customer_id' ), $this->slug ); } /** * Bulk Delete Action * * @param object Request with object * @return false/array */ public function bulkAction( Request $request ) { /** * Deleting licence is only allowed for admin * and supervisor. */ if ( $request->input( 'action' ) == 'delete_selected' ) { /** * Will control if the user has the permissoin to do that. */ if ( $this->permissions[ 'delete' ] !== false ) { ns()->restrict( $this->permissions[ 'delete' ] ); } else { throw new NotAllowedException; } $status = [ 'success' => 0, 'error' => 0, ]; foreach ( $request->input( 'entries' ) as $id ) { $entity = $this->model::find( $id ); if ( $entity instanceof CustomerReward ) { $entity->delete(); $status[ 'success' ]++; } else { $status[ 'error' ]++; } } return $status; } return Hook::filter( $this->namespace . '-catch-action', false, $request ); } /** * get Links * * @return array of links */ public function getLinks(): array { return [ 'list' => 'javascript:void(0)', 'create' => 'javascript:void(0)', 'edit' => ns()->url( 'dashboard/' . $this->getSlug() . '/edit/' ), 'post' => ns()->url( 'api/crud/' . 'ns.customers-rewards' ), 'put' => ns()->url( 'api/crud/' . 'ns.customers-rewards/{id}' . '' ), ]; } /** * Get Bulk actions * * @return array of actions **/ public function getBulkActions(): array { return Hook::filter( $this->namespace . '-bulk', [ [ 'label' => __( 'Delete Selected Groups' ), 'identifier' => 'delete_selected', 'url' => ns()->route( 'ns.api.crud-bulk-actions', [ 'namespace' => $this->namespace, ] ), ], ] ); } /** * get exports * * @return array of export formats **/ public function getExports() { return []; } }