'desc']; use TabsOnEdit, HasConditionalContainer; // Use this Trait use NovaFieldHelper; /** * The model the resource corresponds to. * * @var string */ public static $model = 'Bytelaunch\ElysiumCore\Models\ElysiumClient\PotentialClient'; /** * The single value that should be used to represent the resource when being displayed. * * @var string */ public static $title = 'name'; /** * The columns that should be searched. * * @var array */ public static $search = [ 'email', 'phone', ['first_name', 'last_name'] ]; /** * Get the fields displayed by the resource. * * @param \Illuminate\Http\Request $request * @return array */ public function fields(Request $request) { if ($request instanceof \Laravel\Nova\Http\Requests\ResourceIndexRequest) { return $this->fieldsForIndex(); } else { return $this->allFields(); } } /** * Get the cards available for the request. * * @param \Illuminate\Http\Request $request * @return array */ public function cards(Request $request) { return [ (new ConvertPcCard)->width('1/6'), (new ConvertPcCard)->width('1/6')->onlyOnDetail(), ]; } /** * Get the filters available for the resource. * * @param \Illuminate\Http\Request $request * @return array */ public function filters(Request $request) { return []; } /** * Get the lenses available for the resource. * * @param \Illuminate\Http\Request $request * @return array */ public function lenses(Request $request) { return []; } /** * Get the actions available for the resource. * * @param \Illuminate\Http\Request $request * @return array */ public function actions(Request $request) { return [ //(new ConvertToPC())->withMeta([ //'showOnIndexToolbar' => false //]), (new RedFlag())->withMeta([ 'showOnIndexToolbar' => false ]), (new Offboard())->withMeta([ 'showOnIndexToolbar' => false ])->canSee(function() { return nova_get_setting('show_' . $this->attribute) || nova_get_setting('show_' . $this->attribute) === null;}), ]; } public function fieldsForIndex() { return [ Text::make('Name')->sortable(), Text::make('Matter', 'matter'), Select::make('Flux', 'flux')->options(config('elysium.options.flux'))->sortable(), InputMask::make('Phone', 'phone')->sortable(), Text::make('Email', 'email')->sortable(), TabsField::make('Stage', function () { return json_encode($this->getTabs()); }), Date::make('Date Created', 'created_at')->format('MMMM D, YYYY')->sortable(), Rating::make('Rating')->min(0)->max(5)->increment(0.5)->withStyles([ 'star-size' => 15, 'padding' => 1, 'active-color' => '#FED23A' ])->sortable(), Text::make('RF', function () { return $this->has_red_flag ? '🚩' : ''; })->sortable()->asHtml(), ]; } public function allFields() { return [ Rating::make('Rating')->min(0)->max(5)->increment(0.5)->withStyles([ 'star-size' => 15, 'padding' => 1, 'active-color' => '#FED23A' ]), Hidden::make('Case Type')->default('Potential'), Text::make('Name', function () { return $this->first_name . ' ' . $this->last_name; })->sortable(), Trix::make('Red Flag Notes', function () { return nl2br($this->red_flag_notes); })->canSee(function () { return $this->has_red_flag; })->alwaysShow(), Text::make('First Name', 'first_name')->required()->rules('required')->onlyOnForms(), Text::make('Last Name', 'last_name')->required()->rules('required')->onlyOnForms(), Text::make('Matter')->help( "For a Transactional Client, you would put 'Gen Corp,' while in the case of a Pre-Lit or Lit Client, you would put the name of one of the opposing sides/parties (e.g., 'Pinissi' or 'Pacific Construction')" ), Select::make('Flux', 'flux')->options(config('elysium.options.flux'))->default("Standard")->nullable()->enterprise()->readonly(function () { return !(auth()->user()->is_admin() || auth()->user()->is_mgmt()); }), new Tabs('Tabs', $this->getTabs()), InjectEditButtonResourceTool::make(), ]; } protected function addressFields() { return $this->merge([ Place::make('Address', 'address_line_1')->hideFromIndex(), Text::make('Address Line 2')->hideFromIndex(), Text::make('City')->hideFromIndex(), Text::make('State')->hideFromIndex(), Text::make('Postal Code')->hideFromIndex(), ]); } public function getTabs() { return [ 'PC Information' => [ // Company (nr) Select::make('Marketing Information', 'marketing_information')->options(config('elysium.options.marketing_information'))->nullable()->enterprise() ->canSee(function ($request) { return $request->user()->is_admin() || $request->user()->is_mgmt(); }), ConditionalContainer::make([ Text::make('Other Lead Source Details', 'other_lead_source_details')->canSee(function ($request) { return $request->user()->is_mgmt(); }) ])->if('marketing_information = "Other"'), ConditionalContainer::make([ Text::make('Who Referred the PC?', 'other_lead_source_details')->canSee(function ($request) { return $request->user()->is_mgmt(); }) ])->if('marketing_information = "Referral"'), Text::make('Address', 'address_line_1'), Text::make('Address Line 2')->hideFromIndex()->optional(), Text::make('City')->hideFromIndex(), Text::make('State')->hideFromIndex(), Text::make('Postal Code')->hideFromIndex(), Text::make('Email', 'email'), ConditionalContainer::make([ TextOrNaField::make('Company', 'company'), ])->if('flux = "Standard"'), InputMask::make('Phone', 'phone') ->mask('(###) ###-####')->required()->rules('required'), ], '10 Min Call' => [ ConditionalContainer::make([ NovaTinyMCE::make('Call Notes', 'call_notes')->alwaysShow()->readonly(function () { return !(auth()->user()->is_admin() || auth()->user()->is_mgmt()); }), TextareaOrNaField::make('Opposing Side(s)', 'caseinfo_opposing_side')->alwaysShow()->readonly(function () { return !(auth()->user()->is_admin() || auth()->user()->is_mgmt()); }), Select::make('1-Hour', 'call_one_hour_result')->options(config('elysium.options.call_one_hour_result'))->nullable()->readonly(function () { return !(auth()->user()->is_admin() || auth()->user()->is_mgmt()); }), ])->if('flux = "Standard"') ], 'Consult Sched' => [ ConditionalContainer::make([ YesNoField::make('Consultation Set?', 'consultation_by_telephone')->incomplete(2)->readonly(function () { return !(auth()->user()->is_admin() || auth()->user()->is_mgmt()); }), ConditionalContainer::make([ InputMask::make('Consultation Phone Number', 'consultation_conf_phone') ->mask('(###) ###-####')->readonly(function () { return !(auth()->user()->is_admin() || auth()->user()->is_mgmt()); }), Date::make('Date of Appointment', 'consultation_conf_date') ->format('MMMM D, YYYY')->readonly(function () { return !(auth()->user()->is_admin() || auth()->user()->is_mgmt()); }), Time::make('Time of Appointment', 'consultation_conf_time') ->format('HH:mm')->readonly(function () { return !(auth()->user()->is_admin() || auth()->user()->is_mgmt()); }), YesNoNaField::make('Payment Information Received', 'consultation_payment_information_received')->incomplete(2)->readonly(function () { return !(auth()->user()->is_admin() || auth()->user()->is_mgmt()); }), YesNoNaField::make('Payment Processed', 'consultation_payment_processed')->incomplete(2)->readonly(function () { return !(auth()->user()->is_admin() || auth()->user()->is_mgmt()); }) ])->if('consultation_by_telephone = 1'), //YesNoField::make('Documents Provided', 'consultation_docs_received_pre_consult') ])->if('flux = "Standard"'), Text::make('Fees', 'consultation_fees')->displayUsing(function($value) { return "$".MoneyHelper::clean($value); }) ->onlyOnDetail(), Currency::make('Fees', 'consultation_fees')->min(0)->max(1000)->step(0.01)->onlyOnForms() ->hideWhenCreating(), ], 'Intake Atty Consult' => [ // Textarea::make('Who Are We Representing', 'intake_who_are_we_representing')->alwaysShow()->hideWhenCreating(), // Textarea::make('Primary Address', 'intake_primary_address')->alwaysShow()->hideWhenCreating(), // Textarea::make('Primary Phone Number(s)', 'intake_primary_phone_numbers')->alwaysShow()->hideWhenCreating(), // Textarea::make('Primary Email(s)', 'intake_primary_emails')->alwaysShow()->hideWhenCreating(), // Heading::make('Retainer')->hideWhenCreating(), // Text::make('Retainer', 'intake_retainer_box')->hideWhenCreating(), // Select::make('Estimates', 'intake_estimate')->options(config('elysium.options.intake_estimate'))->displayUsingLabels()->hideWhenCreating()->nullable(), // NovaDependencyContainer::make([ // Text::make('Estimates (Other)', 'intake_estimate_other') // ])->dependsOn('intake_estimate', 'Custom range')->hideWhenCreating(), // Select::make('Fee Agreement Transmittal', 'intake_fee_agreement_transmittal')->options(config('elysium.options.intake_fee_agreement_transmittal'))->displayUsingLabels()->hideWhenCreating()->nullable(), // NovaDependencyContainer::make([ // Text::make('Fee Agreement Transmittal (Other)', 'intake_fee_agreement_transmittal_other'), // ])->dependsOn('intake_fee_agreement_transmittal', 'Other')->hideWhenCreating(), ConditionalContainer::make([ Heading::make('Case Information'), TextareaorNaField::make('Pending Deadline(s)', 'caseinfo_pending_deadlines')->alwaysShow()->readonly(function () { return !(auth()->user()->is_admin() || auth()->user()->is_mgmt() || auth()->user()->is_attorney()); }), TextareaorNaField::make('PC Provided Facts', 'caseinfo_provided_facts')->alwaysShow(), NovaTinyMCE::make('Intake Atty Notes', 'caseinfo_intake_atty_notes')->alwaysShow()->placeholder("")->readonly(function () { return !(auth()->user()->is_super() || auth()->user()->is_attorney()); }), Select::make('Consult Completed?', 'consultation_completed') ->options([ 'Yes' => 'Yes', 'No' => 'No', 'Must Offboard' => 'Must Offboard', ])->nullable()->incomplete('No')->readonly(function () { return !(auth()->user()->is_mgmt() || auth()->user()->is_attorney()); }), YesNoNaField::make('Send Fee Agreement?', 'caseinfo_send_fee_agreement')->readonly(function () { return !(auth()->user()->is_mgmt() || auth()->user()->is_attorney()); }), ConditionalContainer::make([ Select::make('What Kind of Fee Retainer?', 'caseinfo_fee_type') ->options(config('elysium.options.fee_type'))->readonly(function () { return !(auth()->user()->is_mgmt() || auth()->user()->is_attorney()); }), /*Text::make('Retainer Amount', 'caseinfo_retainer_amount')->displayUsing(function($value) { return "$".MoneyHelper::clean(floatval($value)); })->onlyOnDetail(), Currency::make('Retainer Amount', 'caseinfo_retainer_amount')->min(0)->max(1000000)->step(0.01)->onlyOnForms() ->hideWhenCreating(),*/ TextareaorNaField::make('Retainer Notes', 'caseinfo_fee_notes')->readonly(function () { return !(auth()->user()->is_mgmt() || auth()->user()->is_attorney()); }), ])->if('caseinfo_send_fee_agreement = 1'), Heading::make('Documents Requested/Received'), YesNoNaField::make('CC&Rs Requested?', 'docs_ccrs')->enterprise(), ConditionalContainer::make([ YesNoField::make('CC&Rs Received?', 'docs_ccrs_received')->incomplete(0)->incompleteIf(['docs_ccrs',1]), ])->if('docs_ccrs1 = 1'), YesNoNaField::make('Client Emails Requested?', 'docs_emails')->enterprise(), ConditionalContainer::make([ YesNoField::make('Client Emails Received?', 'docs_emails_received')->incomplete(0)->incompleteIf(['docs_emails',1]), ])->if('docs_emails = 1'), YesNoNaField::make('Pictures Requested?', 'docs_pictures'), ConditionalContainer::make([ YesNoField::make('Pictures Received?', 'docs_pictures_received')->incomplete(0)->incompleteIf(['docs_pictures',1]), ])->if('docs_pictures = 1'), YesNoNaField::make('Timeline Requested?', 'docs_timeline'), ConditionalContainer::make([ YesNoField::make('Timeline Received?', 'docs_timeline_received')->incomplete(0)->incompleteIf(['docs_timeline',1]), ])->if('docs_timeline = 1'), YesNoNaField::make('Minutes Requested?', 'docs_minutes'), ConditionalContainer::make([ YesNoField::make('Minutes Received?', 'docs_minutes_received')->incomplete(0)->incompleteIf(['docs_minutes',1]), ])->if('docs_minutes = 1'), YesNoNaField::make('Agreements Requested?', 'docs_agreements'), ConditionalContainer::make([ YesNoField::make('Agreements Received?', 'docs_agreements_received')->incomplete(0)->incompleteIf(['docs_agreements',1]), ])->if('docs_agreements = 1'), YesNoNaField::make('Corp. Docs Requested?', 'docs_corp_docs'), ConditionalContainer::make([ YesNoField::make('Corp. Docs Received?', 'docs_corp_received')->incomplete(0)->incompleteIf(['docs_corp_docs',1]), ])->if('docs_corp_docs = 1'), YesNoNaField::make('Emp. Docs Requested?', 'docs_emp_docs'), ConditionalContainer::make([ YesNoField::make('Emp. Docs Received?', 'docs_emp_docs_received')->incomplete(0)->incompleteIf(['docs_emp_docs',1]), ])->if('docs_emp_docs = 1'), YesNoNaField::make('Lit. Docs Requested?', 'docs_lit_docs'), ConditionalContainer::make([ YesNoField::make('Lit. Docs Received?', 'docs_lit_received')->incomplete(0)->incompleteIf(['docs_lit_docs',1]), ])->if('docs_lit_docs = 1'), TextareaorNaField::make('Other Documents Requested', 'docs_other') ])->if('flux = "Standard"') ], // 'Fee Agreement / Conflict Waiver_' . $this->tabHelper2([ // ['fee_agreement_follow_up_date', 0], // ]) => [ 'Fee Agreement / Conflict Waiver_' . $this->tabHelper([ //All need to be completed to be green // black -- a deadline has been missed ['fee_agreement_received_no_retainer', 'fee_agreement_follow_up_date', 0], ]) => [ YesNoField::make('Fee Agreement Sent to PC', 'fee_agrement_sent_to_client')->readonly(function () { return !auth()->user()->is_mgmt(); }), ConditionalContainer::make([ Date::make('Fee Agreement Sent Date', 'fee_agreement_sent_date')->format('MMMM D, YYYY')->readonly(function () { return !auth()->user()->is_mgmt(); }), //Date::make('Fee Agreement Follow Up Date', 'fee_agreement_follow_up_date')->format('MMMM D, YYYY'), YesNoField::make('Signed Fee Agreement Received by All Clients', 'fee_agreement_received_no_retainer')->readonly(function () { return !auth()->user()->is_mgmt(); }), ])->if('fee_agrement_sent_to_client = 1'), YesNoNaField::make('Retainer Received', 'fee_retainer_received_no_fee_agreement')->readonly(function () { return !auth()->user()->is_mgmt(); }), YesNoField::make(' Is a Conflict Waiver Necessary?', 'conflict_waiver_necessary')->readonly(function () { return !(auth()->user()->is_mgmt() || auth()->user()->is_attorney()); }), ConditionalContainer::make([ //YesNoField::make('Conflict Waiver Sent to PC', 'conflict_waiver_sent_to_pc'), //Date::make('Conflict Waiver Sent Date', 'conflict_waiver_sent_date'), //Date::make('Conflict Waiver Follow Up Date', 'conflict_waiver_follow_up_date'), YesNoField::make('Signed Conflict Waiver Received by All Clients', 'conflict_waiver_received_by_all_clients')->readonly(function () { return !auth()->user()->is_mgmt(); }), ])->if('conflict_waiver_necessary = 1'), ], ]; } public static function indexQuery(NovaRequest $request, $query) { $query ->selectRaw('*, CONCAT(first_name, " ", last_name) as name'); if (static::$defaultSort && empty($request->get('orderBy'))) { $query->getQuery()->orders = []; foreach (static::$defaultSort as $field => $order) { $query->orderBy($field, $order); } } return $query; } public function getNovaRequest(NovaRequest $request) { return $request; } }