fix stuff

shift-build-2464
Nadim Salloum 2021-05-12 22:30:56 +02:00
parent 1476f0333a
commit edb82b915b
7 changed files with 174 additions and 251 deletions

View File

@ -4,6 +4,7 @@ namespace App\Http\Controllers;
use Inertia\Inertia;
use App\Models\Contact;
use App\Models\Car;
use App\Enums\InsuranceType;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
@ -30,6 +31,7 @@ class ContactController extends Controller
'company' => $contact->company,
'phone' => $contact->phone,
'fullCity' => $contact->fullCity,
'link' => route('contacts.edit', $contact),
'deleted_at' => $contact->deleted_at,
]),
]);
@ -93,16 +95,24 @@ class ContactController extends Controller
'city' => $contact->city,
'country' => $contact->country,
'deleted_at' => $contact->deleted_at,
'contracts' => $contact->contracts()
'bought_cars' => $contact->contracts()
->with('car')
->paginate(10)
->through(fn ($contract) => [
'sold_at' => $contract->sold_at,
'sell_price' => $contract->sell_price,
'car' => $contract->car->name,
'name' => $contract->car->name,
'link' => route('cars.edit', $contract->car),
'insurance_type' => InsuranceType::fromValue((int)$contract->insurance_type)->key,
]),
'sold_cars' => $contact->soldCars()
->paginate(10)
->through(fn ($car) => [
'bought_at' => $car->bought_at,
'buy_price' => $car->buy_price,
'name' => $car->name,
'link' => route('cars.edit', $car),
]),
]
]);
}

View File

@ -59,7 +59,7 @@ class Contact extends Model
public function soldCars()
{
return $this->hasMany(Car::class, 'seller_id');
return $this->hasMany(Car::class, 'seller_contact_id');
}
public function scopeFilter($query, array $filters)

310
public/js/app.js vendored
View File

@ -18017,8 +18017,8 @@ __webpack_require__.r(__webpack_exports__);
country: this.contact.country,
notes: this.contact.notes
}),
contractColumns: [{
key: 'car',
boughtCarColumns: [{
key: 'name',
value: 'Auto'
}, {
key: 'sold_at',
@ -18029,6 +18029,16 @@ __webpack_require__.r(__webpack_exports__);
}, {
key: 'insurance_type',
value: 'Versicherungstyp'
}],
soldCarColumns: [{
key: 'name',
value: 'Auto'
}, {
key: 'bought_at',
value: 'Kaufdatum'
}, {
key: 'buy_price',
value: 'Kaufpreis'
}]
};
},
@ -18067,8 +18077,10 @@ __webpack_require__.r(__webpack_exports__);
/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _Layouts_AppLayout__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/Layouts/AppLayout */ "./resources/js/Layouts/AppLayout.vue");
/* harmony import */ var _Components_Paginator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/Components/Paginator */ "./resources/js/Components/Paginator.vue");
/* harmony import */ var _Components_SearchFilter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/Components/SearchFilter */ "./resources/js/Components/SearchFilter.vue");
/* harmony import */ var _Jetstream_Button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/Jetstream/Button */ "./resources/js/Jetstream/Button.vue");
/* harmony import */ var _Components_SimpleTable_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/Components/SimpleTable.vue */ "./resources/js/Components/SimpleTable.vue");
/* harmony import */ var _Components_SearchFilter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/Components/SearchFilter */ "./resources/js/Components/SearchFilter.vue");
/* harmony import */ var _Jetstream_Button__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/Jetstream/Button */ "./resources/js/Jetstream/Button.vue");
@ -18077,9 +18089,10 @@ __webpack_require__.r(__webpack_exports__);
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
components: {
Paginator: _Components_Paginator__WEBPACK_IMPORTED_MODULE_2__.default,
SearchFilter: _Components_SearchFilter__WEBPACK_IMPORTED_MODULE_3__.default,
JetButton: _Jetstream_Button__WEBPACK_IMPORTED_MODULE_4__.default,
AppLayout: _Layouts_AppLayout__WEBPACK_IMPORTED_MODULE_1__.default
SearchFilter: _Components_SearchFilter__WEBPACK_IMPORTED_MODULE_4__.default,
JetButton: _Jetstream_Button__WEBPACK_IMPORTED_MODULE_5__.default,
AppLayout: _Layouts_AppLayout__WEBPACK_IMPORTED_MODULE_1__.default,
SimpleTable: _Components_SimpleTable_vue__WEBPACK_IMPORTED_MODULE_3__.default
},
props: {
filters: Object,
@ -18090,7 +18103,20 @@ __webpack_require__.r(__webpack_exports__);
form: {
search: this.filters.search,
trashed: this.filters.trashed
}
},
columns: [{
key: 'name',
value: 'Name'
}, {
key: 'company',
value: 'Firma'
}, {
key: 'fullCity',
value: 'Ort'
}, {
key: 'phone',
value: 'Telefon'
}]
};
},
watch: {
@ -19061,12 +19087,14 @@ var _hoisted_1 = {
"class": "bg-grey overflow-hidden sm:rounded-lg"
};
var _hoisted_2 = {
key: 0,
"class": "whitespace-nowrap"
};
var _hoisted_3 = {
"class": "font-semibold text-xl m-3 text-gray-800 leading-tight"
};
var _hoisted_4 = {
key: 1,
"class": "bg-white rounded-md shadow overflow-x-auto"
};
var _hoisted_5 = {
@ -19076,32 +19104,42 @@ var _hoisted_6 = {
"class": "text-left font-bold"
};
var _hoisted_7 = {
key: 1,
"class": "px-6 py-4 flex items-center focus:text-indigo-500"
};
var _hoisted_8 = {
key: 0,
"class": "border-t w-px"
};
var _hoisted_9 = {
key: 0
};
var _hoisted_10 = {
key: 2
};
var _hoisted_11 = {
"class": "inline-flex font-medium text-gray-500 ml-3"
};
var _hoisted_8 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("td", {
"class": "border-t px-6 py-4",
colspan: "4"
}, "Keine Einträge gefunden", -1
/* HOISTED */
);
var _hoisted_12 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Keine Einträge gefunden ");
function render(_ctx, _cache, $props, $setup, $data, $options) {
var _component_unicon = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("unicon");
var _component_inertia_link = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("inertia-link");
var _component_unicon = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("unicon");
var _component_Paginator = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("Paginator");
return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)("div", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("div", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("div", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("h3", _hoisted_3, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.title), 1
return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)("div", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("div", _hoisted_1, [$props.title ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)("div", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("h3", _hoisted_3, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.title), 1
/* TEXT */
)]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("div", _hoisted_4, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("table", _hoisted_5, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("tr", _hoisted_6, [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($props.columns, function (col) {
)])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true), $props.data.total > 0 ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)("div", _hoisted_4, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("table", _hoisted_5, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("tr", _hoisted_6, [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($props.columns, function (col, index) {
return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)("th", {
key: col.key,
"class": "px-6 pt-4 pb-4"
}, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(col.value), 1
/* TEXT */
);
"class": "px-6 pt-4 pb-4",
colspan: [index == $props.columns.length - 1 ? 2 : 1]
}, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(col.value), 9
/* TEXT, PROPS */
, ["colspan"]);
}), 128
/* KEYED_FRAGMENT */
))]), ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($props.data.data, function (row) {
@ -19112,38 +19150,65 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)("td", {
key: col.key,
"class": "border-t"
}, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_inertia_link, {
}, [row.link ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_inertia_link, {
key: 0,
"class": "px-6 py-4 flex items-center focus:text-indigo-500",
href: row.link
}, {
"default": (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)((0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(row[col.key]) + " ", 1
return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)((0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(row[col.key]), 1
/* TEXT */
), col.key == $props.columns[$props.columns.length - 1].key ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_unicon, {
key: 0,
"class": "m-2",
height: "22",
width: "22",
name: "angle-right"
})) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)];
)];
}),
_: 2
/* DYNAMIC */
}, 1032
/* PROPS, DYNAMIC_SLOTS */
, ["href"])]);
}), 128
/* KEYED_FRAGMENT */
, ["href"])) : ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)("span", _hoisted_7, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(row[col.key]), 1
/* TEXT */
))]);
}), 128
/* KEYED_FRAGMENT */
)), $props.data.total === 0 ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)("tr", _hoisted_7, [_hoisted_8])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)])])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_Paginator, {
)), row.link ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)("td", _hoisted_8, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_inertia_link, {
"class": "px-4 flex items-center",
href: row.link,
tabindex: "-1"
}, {
"default": (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_unicon, {
"class": "m-2",
height: "22",
width: "22",
name: "angle-right"
})];
}),
_: 2
/* DYNAMIC */
}, 1032
/* PROPS, DYNAMIC_SLOTS */
, ["href"])])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)]);
}), 128
/* KEYED_FRAGMENT */
)), $props.data.total === 0 ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)("tr", _hoisted_9, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("td", {
"class": "border-t px-6 py-4",
colspan: $props.columns.length
}, "Keine Einträge gefunden", 8
/* PROPS */
, ["colspan"])])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)])])) : ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)("div", _hoisted_10, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("span", _hoisted_11, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_unicon, {
fill: "#7e8491",
"class": "mr-2",
height: "24",
width: "24",
name: "meh"
}), _hoisted_12])]))]), $props.data.links ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_Paginator, {
key: 0,
"class": "mt-6",
links: $props.data.links
}, null, 8
/* PROPS */
, ["links"])]);
, ["links"])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)]);
}
/***/ }),
@ -22317,6 +22382,9 @@ var _hoisted_23 = {
var _hoisted_24 = {
"class": "max-w-7xl mx-auto sm:px-6 lg:px-8"
};
var _hoisted_25 = {
"class": "max-w-7xl pt-6 mx-auto sm:px-6 lg:px-8"
};
function render(_ctx, _cache, $props, $setup, $data, $options) {
var _component_bread_crumb = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("bread-crumb");
@ -22592,8 +22660,14 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
/* PROPS */
, ["onSubmitted"])])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("div", _hoisted_23, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("div", _hoisted_24, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_simple_table, {
title: 'An \'' + $options.title + '\' verkaufte Autos',
data: $props.contact.contracts,
columns: $data.contractColumns
data: $props.contact.bought_cars,
columns: $data.boughtCarColumns
}, null, 8
/* PROPS */
, ["title", "data", "columns"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("div", _hoisted_25, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_simple_table, {
title: 'Von \'' + $options.title + '\' gekaufte Autos',
data: $props.contact.sold_cars,
columns: $data.soldCarColumns
}, null, 8
/* PROPS */
, ["title", "data", "columns"])])])];
@ -22638,71 +22712,10 @@ var _hoisted_4 = {
var _hoisted_5 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Kontakt erstellen ");
var _hoisted_6 = {
"class": "bg-grey overflow-hidden sm:rounded-lg"
};
var _hoisted_7 = {
"class": "whitespace-nowrap"
};
var _hoisted_8 = {
"class": "font-semibold text-xl m-3 text-gray-800 leading-tight"
};
var _hoisted_9 = {
"class": "bg-white rounded-md shadow overflow-x-auto"
};
var _hoisted_10 = {
"class": "w-full whitespace-nowrap"
};
var _hoisted_11 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("tr", {
"class": "text-left font-bold"
}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("th", {
"class": "px-6 pt-4 pb-4"
}, "Name"), /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("th", {
"class": "px-6 pt-4 pb-4"
}, "Firma"), /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("th", {
"class": "px-6 pt-4 pb-4"
}, "Ort"), /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("th", {
"class": "px-6 pt-4 pb-4",
colspan: "2"
}, "Telefon")], -1
/* HOISTED */
);
var _hoisted_12 = {
"class": "border-t"
};
var _hoisted_13 = {
"class": "border-t"
};
var _hoisted_14 = {
"class": "border-t"
};
var _hoisted_15 = {
"class": "border-t"
};
var _hoisted_16 = {
"class": "border-t w-px"
};
var _hoisted_17 = {
key: 0
};
var _hoisted_18 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("td", {
"class": "border-t px-6 py-4",
colspan: "4"
}, "Keine Kontakte gefunden", -1
/* HOISTED */
);
function render(_ctx, _cache, $props, $setup, $data, $options) {
var _component_jet_button = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("jet-button");
var _component_inertia_link = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("inertia-link");
var _component_unicon = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("unicon");
var _component_Paginator = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("Paginator");
var _component_simple_table = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("simple-table");
var _component_app_layout = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("app-layout");
@ -22736,98 +22749,13 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
}, 8
/* PROPS */
, ["onClick"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("div", _hoisted_6, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("div", _hoisted_7, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("h3", _hoisted_8, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.contacts.total) + " Kontakte", 1
/* TEXT */
)]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("div", _hoisted_9, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("table", _hoisted_10, [_hoisted_11, ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($props.contacts.data, function (contact) {
return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)("tr", {
key: contact.id,
"class": "hover:bg-gray-100 focus-within:bg-gray-100"
}, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("td", _hoisted_12, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_inertia_link, {
"class": "px-6 py-4 flex items-center focus:text-indigo-500",
href: _ctx.route('contacts.edit', contact.id)
}, {
"default": (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)((0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(contact.name), 1
/* TEXT */
)];
}),
_: 2
/* DYNAMIC */
}, 1032
/* PROPS, DYNAMIC_SLOTS */
, ["href"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("td", _hoisted_13, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_inertia_link, {
"class": "px-6 py-4 flex items-center",
href: _ctx.route('contacts.edit', contact.id),
tabindex: "-1"
}, {
"default": (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)((0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(contact.company), 1
/* TEXT */
)];
}),
_: 2
/* DYNAMIC */
}, 1032
/* PROPS, DYNAMIC_SLOTS */
, ["href"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("td", _hoisted_14, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_inertia_link, {
"class": "px-6 py-4 flex items-center",
href: _ctx.route('contacts.edit', contact.id),
tabindex: "-1"
}, {
"default": (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)((0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(contact.fullCity), 1
/* TEXT */
)];
}),
_: 2
/* DYNAMIC */
}, 1032
/* PROPS, DYNAMIC_SLOTS */
, ["href"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("td", _hoisted_15, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_inertia_link, {
"class": "px-6 py-4 flex items-center",
href: _ctx.route('contacts.edit', contact.id),
tabindex: "-1"
}, {
"default": (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)((0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(contact.phone), 1
/* TEXT */
)];
}),
_: 2
/* DYNAMIC */
}, 1032
/* PROPS, DYNAMIC_SLOTS */
, ["href"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("td", _hoisted_16, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_inertia_link, {
"class": "px-4 flex items-center",
href: _ctx.route('contacts.edit', contact.id),
tabindex: "-1"
}, {
"default": (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_unicon, {
"class": "m-2",
height: "22",
width: "22",
name: "angle-right"
})];
}),
_: 2
/* DYNAMIC */
}, 1032
/* PROPS, DYNAMIC_SLOTS */
, ["href"])])]);
}), 128
/* KEYED_FRAGMENT */
)), $props.contacts.length === 0 ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)("tr", _hoisted_17, [_hoisted_18])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)])])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_Paginator, {
"class": "mt-6",
links: $props.contacts.links
, ["onClick"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_simple_table, {
title: $props.contacts.total + ' Kontakte',
data: $props.contacts,
columns: $data.columns
}, null, 8
/* PROPS */
, ["links"])])])];
, ["title", "data", "columns"])])])];
}),
_: 1
/* STABLE */
@ -24992,7 +24920,7 @@ __webpack_require__(/*! ./bootstrap */ "./resources/js/bootstrap.js"); // Import
vue_unicons__WEBPACK_IMPORTED_MODULE_3__.default.add([vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniUsersAlt, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniCarSideview, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniDashboard, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniSearch, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFilter, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFilterSlash, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniTrashAlt, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniPen, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniExclamationTriangle, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniMapMarker, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniPhone, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniEnvelope, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFileDownload, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniArrowDown, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniArrowUp, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniAngleRight, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniAngleUp, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniAngleDown, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniAngleLeft, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFileUploadAlt]);
vue_unicons__WEBPACK_IMPORTED_MODULE_3__.default.add([vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniMeh, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniUsersAlt, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniCarSideview, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniDashboard, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniSearch, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFilter, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFilterSlash, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniTrashAlt, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniPen, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniExclamationTriangle, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniMapMarker, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniPhone, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniEnvelope, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFileDownload, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniArrowDown, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniArrowUp, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniAngleRight, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniAngleUp, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniAngleDown, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniAngleLeft, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFileUploadAlt]);
var el = document.getElementById('app');
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createApp)({
render: function render() {

View File

@ -1,29 +1,43 @@
<template>
<div>
<div class="bg-grey overflow-hidden sm:rounded-lg">
<div class="whitespace-nowrap">
<div v-if="title" class="whitespace-nowrap">
<h3 class="font-semibold text-xl m-3 text-gray-800 leading-tight">{{ title }}</h3>
</div>
<div class="bg-white rounded-md shadow overflow-x-auto">
<div v-if="data.total > 0" class="bg-white rounded-md shadow overflow-x-auto">
<table class="w-full whitespace-nowrap">
<tr class="text-left font-bold">
<th v-for="col in columns" :key="col.key" class="px-6 pt-4 pb-4">{{ col.value }}</th>
<th v-for="(col, index) in columns" :key="col.key" class="px-6 pt-4 pb-4" :colspan="[index == (columns.length - 1) ? 2 : 1]">{{ col.value }}</th>
</tr>
<tr v-for="row in data.data" :key="row.link" class="hover:bg-gray-100 focus-within:bg-gray-100">
<td v-for="col in columns" :key="col.key" class="border-t">
<inertia-link class="px-6 py-4 flex items-center focus:text-indigo-500" :href="row.link">
<inertia-link v-if="row.link" class="px-6 py-4 flex items-center focus:text-indigo-500" :href="row.link">
{{ row[col.key] }}
<unicon v-if="col.key == columns[columns.length - 1].key" class="m-2" height="22" width="22" name="angle-right"></unicon>
</inertia-link>
<span v-else class="px-6 py-4 flex items-center focus:text-indigo-500">
{{ row[col.key] }}
</span>
</td>
<td v-if="row.link" class="border-t w-px">
<inertia-link class="px-4 flex items-center" :href="row.link" tabindex="-1">
<unicon class="m-2" height="22" width="22" name="angle-right"></unicon>
</inertia-link>
</td>
</tr>
<tr v-if="data.total === 0">
<td class="border-t px-6 py-4" colspan="4">Keine Einträge gefunden</td>
<td class="border-t px-6 py-4" :colspan="columns.length">Keine Einträge gefunden</td>
</tr>
</table>
</div>
<div v-else>
<span class="inline-flex font-medium text-gray-500 ml-3">
<unicon fill="#7e8491" class="mr-2" height="24" width="24" name="meh"></unicon>
Keine Einträge gefunden
</span>
</div>
<Paginator class="mt-6" :links="data.links" />
</div>
<Paginator v-if="data.links" class="mt-6" :links="data.links" />
</div>
</template>

View File

@ -103,7 +103,10 @@
</div>
<div class="py-12">
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
<simple-table :title="'An \'' + title + '\' verkaufte Autos'" :data="contact.contracts" :columns="contractColumns" />
<simple-table :title="'An \'' + title + '\' verkaufte Autos'" :data="contact.bought_cars" :columns="boughtCarColumns" />
</div>
<div class="max-w-7xl pt-6 mx-auto sm:px-6 lg:px-8">
<simple-table :title="'Von \'' + title + '\' gekaufte Autos'" :data="contact.sold_cars" :columns="soldCarColumns" />
</div>
</div>
</app-layout>
@ -151,11 +154,16 @@ export default {
country: this.contact.country,
notes: this.contact.notes,
}),
contractColumns: [
{key: 'car', value: 'Auto'},
boughtCarColumns: [
{key: 'name', value: 'Auto'},
{key: 'sold_at', value: 'Verkaufsdatum'},
{key: 'sell_price', value: 'Verkaufspreis'},
{key: 'insurance_type', value: 'Versicherungstyp'},
],
soldCarColumns: [
{key: 'name', value: 'Auto'},
{key: 'bought_at', value: 'Kaufdatum'},
{key: 'buy_price', value: 'Kaufpreis'},
]
}
},

View File

@ -14,52 +14,7 @@
Kontakt erstellen
</jet-button>
</div>
<div class="bg-grey overflow-hidden sm:rounded-lg">
<div class="whitespace-nowrap">
<h3 class="font-semibold text-xl m-3 text-gray-800 leading-tight">{{ contacts.total }} Kontakte</h3>
</div>
<div class="bg-white rounded-md shadow overflow-x-auto">
<table class="w-full whitespace-nowrap">
<tr class="text-left font-bold">
<th class="px-6 pt-4 pb-4">Name</th>
<th class="px-6 pt-4 pb-4">Firma</th>
<th class="px-6 pt-4 pb-4">Ort</th>
<th class="px-6 pt-4 pb-4" colspan="2">Telefon</th>
</tr>
<tr v-for="contact in contacts.data" :key="contact.id" class="hover:bg-gray-100 focus-within:bg-gray-100">
<td class="border-t">
<inertia-link class="px-6 py-4 flex items-center focus:text-indigo-500" :href="route('contacts.edit', contact.id)">
{{ contact.name }}
</inertia-link>
</td>
<td class="border-t">
<inertia-link class="px-6 py-4 flex items-center" :href="route('contacts.edit', contact.id)" tabindex="-1">
{{ contact.company}}
</inertia-link>
</td>
<td class="border-t">
<inertia-link class="px-6 py-4 flex items-center" :href="route('contacts.edit', contact.id)" tabindex="-1">
{{ contact.fullCity }}
</inertia-link>
</td>
<td class="border-t">
<inertia-link class="px-6 py-4 flex items-center" :href="route('contacts.edit', contact.id)" tabindex="-1">
{{ contact.phone }}
</inertia-link>
</td>
<td class="border-t w-px">
<inertia-link class="px-4 flex items-center" :href="route('contacts.edit', contact.id)" tabindex="-1">
<unicon class="m-2" height="22" width="22" name="angle-right"></unicon>
</inertia-link>
</td>
</tr>
<tr v-if="contacts.length === 0">
<td class="border-t px-6 py-4" colspan="4">Keine Kontakte gefunden</td>
</tr>
</table>
</div>
</div>
<Paginator class="mt-6" :links="contacts.links" />
<simple-table :title="contacts.total + ' Kontakte'" :data="contacts" :columns="columns" />
</div>
</div>
</app-layout>
@ -69,6 +24,7 @@
import { pickBy, throttle, mapValues } from 'lodash'
import AppLayout from '@/Layouts/AppLayout'
import Paginator from "@/Components/Paginator"
import SimpleTable from '@/Components/SimpleTable.vue'
import SearchFilter from '@/Components/SearchFilter'
import JetButton from '@/Jetstream/Button'
@ -78,6 +34,7 @@ export default {
SearchFilter,
JetButton,
AppLayout,
SimpleTable,
},
props: {
filters: Object,
@ -89,6 +46,12 @@ export default {
search: this.filters.search,
trashed: this.filters.trashed,
},
columns: [
{key: 'name', value: 'Name'},
{key: 'company', value: 'Firma'},
{key: 'fullCity', value: 'Ort'},
{key: 'phone', value: 'Telefon'},
],
}
},
watch: {

4
resources/js/app.js vendored
View File

@ -5,9 +5,9 @@ import { createApp, h } from 'vue';
import { App as InertiaApp, plugin as InertiaPlugin } from '@inertiajs/inertia-vue3';
import { InertiaProgress } from '@inertiajs/progress';
import Unicon from 'vue-unicons';
import { uniUsersAlt, uniCarSideview, uniDashboard, uniSearch, uniFilter, uniFilterSlash, uniTrashAlt, uniPen, uniExclamationTriangle, uniMapMarker, uniPhone, uniEnvelope, uniFileDownload, uniArrowDown, uniArrowUp, uniAngleRight, uniAngleUp, uniAngleDown, uniAngleLeft, uniFileUploadAlt } from 'vue-unicons/dist/icons'
import { uniMeh, uniUsersAlt, uniCarSideview, uniDashboard, uniSearch, uniFilter, uniFilterSlash, uniTrashAlt, uniPen, uniExclamationTriangle, uniMapMarker, uniPhone, uniEnvelope, uniFileDownload, uniArrowDown, uniArrowUp, uniAngleRight, uniAngleUp, uniAngleDown, uniAngleLeft, uniFileUploadAlt } from 'vue-unicons/dist/icons'
Unicon.add([uniUsersAlt, uniCarSideview, uniDashboard, uniSearch, uniFilter, uniFilterSlash, uniTrashAlt, uniPen, uniExclamationTriangle, uniMapMarker, uniPhone, uniEnvelope, uniFileDownload, uniArrowDown, uniArrowUp, uniAngleRight, uniAngleUp, uniAngleDown, uniAngleLeft, uniFileUploadAlt])
Unicon.add([uniMeh, uniUsersAlt, uniCarSideview, uniDashboard, uniSearch, uniFilter, uniFilterSlash, uniTrashAlt, uniPen, uniExclamationTriangle, uniMapMarker, uniPhone, uniEnvelope, uniFileDownload, uniArrowDown, uniArrowUp, uniAngleRight, uniAngleUp, uniAngleDown, uniAngleLeft, uniFileUploadAlt])
const el = document.getElementById('app');