diff --git a/app/Exports/BuyContractsSheet.php b/app/Exports/BuyContractsSheet.php
index 9f4e9fe..e56f5fa 100644
--- a/app/Exports/BuyContractsSheet.php
+++ b/app/Exports/BuyContractsSheet.php
@@ -11,7 +11,7 @@ class BuyContractsSheet extends ContractsSheet
public function query()
{
- return Contract::where('type', ContractType::BuyContract)->whereYear('date', '=', $this->year)->orderBy('date', 'asc');
+ return Contract::buyContracts()->whereYear('date', '=', $this->year)->orderBy('date', 'asc');
}
public function headings(): array
diff --git a/app/Exports/SellContractsSheet.php b/app/Exports/SellContractsSheet.php
index f8f8b58..5922c2d 100644
--- a/app/Exports/SellContractsSheet.php
+++ b/app/Exports/SellContractsSheet.php
@@ -12,7 +12,7 @@ class SellContractsSheet extends ContractsSheet
public function query()
{
- return Contract::where('type', ContractType::SellContract)->whereYear('date', '=', $this->year)->orderBy('date', 'asc');
+ return Contract::sellContracts()->whereYear('date', '=', $this->year)->orderBy('date', 'asc');
}
public function headings(): array
diff --git a/app/Http/Controllers/ContractController.php b/app/Http/Controllers/ContractController.php
index 482b746..b47aea5 100644
--- a/app/Http/Controllers/ContractController.php
+++ b/app/Http/Controllers/ContractController.php
@@ -17,6 +17,42 @@ use Illuminate\Support\Facades\Redirect;
class ContractController extends Controller
{
+
+ public function dashboard()
+ {
+ return Inertia::render('Dashboard', [
+ 'bought_this_year' => Contract::boughtThisYear()->count(),
+ 'sold_this_year' => Contract::soldThisYear()->count(),
+ 'my_cars' => Car::unsoldOnly()->count(),
+ 'buy_contracts' => Contract::buyContracts()
+ ->orderBy('date', 'desc')
+ ->limit(10)
+ ->get()
+ ->map(function ($contract) {
+ return [
+ 'date' => $contract->date_formatted,
+ 'price' => $contract->price->format(),
+ 'car' => $contract->car->name,
+ 'contact' => $contract->contact->title,
+ 'link' => route('contracts.show', $contract),
+ ];
+ }),
+ 'sell_contracts' => Contract::sellContracts()
+ ->orderBy('date', 'desc')
+ ->limit(10)
+ ->get()
+ ->map(function ($contract) {
+ return [
+ 'date' => $contract->date_formatted,
+ 'price' => $contract->price->format(),
+ 'car' => $contract->car->name,
+ 'contact' => $contract->contact->title,
+ 'link' => route('contracts.show', $contract),
+ ];
+ }),
+ ]);
+ }
+
public function create(Request $request, string $type, Car $car, Contact $contact)
{
return Inertia::render('Contracts/Create', [
diff --git a/app/Models/Car.php b/app/Models/Car.php
index 0cd0f91..193f395 100644
--- a/app/Models/Car.php
+++ b/app/Models/Car.php
@@ -95,11 +95,6 @@ class Car extends Model
return $this->hasMany(Contract::class);
}
- // public function scopeSoldThisYear($query)
- // {
- // return $query->whereDate('sold_at', '>=', Carbon::today()->format('Y'));
- // }
-
public function buyContracts()
{
return $this->hasMany(Contract::class)->buyContracts();
diff --git a/app/Models/Contract.php b/app/Models/Contract.php
index 1e43884..57b4fb2 100644
--- a/app/Models/Contract.php
+++ b/app/Models/Contract.php
@@ -109,17 +109,17 @@ class Contract extends Model
public function scopeThisYear($query)
{
- $query->where('date', '>', date('Y'));
+ $query->whereYear('date', date('Y'));
}
public function scopeSoldThisYear($query)
{
- $query->buyContracts()->thisYear();
+ $query->sellContracts()->thisYear();
}
public function scopeBoughtThisYear($query)
{
- $query->sellContracts()->thisYear();
+ $query->buyContracts()->thisYear();
}
public function scopeBuyContracts($query)
diff --git a/public/js/app.js b/public/js/app.js
index 965dd04..63af708 100644
--- a/public/js/app.js
+++ b/public/js/app.js
@@ -18134,6 +18134,27 @@ __webpack_require__.r(__webpack_exports__);
/***/ }),
+/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Components/Dashboard/DashItem.vue?vue&type=script&lang=js":
+/*!************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Components/Dashboard/DashItem.vue?vue&type=script&lang=js ***!
+ \************************************************************************************************************************************************************************************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
+/* harmony export */ });
+/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
+ props: {
+ title: String,
+ number: Number,
+ link: String
+ }
+});
+
+/***/ }),
+
/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Components/Documents/Item.vue?vue&type=script&lang=js":
/*!********************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Components/Documents/Item.vue?vue&type=script&lang=js ***!
@@ -18615,7 +18636,8 @@ __webpack_require__.r(__webpack_exports__);
currentRoute: String,
defaultSort: Object,
filters: Object,
- print: Boolean
+ print: Boolean,
+ hideArrow: Boolean
},
data: function data() {
return {
@@ -21527,10 +21549,56 @@ __webpack_require__.r(__webpack_exports__);
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _Layouts_Layout__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/Layouts/Layout */ "./resources/js/Layouts/Layout.vue");
+/* harmony import */ var _Components_SimpleTable_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/Components/SimpleTable.vue */ "./resources/js/Components/SimpleTable.vue");
+/* harmony import */ var _Components_Dashboard_DashItem_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/Components/Dashboard/DashItem.vue */ "./resources/js/Components/Dashboard/DashItem.vue");
+
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
components: {
- Layout: _Layouts_Layout__WEBPACK_IMPORTED_MODULE_0__.default
+ Layout: _Layouts_Layout__WEBPACK_IMPORTED_MODULE_0__.default,
+ SimpleTable: _Components_SimpleTable_vue__WEBPACK_IMPORTED_MODULE_1__.default,
+ DashItem: _Components_Dashboard_DashItem_vue__WEBPACK_IMPORTED_MODULE_2__.default
+ },
+ props: {
+ buy_contracts: Object,
+ sell_contracts: Object,
+ sold_this_year: Number,
+ bought_this_year: Number,
+ my_cars: Number
+ },
+ data: function data() {
+ return {
+ currentRoute: 'cars',
+ buyContractColumns: [{
+ key: 'date',
+ value: 'Datum',
+ sortable: false
+ }, // {key: 'car', value: 'Auto', sortable: false},
+ {
+ key: 'contact',
+ value: 'Verkäufer',
+ sortable: false
+ }, {
+ key: 'price',
+ value: 'Einkaufspreis',
+ sortable: false
+ }],
+ sellContractColumns: [{
+ key: 'date',
+ value: 'Datum',
+ sortable: false
+ }, // {key: 'car', value: 'Auto', sortable: false},
+ {
+ key: 'contact',
+ value: 'Käufer',
+ sortable: false
+ }, {
+ key: 'price',
+ value: 'Verkaufspreis',
+ sortable: false
+ }]
+ };
}
});
@@ -23064,6 +23132,66 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
/***/ }),
+/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Components/Dashboard/DashItem.vue?vue&type=template&id=3419308b":
+/*!****************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Components/Dashboard/DashItem.vue?vue&type=template&id=3419308b ***!
+ \****************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": () => (/* binding */ render)
+/* harmony export */ });
+/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js");
+
+var _hoisted_1 = {
+ "class": "col-span-4 xs:col-span-6 shadow bg-white rounded-md sm:rounded-lg text-center"
+};
+var _hoisted_2 = {
+ "class": "font-bold text-6xl text-indigo-600 group-hover:text-indigo-700 py-5 transition"
+};
+var _hoisted_3 = {
+ "class": "font-semibold text-2xl bg-indigo-600 group-hover:bg-indigo-700 text-white py-4 rounded-b-lg transition"
+};
+var _hoisted_4 = {
+ key: 1
+};
+var _hoisted_5 = {
+ "class": "font-bold text-6xl text-indigo-600 py-5"
+};
+var _hoisted_6 = {
+ "class": "font-semibold text-2xl bg-indigo-600 text-white py-4 rounded-b-lg"
+};
+function render(_ctx, _cache, $props, $setup, $data, $options) {
+ var _component_inertia_link = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("inertia-link");
+
+ return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)("div", _hoisted_1, [$props.link ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_inertia_link, {
+ key: 0,
+ href: $props.link,
+ "class": "group"
+ }, {
+ "default": (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
+ return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("p", _hoisted_2, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.number), 1
+ /* TEXT */
+ ), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("p", _hoisted_3, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.title), 1
+ /* TEXT */
+ )];
+ }),
+ _: 1
+ /* STABLE */
+
+ }, 8
+ /* PROPS */
+ , ["href"])) : ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)("span", _hoisted_4, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("p", _hoisted_5, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.number), 1
+ /* TEXT */
+ ), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("p", _hoisted_6, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.title), 1
+ /* TEXT */
+ )]))]);
+}
+
+/***/ }),
+
/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Components/Documents/Item.vue?vue&type=template&id=56a69635":
/*!************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Components/Documents/Item.vue?vue&type=template&id=56a69635 ***!
@@ -24134,7 +24262,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
name: "chart"
}), _hoisted_7], 8
/* PROPS */
- , ["href"])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)])) : (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_8, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("table", _hoisted_9, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("tr", _hoisted_10, [((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) {
+ , ["href"])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true), $props.data.total === undefined || $props.data.total > 0 ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)("div", _hoisted_8, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("table", _hoisted_9, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("tr", _hoisted_10, [((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",
@@ -24169,7 +24297,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
, ["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) {
+ ))]), ((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)(this.data.data ? this.data.data : this.data, function (row) {
return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)("tr", {
key: row.link,
"class": "hover:bg-gray-100 focus-within:bg-gray-100"
@@ -24210,7 +24338,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
))]);
}), 128
/* KEYED_FRAGMENT */
- )), row.link ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)("td", _hoisted_13, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_inertia_link, {
+ )), row.link && !$props.hideArrow ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)("td", _hoisted_13, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_inertia_link, {
"class": "px-4 flex items-center",
href: row.link,
tabindex: "-1"
@@ -30164,19 +30292,37 @@ var _hoisted_1 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("
/* HOISTED */
);
-var _hoisted_2 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("div", {
- "class": "py-12"
-}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("div", {
- "class": "max-w-7xl mx-auto sm:px-6 lg:px-8"
-}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("div", {
- "class": "bg-white overflow-hidden shadow-xl sm:rounded-lg"
-}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("p", {
- "class": "font-semibold text-xl mt-3 ml-3 mb-3 text-gray-800 leading-tight"
-}, "hallo")])])], -1
+var _hoisted_2 = {
+ "class": "grid grid-cols-12 gap-x-8 gap-y-12"
+};
+var _hoisted_3 = {
+ "class": "col-span-6 xs:col-span-12"
+};
+
+var _hoisted_4 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("p", {
+ "class": "font-semibold p-4 pl-6 shadow bg-white rounded-md sm:rounded-lg text-xl font-medium mb-3 text-gray-800 leading-tight"
+}, "Letzte Einkäufe", -1
+/* HOISTED */
+);
+
+var _hoisted_5 = {
+ "class": "col-span-6 xs:col-span-12"
+};
+var _hoisted_6 = {
+ "class": "pt-5 bg-white shadow rounded-md sm:rounded-lg"
+};
+
+var _hoisted_7 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("p", {
+ "class": "font-semibold text-xl font-medium ml-6 mb-2 text-gray-800 leading-tight"
+}, "Letzte Verkäufe", -1
/* HOISTED */
);
function render(_ctx, _cache, $props, $setup, $data, $options) {
+ var _component_dash_item = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("dash-item");
+
+ var _component_simple_table = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("simple-table");
+
var _component_layout = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("layout");
return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_layout, null, {
@@ -30184,7 +30330,38 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
return [_hoisted_1];
}),
"default": (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
- return [_hoisted_2];
+ return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("div", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_dash_item, {
+ title: "Meine Autos",
+ number: $props.my_cars,
+ link: _ctx.route('cars.unsold')
+ }, null, 8
+ /* PROPS */
+ , ["number", "link"]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_dash_item, {
+ title: 'Gekauft im ' + new Date().getFullYear(),
+ number: $props.bought_this_year
+ }, null, 8
+ /* PROPS */
+ , ["title", "number"]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_dash_item, {
+ title: 'Verkauft im ' + new Date().getFullYear(),
+ number: $props.sold_this_year
+ }, null, 8
+ /* PROPS */
+ , ["title", "number"]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("div", _hoisted_3, [_hoisted_4, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_simple_table, {
+ "class": "shadow rounded-md sm:rounded-lg",
+ data: $props.buy_contracts,
+ columns: $data.buyContractColumns,
+ currentRoute: $data.currentRoute,
+ hideArrow: true
+ }, null, 8
+ /* PROPS */
+ , ["data", "columns", "currentRoute"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("div", _hoisted_5, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("div", _hoisted_6, [_hoisted_7, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_simple_table, {
+ data: $props.sell_contracts,
+ columns: $data.sellContractColumns,
+ currentRoute: $data.currentRoute,
+ hideArrow: true
+ }, null, 8
+ /* PROPS */
+ , ["data", "columns", "currentRoute"])])])])];
}),
_: 1
/* STABLE */
@@ -62433,6 +62610,32 @@ _CurrencyInput_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__.default.
/***/ }),
+/***/ "./resources/js/Components/Dashboard/DashItem.vue":
+/*!********************************************************!*\
+ !*** ./resources/js/Components/Dashboard/DashItem.vue ***!
+ \********************************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
+/* harmony export */ });
+/* harmony import */ var _DashItem_vue_vue_type_template_id_3419308b__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./DashItem.vue?vue&type=template&id=3419308b */ "./resources/js/Components/Dashboard/DashItem.vue?vue&type=template&id=3419308b");
+/* harmony import */ var _DashItem_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./DashItem.vue?vue&type=script&lang=js */ "./resources/js/Components/Dashboard/DashItem.vue?vue&type=script&lang=js");
+
+
+
+_DashItem_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__.default.render = _DashItem_vue_vue_type_template_id_3419308b__WEBPACK_IMPORTED_MODULE_0__.render
+/* hot reload */
+if (false) {}
+
+_DashItem_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__.default.__file = "resources/js/Components/Dashboard/DashItem.vue"
+
+/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_DashItem_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__.default);
+
+/***/ }),
+
/***/ "./resources/js/Components/Documents/Item.vue":
/*!****************************************************!*\
!*** ./resources/js/Components/Documents/Item.vue ***!
@@ -64764,6 +64967,22 @@ __webpack_require__.r(__webpack_exports__);
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_CurrencyInput_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./CurrencyInput.vue?vue&type=script&lang=js */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Components/CurrencyInput.vue?vue&type=script&lang=js");
+/***/ }),
+
+/***/ "./resources/js/Components/Dashboard/DashItem.vue?vue&type=script&lang=js":
+/*!********************************************************************************!*\
+ !*** ./resources/js/Components/Dashboard/DashItem.vue?vue&type=script&lang=js ***!
+ \********************************************************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_DashItem_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__.default)
+/* harmony export */ });
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_DashItem_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./DashItem.vue?vue&type=script&lang=js */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Components/Dashboard/DashItem.vue?vue&type=script&lang=js");
+
+
/***/ }),
/***/ "./resources/js/Components/Documents/Item.vue?vue&type=script&lang=js":
@@ -66188,6 +66407,22 @@ __webpack_require__.r(__webpack_exports__);
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_CurrencyInput_vue_vue_type_template_id_08bc457e__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./CurrencyInput.vue?vue&type=template&id=08bc457e */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Components/CurrencyInput.vue?vue&type=template&id=08bc457e");
+/***/ }),
+
+/***/ "./resources/js/Components/Dashboard/DashItem.vue?vue&type=template&id=3419308b":
+/*!**************************************************************************************!*\
+ !*** ./resources/js/Components/Dashboard/DashItem.vue?vue&type=template&id=3419308b ***!
+ \**************************************************************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_DashItem_vue_vue_type_template_id_3419308b__WEBPACK_IMPORTED_MODULE_0__.render)
+/* harmony export */ });
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_DashItem_vue_vue_type_template_id_3419308b__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./DashItem.vue?vue&type=template&id=3419308b */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Components/Dashboard/DashItem.vue?vue&type=template&id=3419308b");
+
+
/***/ }),
/***/ "./resources/js/Components/Documents/Item.vue?vue&type=template&id=56a69635":
diff --git a/resources/js/Components/Dashboard/DashItem.vue b/resources/js/Components/Dashboard/DashItem.vue
new file mode 100644
index 0000000..0c236ea
--- /dev/null
+++ b/resources/js/Components/Dashboard/DashItem.vue
@@ -0,0 +1,22 @@
+
+ {{ number }} {{ title }} {{ number }} {{ title }}
| @@ -30,7 +30,7 @@ | ||
|---|---|---|
|
|
- + |
-
-
- hallo +
+
@@ -18,10 +25,38 @@
diff --git a/routes/web.php b/routes/web.php
index 0e228b0..d815531 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -12,9 +12,7 @@ use Illuminate\Support\Facades\Route;
use Inertia\Inertia;
Route::middleware(['auth:sanctum', 'verified'])->group(function () {
- Route::get('/', function () {
- return Inertia::render('Dashboard');
- })->name('dashboard');
+ Route::get('/', [ContractController::class, 'dashboard'])->name('dashboard');
Route::get('reports', [ReportController::class, 'index'])->name('reports');
Route::get('reports/print', [ReportController::class, 'print'])->name('reports.print');
+
+ Letzte Einkäufe +
+
+
Letzte Verkäufe + |