Commit 5c0ae05193a76285dcb193b906eb725441c64041
1 parent
3256f8927e
Exists in
master
task-132687 minor changes
Showing 12 changed files with 120 additions and 467 deletions Side-by-side Diff
- app/Classes/Tools.php
- app/Http/Controllers/EmployerController.php
- app/Http/Controllers/WorkerController.php
- app/Models/User.php
- resources/views/admin/worker/edit.blade.php
- resources/views/admin/worker/index.blade.php
- resources/views/employers/bd.blade.php
- resources/views/info_company_new.blade.php
- resources/views/modals/send_worker.blade.php
- resources/views/modals/vacancy/add_comment.blade.php
- resources/views/modals/vacancy/ask_for_resume_comment.blade.php
- routes/web.php
app/Classes/Tools.php
... | ... | @@ -51,13 +51,13 @@ class Tools |
51 | 51 | ]; |
52 | 52 | |
53 | 53 | foreach ($workerFields as $fieldName) { |
54 | - if (!empty($Worker->$fieldName)) { | |
54 | + if (!empty($Worker->$fieldName) && $Worker->$fieldName !== 'Не указано') { | |
55 | 55 | $persent += 2.8; |
56 | 56 | } |
57 | 57 | } |
58 | 58 | |
59 | 59 | foreach ($workerUserFields as $fieldName) { |
60 | - if (!empty($Worker->user->$fieldName)) { | |
60 | + if (!empty($Worker->users->$fieldName)) { | |
61 | 61 | $persent += 2.8; |
62 | 62 | } |
63 | 63 | } |
app/Http/Controllers/EmployerController.php
... | ... | @@ -566,8 +566,10 @@ class EmployerController extends Controller |
566 | 566 | } |
567 | 567 | |
568 | 568 | // Данные |
569 | - $users = $users->Baseuser()-> | |
570 | - orderByDesc(Worker::select('created_at')->whereColumn('workers.user_id', 'users.id')); | |
569 | + $users = $users | |
570 | + ->Baseuser() | |
571 | + ->orderByDesc(Worker::select('created_at') | |
572 | + ->whereColumn('workers.user_id', 'users.id')); | |
571 | 573 | $count_users = $users->count(); |
572 | 574 | $users = $users->paginate(10); |
573 | 575 |
app/Http/Controllers/WorkerController.php
... | ... | @@ -30,6 +30,7 @@ use Illuminate\Auth\Events\Registered; |
30 | 30 | use Illuminate\Database\Eloquent\Builder; |
31 | 31 | use Illuminate\Http\Request; |
32 | 32 | use Illuminate\Support\Facades\Auth; |
33 | +use Illuminate\Support\Facades\DB; | |
33 | 34 | use Illuminate\Support\Facades\Hash; |
34 | 35 | use Illuminate\Support\Facades\Storage; |
35 | 36 | use Illuminate\Support\Facades\Validator; |
... | ... | @@ -247,15 +248,14 @@ class WorkerController extends Controller |
247 | 248 | $status_work = WorkerStatuses::getWorkerStatuses(); |
248 | 249 | $infoblocks = infobloks::query()->get(); |
249 | 250 | |
250 | - //dd($Query[0]); | |
251 | - return view('layout.pdf', compact('Query', 'status_work', 'infoblocks')); | |
251 | + //return view('layout.pdf', compact('Query', 'status_work', 'infoblocks')); | |
252 | 252 | $pdf = PDF::loadView('layout.pdf', [ |
253 | 253 | 'Query' => $Query, |
254 | 254 | 'status_work' => $status_work, |
255 | 255 | 'infoblocks' => $infoblocks |
256 | 256 | ])->setPaper('a4', 'landscape'); |
257 | 257 | |
258 | - return $pdf->stream(); | |
258 | + return $pdf->download(); | |
259 | 259 | } |
260 | 260 | |
261 | 261 | public function resume_download_all(Request $request) { |
... | ... | @@ -276,18 +276,26 @@ class WorkerController extends Controller |
276 | 276 | return redirect()->back()->with('error', 'Пожалуйста выберите хотя бы 1 колонку для экспорта.'); |
277 | 277 | } |
278 | 278 | |
279 | - $query = User::select($columns) | |
280 | - ->leftJoin('workers', 'users.id', '=', 'workers.user_id') | |
281 | - ->leftJoin('job_titles', 'workers.position_work', '=', 'job_titles.id') | |
282 | - ->where('users.is_bd', '=', 1); | |
279 | + $jobIds = $request->input('job_title_list', []); | |
280 | + | |
281 | + $users = DB::select( | |
282 | + "select `job_titles`.`name`, `users`.`surname`, `users`.`name_man`, `users`.`surname2`, `users`.`email`, `users`.`telephone` | |
283 | + from users | |
284 | + join workers on `users`.`id` = `workers`.`user_id` | |
285 | + join `job_titles` | |
286 | + where `users`.`is_bd` = 1 | |
287 | + and (`workers`.`position_work` = `job_titles`.`id` | |
288 | + or exists (select 1 | |
289 | + from JSON_TABLE( | |
290 | + workers.positions_work, | |
291 | + '$[*]' COLUMNS (id INT PATH '$')) pw | |
292 | + where pw.id = job_titles.id) | |
293 | + )". ((!empty($jobIds)) ? 'and job_titles.id in ('. implode(',', $jobIds).')' : '') | |
294 | + ); | |
283 | 295 | |
284 | - $job_title_list = $request->input('job_title_list', []); | |
285 | - if (!empty($job_title_list)){ | |
286 | - $query->whereIn('job_titles.id', $job_title_list); | |
287 | - } | |
296 | + $users = collect($users); | |
288 | 297 | |
289 | - $users = $query->get(); | |
290 | - if ($users->count()){ | |
298 | + if ($users->count()) { | |
291 | 299 | $i = 2; |
292 | 300 | foreach ($users->toArray() as $user){ |
293 | 301 | $j = 0; |
... | ... | @@ -580,40 +588,12 @@ class WorkerController extends Controller |
580 | 588 | return json_encode(Array("ERROR" => "Error: Недостаточная длина пароля! Увеличьте себе длину пароля!")); |
581 | 589 | } |
582 | 590 | |
583 | - /*$haystack = $request->get('password'); | |
584 | - | |
585 | - $specsumbol = Array('!','~', '#', '$', '%', '^', '&', '*', '(', ')', '-', '=', ';', ':', '<', '>', '?'); | |
586 | - $alpha = Array('Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Z', | |
587 | - 'X', 'C', 'V', 'B', 'N', 'M'); | |
588 | - $lenpwd_bool = true; | |
589 | - $spec_bool = false; | |
590 | - $alpha_bool = false; | |
591 | - | |
592 | - if (strlen($haystack) < 8) $lenpwd_bool = false; | |
593 | - | |
594 | - foreach ($specsumbol as $it) { | |
595 | - if (strpos($haystack, $it) !== false) { | |
596 | - $spec_bool = true; | |
597 | - } | |
598 | - } | |
599 | - | |
600 | - foreach ($alpha as $it) { | |
601 | - if (strpos($haystack, $it) !== false) { | |
602 | - $alpha_bool = true; | |
603 | - } | |
604 | - } | |
605 | - | |
606 | - if ((!$spec_bool) || (!$alpha_bool)) { | |
607 | - return json_encode(Array("ERROR" => "Error: Нет спецсимволов в пароле, латинские буквы заглавные, а также один из символов: !~#$%^&*()-=;,:<>?")); | |
608 | - }*/ | |
609 | - | |
610 | 591 | if (($request->has('politik')) && ($request->get('politik') == 1)) { |
611 | 592 | $validator = Validator::make($params, $rules, $messages); |
612 | 593 | |
613 | 594 | if ($validator->fails()) { |
614 | 595 | return json_encode(array("ERROR" => "Error1: Регистрация оборвалась ошибкой! Не все обязательные поля заполнены. Либо вы уже были зарегистрированы в системе.")); |
615 | 596 | } else { |
616 | - //dd($params); | |
617 | 597 | $user = $this->create($params); |
618 | 598 | event(new Registered($user)); |
619 | 599 | Auth::guard()->login($user); |
app/Models/User.php
... | ... | @@ -6,6 +6,7 @@ namespace App\Models; |
6 | 6 | use Illuminate\Database\Eloquent\Factories\HasFactory; |
7 | 7 | use Illuminate\Foundation\Auth\User as Authenticatable; |
8 | 8 | use Illuminate\Notifications\Notifiable; |
9 | +use JsonException; | |
9 | 10 | use Laravel\Sanctum\HasApiTokens; |
10 | 11 | |
11 | 12 | class User extends Authenticatable |
... | ... | @@ -87,7 +88,8 @@ class User extends Authenticatable |
87 | 88 | * users - workers |
88 | 89 | */ |
89 | 90 | public function work() { |
90 | - return $this->hasMany(Worker::class, 'user_id')->select('telephone', 'email', 'position_work', 'persent_anketa'); | |
91 | + return $this->hasMany(Worker::class, 'user_id') | |
92 | + ->select('telephone', 'email', 'position_work', 'persent_anketa'); | |
91 | 93 | } |
92 | 94 | |
93 | 95 | /* |
... | ... | @@ -156,4 +158,22 @@ class User extends Authenticatable |
156 | 158 | return $query->where('admin', '=', '0'); |
157 | 159 | } |
158 | 160 | |
161 | + /** | |
162 | + * @throws JsonException | |
163 | + */ | |
164 | + public function getJobAttribute(): ?string | |
165 | + { | |
166 | + $positions = $this->workers[0]?->positions_work; | |
167 | + if (is_string($positions)) { | |
168 | + $jobIds = json_decode($positions, true, 512, JSON_THROW_ON_ERROR); | |
169 | + } else { | |
170 | + $jobIds = $positions; | |
171 | + } | |
172 | + | |
173 | + if ($jobIds !== null && count($jobIds) > 0) { | |
174 | + return Job_title::whereIn('id', $jobIds)->first()->name; | |
175 | + } | |
176 | + return null; | |
177 | + } | |
178 | + | |
159 | 179 | } |
resources/views/admin/worker/edit.blade.php
... | ... | @@ -15,48 +15,59 @@ use Illuminate\Support\Facades\Storage; |
15 | 15 | <label for="tab-btn-1">Общие настройки</label> |
16 | 16 | <input type="radio" name="tab-btn" id="tab-btn-2" value=""> |
17 | 17 | <label for="tab-btn-2">Анкета</label> |
18 | - <!--<input type="radio" name="tab-btn" id="tab-btn-3" value=""> | |
19 | - <label for="tab-btn-3">Вкладка 3</label>--> | |
20 | 18 | <div id="content-1"> |
19 | + | |
21 | 20 | <label class="block text-sm"> |
22 | - <span class="text-gray-700 dark:text-gray-400">Должность соискателя</span> | |
23 | - <select name="position_work" id="position_work" class="block w-full mt-1 text-sm dark:text-gray-300 dark:border-gray-600 dark:bg-gray-700 form-select focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:focus:shadow-outline-gray"> | |
24 | - @foreach($job_titles as $job) | |
25 | - <option value="{{ $job->id }}" | |
26 | - @if($worker->position_work == $job->id) | |
27 | - selected | |
28 | - @endif | |
29 | - >{{ $job->name }} ({{ $job->id }})</option> | |
21 | + <span class="text-gray-700 dark:text-gray-400">Должность</span> | |
22 | + <select | |
23 | + name="positions_work[]" | |
24 | + id="positions_work[]" | |
25 | + data-placeholder="Выберите должность" | |
26 | + {{--multiple="multiple"--}} | |
27 | + class="block w-full mt-1 text-sm dark:text-gray-300 dark:border-gray-600 dark:bg-gray-700 form-select focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:focus:shadow-outline-gray" | |
28 | + > | |
29 | + <option value="{{ null }}"> | |
30 | + Не выбрано | |
31 | + </option> | |
32 | + @foreach($job_titles as $job_title) | |
33 | + <option value="{{ $job_title->id }}" | |
34 | + @if ($worker?->positions_work && in_array($job_title->id , $worker->positions_work)) | |
35 | + selected | |
36 | + @endif | |
37 | + > | |
38 | + {{ $job_title->name }} ({{ $job_title->id }}) | |
39 | + </option> | |
30 | 40 | @endforeach |
31 | 41 | </select> |
32 | - @error('position_work') | |
42 | + @error('positions_work') | |
33 | 43 | <span class="text-xs text-red-600 dark:text-red-400"> |
34 | 44 | {{ $message }} |
35 | 45 | </span> |
36 | 46 | @enderror |
37 | - </label><br> | |
38 | - | |
47 | + </label> | |
48 | + <br> | |
39 | 49 | <label class="block text-sm"> |
40 | 50 | <p class="text-gray-700 dark:text-gray-400" style="float:left; margin-right: 10px">Избранный кандидат </p> |
41 | 51 | <input type="hidden" name="favorite_user" value="0" /> |
42 | - <input name="favorite_user" <? if ($worker->favorite_user) echo "checked";?> | |
52 | + <input name="favorite_user" <?= $worker->favorite_user ? "checked" : '';?> | |
43 | 53 | class="block mt-1 text-sm dark:border-gray-600 dark:bg-gray-700 focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:text-gray-300 dark:focus:shadow-outline-gray " |
44 | 54 | placeholder="" type="checkbox" value="1" |
45 | 55 | /><br> |
46 | 56 | |
47 | 57 | <p class="text-gray-700 dark:text-gray-400" style="float:left; margin-right: 10px">Срочный кандидат</p> |
48 | 58 | <input type="hidden" name="sroch_user" value="0" /> |
49 | - <input name="sroch_user" id="sroch_user" <? if ($worker->sroch_user) echo "checked";?> | |
59 | + <input name="sroch_user" id="sroch_user" <?= $worker->sroch_user ? "checked" : '';?> | |
50 | 60 | class="block mt-1 text-sm dark:border-gray-600 dark:bg-gray-700 focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:text-gray-300 dark:focus:shadow-outline-gray " |
51 | 61 | placeholder="" type="checkbox" value="1" |
52 | 62 | /><br> |
53 | 63 | |
54 | 64 | </label> |
55 | - | |
65 | + <br> | |
56 | 66 | <label class="block text-sm"> |
57 | 67 | <p class="text-gray-700 dark:text-gray-400" style="float:left; margin-right: 10px">Анкета действительна до <span style="color:#333">{{ $time_end_anketa }}</span></p> |
58 | 68 | |
59 | - </label><br> | |
69 | + </label> | |
70 | + <br> | |
60 | 71 | </div> |
61 | 72 | <div id="content-2"> |
62 | 73 | <label class="block text-sm"> |
... | ... | @@ -147,11 +158,8 @@ use Illuminate\Support\Facades\Storage; |
147 | 158 | >{{ old('text') ?? $worker->text ?? '' }}</textarea> |
148 | 159 | </label> |
149 | 160 | </div> |
150 | - <div id="content-3"> | |
151 | - | |
152 | - </div> | |
153 | - </div><br> | |
154 | - | |
161 | + </div> | |
162 | + <br> | |
155 | 163 | <div class="flex flex-col flex-wrap mb-4 space-y-4 md:flex-row md:items-end md:space-x-4"> |
156 | 164 | <div> |
157 | 165 | <button type="submit" class="px-3 py-1 text-sm font-medium leading-5 text-white transition-colors duration-150 bg-purple-600 border border-transparent rounded-md active:bg-purple-600 hover:bg-purple-700 focus:outline-none focus:shadow-outline-purple"> |
... | ... | @@ -165,227 +173,4 @@ use Illuminate\Support\Facades\Storage; |
165 | 173 | </div> |
166 | 174 | </div> |
167 | 175 | </form> |
168 | - <!-- | |
169 | - <label class="block mt-4 text-sm"> | |
170 | - <span class="text-gray-700 dark:text-gray-400"> | |
171 | - Requested Limit | |
172 | - </span> | |
173 | - <select | |
174 | - class="block w-full mt-1 text-sm dark:text-gray-300 dark:border-gray-600 dark:bg-gray-700 form-select focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:focus:shadow-outline-gray" | |
175 | - > | |
176 | - <option>$1,000</option> | |
177 | - <option>$5,000</option> | |
178 | - <option>$10,000</option> | |
179 | - <option>$25,000</option> | |
180 | - </select> | |
181 | - </label> | |
182 | - | |
183 | - <label class="block mt-4 text-sm"> | |
184 | - <span class="text-gray-700 dark:text-gray-400"> | |
185 | - Multiselect | |
186 | - </span> | |
187 | - <select | |
188 | - class="block w-full mt-1 text-sm dark:text-gray-300 dark:border-gray-600 dark:bg-gray-700 form-multiselect focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:focus:shadow-outline-gray" | |
189 | - multiple | |
190 | - > | |
191 | - <option>Option 1</option> | |
192 | - <option>Option 2</option> | |
193 | - <option>Option 3</option> | |
194 | - <option>Option 4</option> | |
195 | - <option>Option 5</option> | |
196 | - </select> | |
197 | - </label> | |
198 | - | |
199 | - <label class="block mt-4 text-sm"> | |
200 | - <span class="text-gray-700 dark:text-gray-400">Message</span> | |
201 | - <textarea | |
202 | - class="block w-full mt-1 text-sm dark:text-gray-300 dark:border-gray-600 dark:bg-gray-700 form-textarea focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:focus:shadow-outline-gray" | |
203 | - rows="3" | |
204 | - placeholder="Enter some long form content." | |
205 | - ></textarea> | |
206 | - </label> | |
207 | - | |
208 | - <div class="flex mt-6 text-sm"> | |
209 | - <label class="flex items-center dark:text-gray-400"> | |
210 | - <input | |
211 | - type="checkbox" | |
212 | - class="text-purple-600 form-checkbox focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:focus:shadow-outline-gray" | |
213 | - /> | |
214 | - <span class="ml-2"> | |
215 | - I agree to the | |
216 | - <span class="underline">privacy policy</span> | |
217 | - </span> | |
218 | - </label> | |
219 | - </div> | |
220 | -</div> | |
221 | - | |
222 | -<!-- Validation inputs --> | |
223 | - <!--<h4 | |
224 | - class="mb-4 text-lg font-semibold text-gray-600 dark:text-gray-300" | |
225 | - > | |
226 | - Validation | |
227 | - </h4> | |
228 | - <div | |
229 | - class="px-4 py-3 mb-8 bg-white rounded-lg shadow-md dark:bg-gray-800" | |
230 | - > | |
231 | - <!-- Invalid input --> | |
232 | - <!--<label class="block text-sm"> | |
233 | - <span class="text-gray-700 dark:text-gray-400"> | |
234 | - Invalid input | |
235 | - </span> | |
236 | - <input | |
237 | - class="block w-full mt-1 text-sm border-red-600 dark:text-gray-300 dark:bg-gray-700 focus:border-red-400 focus:outline-none focus:shadow-outline-red form-input" | |
238 | - placeholder="Jane Doe" | |
239 | - /> | |
240 | - <span class="text-xs text-red-600 dark:text-red-400"> | |
241 | - Your password is too short. | |
242 | - </span> | |
243 | - </label> | |
244 | - | |
245 | - <!-- Valid input --> | |
246 | - <!--<label class="block mt-4 text-sm"> | |
247 | - <span class="text-gray-700 dark:text-gray-400"> | |
248 | - Valid input | |
249 | - </span> | |
250 | - <input | |
251 | - class="block w-full mt-1 text-sm border-green-600 dark:text-gray-300 dark:bg-gray-700 focus:border-green-400 focus:outline-none focus:shadow-outline-green form-input" | |
252 | - placeholder="Jane Doe" | |
253 | - /> | |
254 | - <span class="text-xs text-green-600 dark:text-green-400"> | |
255 | - Your password is strong. | |
256 | - </span> | |
257 | - </label> | |
258 | - | |
259 | - <!-- Helper text --> | |
260 | - <!--<label class="block mt-4 text-sm"> | |
261 | - <span class="text-gray-700 dark:text-gray-400"> | |
262 | - Helper text | |
263 | - </span> | |
264 | - <input | |
265 | - class="block w-full mt-1 text-sm dark:text-gray-300 dark:border-gray-600 dark:bg-gray-700 focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:focus:shadow-outline-gray form-input" | |
266 | - placeholder="Jane Doe" | |
267 | - /> | |
268 | - <span class="text-xs text-gray-600 dark:text-gray-400"> | |
269 | - Your password must be at least 6 characters long. | |
270 | - </span> | |
271 | - </label> | |
272 | -</div> | |
273 | - | |
274 | -<!-- Inputs with icons --> | |
275 | - <!--<h4 | |
276 | - class="mb-4 text-lg font-semibold text-gray-600 dark:text-gray-300" | |
277 | - > | |
278 | - Icons | |
279 | - </h4> | |
280 | - <div | |
281 | - class="px-4 py-3 mb-8 bg-white rounded-lg shadow-md dark:bg-gray-800" | |
282 | - > | |
283 | - <label class="block text-sm"> | |
284 | - <span class="text-gray-700 dark:text-gray-400">Icon left</span> | |
285 | - <!-- focus-within sets the color for the icon when input is focused --> | |
286 | - <!--<div | |
287 | - class="relative text-gray-500 focus-within:text-purple-600 dark:focus-within:text-purple-400" | |
288 | - > | |
289 | - <input | |
290 | - class="block w-full pl-10 mt-1 text-sm text-black dark:text-gray-300 dark:border-gray-600 dark:bg-gray-700 focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:focus:shadow-outline-gray form-input" | |
291 | - placeholder="Jane Doe" | |
292 | - /> | |
293 | - <div | |
294 | - class="absolute inset-y-0 flex items-center ml-3 pointer-events-none" | |
295 | - > | |
296 | - <svg | |
297 | - class="w-5 h-5" | |
298 | - aria-hidden="true" | |
299 | - fill="none" | |
300 | - stroke-linecap="round" | |
301 | - stroke-linejoin="round" | |
302 | - stroke-width="2" | |
303 | - viewBox="0 0 24 24" | |
304 | - stroke="currentColor" | |
305 | - > | |
306 | - <path | |
307 | - d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" | |
308 | - ></path> | |
309 | - </svg> | |
310 | - </div> | |
311 | - </div> | |
312 | -</label> | |
313 | - | |
314 | -<label class="block mt-4 text-sm"> | |
315 | - <span class="text-gray-700 dark:text-gray-400">Icon right</span> | |
316 | - <!-- focus-within sets the color for the icon when input is focused --> | |
317 | - <!--<div | |
318 | - class="relative text-gray-500 focus-within:text-purple-600 dark:focus-within:text-purple-400" | |
319 | - > | |
320 | - <input | |
321 | - class="block w-full pr-10 mt-1 text-sm text-black dark:text-gray-300 dark:border-gray-600 dark:bg-gray-700 focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:focus:shadow-outline-gray form-input" | |
322 | - placeholder="Jane Doe" | |
323 | - /> | |
324 | - <div | |
325 | - class="absolute inset-y-0 right-0 flex items-center mr-3 pointer-events-none" | |
326 | - > | |
327 | - <svg | |
328 | - class="w-5 h-5" | |
329 | - aria-hidden="true" | |
330 | - fill="none" | |
331 | - stroke-linecap="round" | |
332 | - stroke-linejoin="round" | |
333 | - stroke-width="2" | |
334 | - viewBox="0 0 24 24" | |
335 | - stroke="currentColor" | |
336 | - > | |
337 | - <path | |
338 | - d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" | |
339 | - ></path> | |
340 | - </svg> | |
341 | - </div> | |
342 | - </div> | |
343 | -</label> | |
344 | -</div> | |
345 | - | |
346 | -<!-- Inputs with buttons --> | |
347 | - <!--<h4 | |
348 | - class="mb-4 text-lg font-semibold text-gray-600 dark:text-gray-300" | |
349 | - > | |
350 | - Buttons | |
351 | - </h4> | |
352 | - <div | |
353 | - class="px-4 py-3 mb-8 bg-white rounded-lg shadow-md dark:bg-gray-800" | |
354 | - > | |
355 | - <label class="block text-sm"> | |
356 | - <span class="text-gray-700 dark:text-gray-400"> | |
357 | - Button left | |
358 | - </span> | |
359 | - <div class="relative"> | |
360 | - <input | |
361 | - class="block w-full pl-20 mt-1 text-sm dark:text-gray-300 dark:border-gray-600 dark:bg-gray-700 focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:focus:shadow-outline-gray form-input" | |
362 | - placeholder="Jane Doe" | |
363 | - /> | |
364 | - <button | |
365 | - class="absolute inset-y-0 px-4 text-sm font-medium leading-5 text-white transition-colors duration-150 bg-purple-600 border border-transparent rounded-l-md active:bg-purple-600 hover:bg-purple-700 focus:outline-none focus:shadow-outline-purple dark:focus:shadow-outline-gray" | |
366 | - > | |
367 | - Click | |
368 | - </button> | |
369 | - </div> | |
370 | - </label> | |
371 | - | |
372 | - <label class="block mt-4 text-sm"> | |
373 | - <span class="text-gray-700 dark:text-gray-400"> | |
374 | - Button right | |
375 | - </span> | |
376 | - <div | |
377 | - class="relative text-gray-500 focus-within:text-purple-600" | |
378 | - > | |
379 | - <input | |
380 | - class="block w-full pr-20 mt-1 text-sm text-black dark:text-gray-300 dark:border-gray-600 dark:bg-gray-700 focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:focus:shadow-outline-gray form-input" | |
381 | - placeholder="Jane Doe" | |
382 | - /> | |
383 | - <button | |
384 | - class="absolute inset-y-0 right-0 px-4 text-sm font-medium leading-5 text-white transition-colors duration-150 bg-purple-600 border border-transparent rounded-r-md active:bg-purple-600 hover:bg-purple-700 focus:outline-none focus:shadow-outline-purple" | |
385 | - > | |
386 | - Click | |
387 | - </button> | |
388 | - </div> | |
389 | - </label> | |
390 | - </div>--> | |
391 | 176 | @endsection |
resources/views/admin/worker/index.blade.php
... | ... | @@ -145,8 +145,8 @@ |
145 | 145 | </td> |
146 | 146 | |
147 | 147 | <td class="px-4 py-3 text-xs"> |
148 | - @if (isset($user->jobtitles[0]->name)) | |
149 | - {{ $user->jobtitles[0]->name }} | |
148 | + @if ($user->job !== null) | |
149 | + {{ $user->job }} | |
150 | 150 | @else |
151 | 151 | Не задана |
152 | 152 | @endif |
... | ... | @@ -169,107 +169,5 @@ |
169 | 169 | <div class="grid px-4 py-3 text-xs font-semibold tracking-wide text-gray-500 uppercase border-t dark:border-gray-700 bg-gray-50 sm:grid-cols-9 dark:text-gray-400 dark:bg-gray-800"> |
170 | 170 | <?=$users->appends($_GET)->links('admin.pagginate'); ?> |
171 | 171 | </div> |
172 | - | |
173 | - | |
174 | - <!--<div | |
175 | - class="grid px-4 py-3 text-xs font-semibold tracking-wide text-gray-500 uppercase border-t dark:border-gray-700 bg-gray-50 sm:grid-cols-9 dark:text-gray-400 dark:bg-gray-800" | |
176 | - > | |
177 | - <span class="flex items-center col-span-3"> | |
178 | - Showing 21-30 of 100 | |
179 | - </span> | |
180 | - <span class="col-span-2"></span> | |
181 | - | |
182 | - <span class="flex col-span-4 mt-2 sm:mt-auto sm:justify-end"> | |
183 | - <nav aria-label="Table navigation"> | |
184 | - <ul class="inline-flex items-center"> | |
185 | - <li> | |
186 | - <button | |
187 | - class="px-3 py-1 rounded-md rounded-l-lg focus:outline-none focus:shadow-outline-purple" | |
188 | - aria-label="Previous" | |
189 | - > | |
190 | - <svg | |
191 | - aria-hidden="true" | |
192 | - class="w-4 h-4 fill-current" | |
193 | - viewBox="0 0 20 20" | |
194 | - > | |
195 | - <path | |
196 | - d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z" | |
197 | - clip-rule="evenodd" | |
198 | - fill-rule="evenodd" | |
199 | - ></path> | |
200 | - </svg> | |
201 | - </button> | |
202 | - </li> | |
203 | - <li> | |
204 | - <button | |
205 | - class="px-3 py-1 rounded-md focus:outline-none focus:shadow-outline-purple" | |
206 | - > | |
207 | - 1 | |
208 | - </button> | |
209 | - </li> | |
210 | - <li> | |
211 | - <button | |
212 | - class="px-3 py-1 rounded-md focus:outline-none focus:shadow-outline-purple" | |
213 | - > | |
214 | - 2 | |
215 | - </button> | |
216 | - </li> | |
217 | - <li> | |
218 | - <button | |
219 | - class="px-3 py-1 text-white transition-colors duration-150 bg-purple-600 border border-r-0 border-purple-600 rounded-md focus:outline-none focus:shadow-outline-purple" | |
220 | - > | |
221 | - 3 | |
222 | - </button> | |
223 | - </li> | |
224 | - <li> | |
225 | - <button | |
226 | - class="px-3 py-1 rounded-md focus:outline-none focus:shadow-outline-purple" | |
227 | - > | |
228 | - 4 | |
229 | - </button> | |
230 | - </li> | |
231 | - <li> | |
232 | - <span class="px-3 py-1">...</span> | |
233 | - </li> | |
234 | - <li> | |
235 | - <button | |
236 | - class="px-3 py-1 rounded-md focus:outline-none focus:shadow-outline-purple" | |
237 | - > | |
238 | - 8 | |
239 | - </button> | |
240 | - </li> | |
241 | - <li> | |
242 | - <button | |
243 | - class="px-3 py-1 rounded-md focus:outline-none focus:shadow-outline-purple" | |
244 | - > | |
245 | - 9 | |
246 | - </button> | |
247 | - </li> | |
248 | - <li> | |
249 | - <button | |
250 | - class="px-3 py-1 rounded-md rounded-r-lg focus:outline-none focus:shadow-outline-purple" | |
251 | - aria-label="Next" | |
252 | - > | |
253 | - <svg | |
254 | - class="w-4 h-4 fill-current" | |
255 | - aria-hidden="true" | |
256 | - viewBox="0 0 20 20" | |
257 | - > | |
258 | - <path | |
259 | - d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" | |
260 | - clip-rule="evenodd" | |
261 | - fill-rule="evenodd" | |
262 | - ></path> | |
263 | - </svg> | |
264 | - </button> | |
265 | - </li> | |
266 | - </ul> | |
267 | - </nav> | |
268 | - </span> | |
269 | - </div>--> | |
270 | 172 | </div> |
271 | - | |
272 | - <?//=$users->appends($_GET)->links('catalogs.paginate'); ?> | |
273 | - | |
274 | - | |
275 | 173 | @endsection |
resources/views/employers/bd.blade.php
... | ... | @@ -136,7 +136,7 @@ |
136 | 136 | </div> |
137 | 137 | <span> |
138 | 138 | Пользователей найдено: |
139 | - <b>{{ $users->count() }}</b> | |
139 | + <b>{{ $count_users }}</b> | |
140 | 140 | </span> |
141 | 141 | </div> |
142 | 142 | <div class="table table_spoiler"> |
... | ... | @@ -167,12 +167,7 @@ |
167 | 167 | |
168 | 168 | <td> |
169 | 169 | @if($it->workers[0]->positions_work) |
170 | - @foreach($it->workers[0]->jobs as $job) | |
171 | - {{ $job->name }} | |
172 | - @if(!$loop->last) | |
173 | - <br> | |
174 | - @endif | |
175 | - @endforeach | |
170 | + {{ $it->workers[0]->jobs->first()->name }} | |
176 | 171 | @endif |
177 | 172 | </td> |
178 | 173 |
resources/views/info_company_new.blade.php
... | ... | @@ -5,7 +5,6 @@ |
5 | 5 | $(document).on('change', '#sort_ajax', function() { |
6 | 6 | var this_ = $(this); |
7 | 7 | var val_ = this_.val(); |
8 | - console.log('sort items '+val_); | |
9 | 8 | |
10 | 9 | $.ajax({ |
11 | 10 | type: "GET", |
... | ... | @@ -30,8 +29,6 @@ |
30 | 29 | url: "{{ route('shipping_companies') }}", |
31 | 30 | data: "sort="+val_+"&block=2", |
32 | 31 | success: function (data) { |
33 | - console.log('Выбор сортировки2'); | |
34 | - console.log(data); | |
35 | 32 | history.pushState({}, '', "{{ route('shipping_companies') }}?sort="+val_+"@if (isset($_GET['page']))&page={{ $_GET['page'] }}@endif"); |
36 | 33 | $('#block_2').html(data); |
37 | 34 | }, |
... | ... | @@ -49,7 +46,6 @@ |
49 | 46 | var sel = $('#select2-sort_ajax-container'); |
50 | 47 | var key = getUrlParameter('sort'); |
51 | 48 | if (key !=='') { |
52 | - console.log(key); | |
53 | 49 | switch (key) { |
54 | 50 | case "default": sel.html('Сортировка (по умолчанию)'); break; |
55 | 51 | case "name_up": sel.html('По имени (возрастание)'); break; |
... | ... | @@ -61,23 +57,6 @@ |
61 | 57 | } |
62 | 58 | }); |
63 | 59 | |
64 | - //end | |
65 | - $(document).on('click', '.js_send_it_button', function() { | |
66 | - var this_ = $(this); | |
67 | - var code_user_id = this_.attr('data-uid'); | |
68 | - var code_to_user_id = this_.attr('data-tuid'); | |
69 | - var code_vacancy = this_.attr('data-vacancy'); | |
70 | - var user_id = $('#send_user_id'); | |
71 | - var to_user_id = $('#send_to_user_id'); | |
72 | - var vacancy = $('#send_vacancy'); | |
73 | - | |
74 | - console.log('Клик на кнопки...'); | |
75 | - | |
76 | - user_id.val(code_user_id); | |
77 | - to_user_id.val(code_to_user_id); | |
78 | - vacancy.val(code_vacancy); | |
79 | - }); | |
80 | - | |
81 | 60 | $("#list_button").on('click', function () { |
82 | 61 | $('#flot').removeClass('active'); |
83 | 62 | $('#flot_list').removeClass('showed'); |
... | ... | @@ -86,6 +65,7 @@ |
86 | 65 | }) |
87 | 66 | </script> |
88 | 67 | @include('js.favorite-vacancy-45') |
68 | + @include('js.vacancy-response') | |
89 | 69 | @endsection |
90 | 70 | |
91 | 71 | @section('content') |
... | ... | @@ -113,7 +93,6 @@ |
113 | 93 | @endif |
114 | 94 | |
115 | 95 | <h1 class="thing__title">{{ $company[0]->name_company }}</h1> |
116 | - <!--<p class="thing__text"> $company[0]->text !!}</p>--> | |
117 | 96 | <div class="thing__buttons"> |
118 | 97 | <a href="#vacancy" id="list_button"> |
119 | 98 | <button type="button" class="button"> |
... | ... | @@ -123,16 +102,28 @@ |
123 | 102 | {{ $company[0]->ads->count() }} вакансии |
124 | 103 | </button> |
125 | 104 | </a> |
126 | - @if ($user_id == 0) | |
127 | - <a data-fancybox data-src="#question" data-options='{"touch":false,"autoFocus":false}' class="js_send_it_button button"> | |
105 | + @guest | |
106 | + <a | |
107 | + data-fancybox | |
108 | + data-src="#question" | |
109 | + data-options='{"touch":false,"autoFocus":false}' | |
110 | + class="button"> | |
128 | 111 | Написать сообщение |
129 | 112 | </a> |
130 | 113 | @else |
131 | - <button type="button" data-fancybox data-src="#send" data-vacancy="0" data-uid="{{ $user_id }}" data-tuid="{{ $company[0]->users->id }}" data-options='{"touch":false,"autoFocus":false}' | |
132 | - class="button js_send_it_button"> | |
133 | - Написать сообщение | |
134 | - </button> | |
135 | - @endif | |
114 | + @if (App\Classes\StatusUser::Status() == 1) | |
115 | + <a | |
116 | + data-fancybox | |
117 | + data-src="#send3" | |
118 | + data-vacancy="0" | |
119 | + data-uid="{{ $user_id }}" | |
120 | + data-tuid="{{ $company[0]->users->id }}" | |
121 | + data-options='{"touch":false,"autoFocus":false}' | |
122 | + class="button"> | |
123 | + Написать сообщение | |
124 | + </a> | |
125 | + @endif | |
126 | + @endguest | |
136 | 127 | </div> |
137 | 128 | </div> |
138 | 129 | </div> |
... | ... | @@ -250,13 +241,17 @@ |
250 | 241 | </div> |
251 | 242 | @endif |
252 | 243 | <div class="main__employer-page-two-item-buttons"> |
253 | - | |
254 | - <button type="button" data-fancybox data-src="#send" data-vacancy="{{ $job->id }}" data-uid="{{ $user_id }}" data-tuid="{{ $company[0]->users->id }}" data-options='{"touch":false,"autoFocus":false}' | |
255 | - class="button main__employer-page-two-item-button js_send_it_button">Оставить | |
256 | - отклик...</button> | |
257 | - | |
258 | - <!--<a href="#" | |
259 | - class="button button_light main__employer-page-two-item-button">Подробнее</a>--> | |
244 | + <button type="button" | |
245 | + data-fancybox | |
246 | + data-src="#send3" | |
247 | + data-vacancy="{{ $job->id }}" | |
248 | + data-uid="{{ $user_id }}" | |
249 | + data-tuid="{{ $company[0]->users->id }}" | |
250 | + data-options='{"touch":false,"autoFocus":false}' | |
251 | + class="button main__employer-page-two-item-button js_send_it_button" | |
252 | + > | |
253 | + Оставить отклик | |
254 | + </button> | |
260 | 255 | </div> |
261 | 256 | <div class="main__employer-page-two-item-bottom"> |
262 | 257 | <div class="main__employer-page-two-item-bottom-date">{{ date('d.m.Y H:i:s', strtotime($job->updated_at)) }}</div> |
resources/views/modals/send_worker.blade.php
... | ... | @@ -3,8 +3,6 @@ |
3 | 3 | var val = $(this).val(); |
4 | 4 | var send_title = $('#send_title'); |
5 | 5 | var send_title_val = send_title.val(); |
6 | - | |
7 | - console.log('Click form.'); | |
8 | 6 | }); |
9 | 7 | |
10 | 8 | $(document).on('change', '#btn_send_file', function() { |
... | ... | @@ -13,7 +11,6 @@ |
13 | 11 | var send_name_val = send_name.val(); |
14 | 12 | var send_name_file = $('#send_name_file'); |
15 | 13 | |
16 | - console.log(send_name_val); | |
17 | 14 | send_name_file.html(send_name_val); |
18 | 15 | |
19 | 16 | }); |
... | ... | @@ -31,20 +28,6 @@ |
31 | 28 | Вакансия: |
32 | 29 | <input type="text" id="send_vacancy" name="send_vacancy" class="input" placeholder="vacancy" value=""> |
33 | 30 | </div> |
34 | - <div class="modal__form-item send_title_div error_"> | |
35 | - <input id="send_title" name="send_title" type="text" class="input" placeholder="Тема" required> | |
36 | - <label for="title">Не заполнено поле</label> | |
37 | - </div> | |
38 | - <div class="modal__form-item send_title_div error_"> | |
39 | - <select class="js-select2" name="send_job_title_id" id="send_job_title_id"> | |
40 | - @if ($jobs->count()) | |
41 | - @foreach($jobs as $j) | |
42 | - <option value="{{ $j->id }}">{{ $j->name }} ({{ $j->id }})</option> | |
43 | - @endforeach | |
44 | - @endif | |
45 | - </select> | |
46 | - <label for="title">Не заполнено поле</label> | |
47 | - </div> | |
48 | 31 | <div class="modal__form-item send_text_div"> |
49 | 32 | <textarea id="i2" class="textarea" id="send_text" name="send_text" placeholder="Укажите по какому поводу вы пишите работодателю, уточните название вакансии или прикрепите ссылку на вакансию, дайте как можно больше информации. ВАЖНО не стоит писать работодателю короткий текст цитирую «Какая зарплата?, работодатель не поймет о чем речь, опишите вопрос максимально подробно»." required></textarea> |
50 | 33 | <label for="i2">Не заполнено поле</label> |
resources/views/modals/vacancy/add_comment.blade.php
1 | +<script> | |
2 | + $('[data-fancybox]').fancybox({ | |
3 | + autoFocus: false | |
4 | + }); | |
5 | +</script> | |
1 | 6 | <div id="add_comment" class="modal"> |
2 | 7 | <div class="modal__body"> |
3 | 8 | <div class="modal__title">Комментарий для работодателя</div> |
... | ... | @@ -18,8 +23,7 @@ |
18 | 23 | name="text" |
19 | 24 | placeholder="Пожалуйста напишите в комментарии вашу должность, номер телефона и дату готовности к посадке." |
20 | 25 | required |
21 | - value=""> | |
22 | - </textarea> | |
26 | + value=""></textarea> | |
23 | 27 | <label for="comment_text">Не заполнено поле</label> |
24 | 28 | </div> |
25 | 29 | <div class="modal__form-item"> |
resources/views/modals/vacancy/ask_for_resume_comment.blade.php
routes/web.php
... | ... | @@ -105,16 +105,6 @@ Auth::routes(['verify' => true]); |
105 | 105 | //Личный кабинет пользователя |
106 | 106 | Route::get('/home', [HomeController::class, 'index'])->name('home'); |
107 | 107 | |
108 | -/* | |
109 | -Route::post('resend/verification-email', function (\Illuminate\Http\Request $request) { | |
110 | - $user = User::where('email',$request->input('email'))->first(); | |
111 | - | |
112 | - $user->sendEmailVerificationNotification(); | |
113 | - | |
114 | - return 'your response'; | |
115 | -})->middleware('throttle:6,1')->name('verification.resend'); | |
116 | -*/ | |
117 | - | |
118 | 108 | // Авторизация, регистрация в админку |
119 | 109 | Route::group([ |
120 | 110 | 'as' => 'admin.', // имя маршрута, например auth.index |