resolve conflicts

This commit is contained in:
Deepak Singh Gusain 2022-01-21 19:29:58 +05:30
commit c16e124cc5
32 changed files with 1145 additions and 803 deletions

File diff suppressed because one or more lines are too long

View File

@ -1 +1,4 @@
{}
{
"/js/admin.js": "/js/admin.js?id=94da304c8b02ad3ba649",
"/css/admin.css": "/css/admin.css?id=8f47f9d965583dd83648"
}

View File

@ -24,9 +24,47 @@ $font-size-base: 14px;
$font-color: #3A3A3A;
$link-color: #a2a2a2;
$link-active-color: #a2a2a2;
//Switch Color
$dark-mode-switch-background: #000;
$dark-mode-switch-border: #24384c;
// Top nav color
$profile-info-icon: #3c41ff;
$role-text-color: #8e8e8e;
$profile-info-name: #000311;
$control-border-color: #c7c7c7;
// Navbar Color
$navbar-border-right-color: #ececec;
$submenu-shadow-color: #CDCECF;
$submenu-border-color: #eee;
$menu-item-hover-color: #f8f8f8;
$submenu-active-color: #e6e6e6;
//Notification Color
$notification-li-border-color: #ddd;
$pending-color: #f2c94c;
$processing-color: #399cdb;
$closed-color: #eb5757;
$read-background-color: #f6f6f6;
$read-all-text-color: #3a3a3a;
$menu-label-text-color: #B0BEC5;
// Dark Mode Color
$dark-mode-text-color: rgba(255,255,255,0.8);
$dark-mode-background-color: #02080d;
$dark-mode-read-color: rgba(255, 255, 255, 0.5);
$dark-mode-unread-color: rgba(255, 255, 255, 1);
$dark-mode-navtop-left-color: #071e37;
$dark-mode-notification-border-color: #232d36;
$dark-mode-left-menubar-background-color: rgba(1, 10, 20, .5);
$dark-mode-left-submenubar-active-background-color: #031425;
$dark-mode-left-submenubar-background-color: #020f1c;
$dark-mode-left-menubar-active-background-color: #051e37;
$dark-mode-body-background-color: #04101b;
$dark-mode-table-head-backgound-color: rgba(7, 30, 55,0.2);
$dark-mode-pagination-page-item-active-background-color:rgba(40, 69, 100, 0.2);
$dark-mode-pagination-page-item-active-border-color:rgba(2, 57, 83, 0.2);
$flatpickr-day-startRange-hover:rgb(5, 30, 55);

File diff suppressed because it is too large Load Diff

View File

@ -9,7 +9,7 @@ body {
background-color: $body-background;
}
.dark-mode-button{
.dark-mode-button {
background: $blue;
border: none;
padding: 10px 30px;
@ -38,18 +38,18 @@ body {
height: 60px;
display: flex;
justify-content: space-between;
align-items: center;
align-items: center;
.hamburger{
.hamburger {
display: block;
width: 48px;
height: 48px;
&::before{
&::before {
content: "";
width: 24px;
height: 24px;
background-color: rebeccapurple;
background-color: rebeccapurple;
background-image: url("../assets/image/Icon-Sortable.svg");
display: block;
}
@ -84,21 +84,21 @@ body {
margin-bottom: -10px;
display: block;
cursor: default;
color: #a2a2a2;
color: $link-color;
}
.profile-info-div{
.profile-info-div {
display: flex;
.profile-info-icon{
.profile-info-icon {
height: 31px;
width: 30px;
background: #3c41ff;
background: $profile-info-icon;
padding: 6px;
text-align: center;
font-size: 17px;
font-weight: 600;
color: #fff;
color: $white;
border-radius: 50%;
margin-right: 6px;
margin-top: 3px;
@ -112,13 +112,14 @@ body {
}
.name {
color: #000311;
color: $profile-info-name;
display: block;
text-align: left;
}
.role {
font-size: 12px;
color: #8e8e8e;
color: $role-text-color;
display: block;
text-align: left;
}
@ -144,13 +145,14 @@ body {
}
.name {
color: #000311;
color: $profile-info-name;
display: block;
text-align: left;
}
.role {
font-size: 12px;
color: #8e8e8e;
color: $role-text-color;
display: block;
text-align: left;
}
@ -171,12 +173,12 @@ body {
font-size: 15px;
cursor: pointer;
position: relative;
border-left: 1px solid $seprator;
border-left: 1px solid $seprator;
}
}
}
.navbar-left {
.navbar-left {
left: 0;
bottom: 0;
top: 60px;
@ -184,9 +186,9 @@ body {
width: 56px;
height: 100vh !important;
position: fixed;
background-color: $white;
border-right:1px solid #ececec;
background-color: $white;
border-right: 1px solid $navbar-border-right-color;
ul.menubar {
li.menu-item {
@ -205,10 +207,10 @@ body {
.menu-label {
display: none;
color: #B0BEC5;
color: $menu-label-text-color;
}
.arrow-icon{
.arrow-icon {
display: none;
}
}
@ -225,40 +227,42 @@ body {
top: 0;
left: 56px;
background-color: $white;
box-shadow: 2px 1px 3px #CDCECF;
border: 1px solid #eee;
box-shadow: 2px 1px 3px $submenu-shadow-color;
border: 1px solid $submenu-border-color;
border-left: 0;
border-radius: 0 3px 3px 0;
li.sub-menu-item {
a {
display: block;
padding: 8px 12px;
color: $black;
font-size: 12px;
}
}
}
}
&:hover {
overflow: visible;
background: $menu-item-hover-color;
ul.sub-menubar {
display: block;
.sub-menu-item {
.menu-label {
color: $black;
color: $black;
}
&.active {
background-color: #e6e6e6;
background-color: $submenu-active-color;
.menu-label {
color: $blue;
}
}
&:hover{
&:hover {
.menu-label {
color: $blue;
}
@ -279,8 +283,7 @@ body {
}
&.open {
width: 200px;
width: 200px;
ul.menubar {
overflow-y: auto;
@ -321,7 +324,7 @@ body {
&.active {
background: $white;
width: calc(100% - 1px);
width: 100%;
.menu-label {
color: $black;
@ -329,25 +332,27 @@ body {
ul.sub-menubar {
display: block;
background-color: $white;
border:none !important;
background-color: $menu-item-hover-color;
border: none !important;
.sub-menu-item {
.menu-label {
color: $black;
}
&.active, &:hover {
background-color: #e6e6e6;
&.active,
&:hover {
background-color: $submenu-border-color;
.menu-label {
color: #000 !important;
color: $black !important;
}
}
}
}
}
&:hover {
&:hover {
.menu-label {
color: $black;
}
@ -369,7 +374,7 @@ body {
.control {
background: $white;
border: 1px solid #c7c7c7;
border: 1px solid $control-border-color;
@include border-radius(3px);
width: 150px;
height: 36px;
@ -410,7 +415,7 @@ body {
.locale {
float: right;
color: #8e8e8e;
color: $role-text-color;
}
}
@ -475,7 +480,7 @@ body {
}
.content-container {
padding-left: 56px;
padding-left: 56px;
height: calc(100% - 60px);
width: 100%;
margin-top: 60px;
@ -485,7 +490,7 @@ body {
}
.content-wrapper {
margin-top:1px;
margin-top: 1px;
}
.content {
@ -497,8 +502,8 @@ body {
position: sticky;
top: 60px;
z-index: 3;
background-color: $white;
@include box-shadow(0 3px 6px 0 rgba(0, 0, 0, 0.05));
background-color: $white;
@include box-shadow(0 3px 6px 0 rgba(0, 0, 0, 0.05));
.page-title {
float: left;
@ -522,7 +527,7 @@ body {
.page-action {
float: right;
margin-top:-5px;
margin-top: -5px;
* {
display: inline-block;
@ -554,22 +559,22 @@ body {
}
}
.notif{
.notif {
background-color: $white;
li {
padding: 10px;
border-bottom: 1px solid #c7c7c7;
border-bottom: 1px solid $notification-li-border-color;
position: relative;
.notif-icon{
.notif-icon {
position: absolute;
height: 40px;
width: 40px;
left: 12px;
border-radius: 5px;
span {
position: absolute;
background-repeat: no-repeat;
@ -577,49 +582,49 @@ body {
top: 5px;
left: 5px;
}
}
}
.notif-content > a{
.notif-content>a {
text-decoration: none;
color: rgba(58, 58, 58, 1);
}
.pending{
background-color: #f2c94c;
.pending {
background-color: $pending-color;
}
.processing{
background-color: #399cdb;
.processing {
background-color: $processing-color;
}
.canceled{
.canceled {
background-color: $red;
}
.closed{
background-color: #eb5757;
.closed {
background-color: $closed-color;
}
.completed{
.completed {
background-color: $green;
}
.notif-content {
margin-left: 50px;
margin-left: 50px;
}
}
.read{
.read {
color: rgba(58, 58, 58, 0.5);
.notif-content > a{
.notif-content>a {
text-decoration: none;
color: rgba(58, 58, 58, 0.5);
}
}
}
}
.notification-badge{
.notification-badge {
position: absolute;
right: 13px;
top: 6px;
@ -632,77 +637,77 @@ body {
font-weight: 900;
}
#search-icon{
#search-icon {
position: absolute;
margin-top: 6px;
margin-left: 151px;
}
.notif-filter{
.notif-filter {
margin-top: 0px !important;
}
.read{
background-color: #e8e8e8;
.read {
background-color: $read-background-color;
}
.page-item.active {
.page-link {
color: $white !important;
}
.page-link {
color: $white !important;
}
}
.switch-dark{
.switch-dark {
width: 75%;
}
.read-all{
color: #3a3a3a;
background:none;
border:none;
.read-all {
color: $read-all-text-color;
background: none;
border: none;
}
#notif-title{
#notif-title {
height: 50px;
padding: 14px 10px;
border-bottom: 1px solid #c7c7c7;
border-bottom: 1px solid $control-border-color;
cursor: default;
}
@media only screen and (min-width: 768px){
.navbar-left{
@media only screen and (min-width: 768px) {
.navbar-left {
display: block;
}
}
.navbar-top {
.navbar-top {
.navbar-top-right {
.profile {
.profile-info{
display: inline-block;
.profile-info {
display: inline-block;
}
}
}
}
#search-icon{
#search-icon {
position: absolute;
margin-top: 6px;
margin-left: 151px;
}
.notif-filter{
.notif-filter {
margin-top: 0px !important;
}
.switch-dark{
.switch-dark {
width: 75%;
}
}
}
@media only screen and (max-width: 768px){
@media only screen and (max-width: 768px) {
h1 {
font-size: 18px;
@ -712,26 +717,26 @@ body {
padding: 4px 6px;
}
.navbar-top {
.navbar-top-left {
.hamburger{
.navbar-top {
.navbar-top-left {
.hamburger {
display: block;
}
}
.navbar-top-right {
.profile {
.profile-info{
.profile-info {
display: none;
}
}
}
}
.navbar-left{
.navbar-left {
left: 0px;
display: none;
}
@ -746,13 +751,13 @@ body {
bottom: 0px;
height: calc(100% - 60px);
width: 100%;
.aside-nav {
display: none;
}
.content {
.page-header {
.control-group {
@ -767,58 +772,58 @@ body {
.page-title {
float: left;
width: 100%;
.back-link {
.back-link {
margin-top: 0px;
margin-right: -1px;
height: 22px !important;
width: 22px !important;
}
}
}
.page-action {
position: absolute;
right: 10px;
margin-top: 0px;
margin-top: 0px;
.export-import{
.export-import {
margin-top: -15px;
}
* {
display: inline-block;
}
display: inline-block;
}
}
}
}
.content-wrapper {
margin-left: 0px;
margin-top:1px;
}
margin-top: 1px;
}
}
#search-icon{
#search-icon {
position: absolute;
margin-top: 6px;
right: 16px;
}
.notif-filter{
.notif-filter {
margin-top: 12px !important;
}
.switch-dark{
.switch-dark {
width: 100%;
}
}
@media only screen and (max-width: 411px){
@media only screen and (max-width: 411px) {
.content-container {
.content {
.page-header {
.control-group {
@ -830,15 +835,15 @@ body {
margin-top: 40px;
}
}
}
}
}
}
@media only screen and (max-width: 385px){
@media only screen and (max-width: 385px) {
.content-container {
.content {
.page-header {
.control-group {
@ -850,15 +855,15 @@ body {
margin-top: 40px;
}
}
}
}
}
}
@media only screen and (max-width: 320px){
@media only screen and (max-width: 320px) {
.content-container {
.content {
.page-header {
.control-group {
@ -870,6 +875,6 @@ body {
margin-top: 40px;
}
}
}
}
}
}
}

View File

@ -1364,6 +1364,11 @@ return [
'something-went-wrong' => 'Something went wrong!',
],
'validations' => [
'slug-being-used' => 'This slug is getting used in either categories or products.',
'slug-reserved' => 'This slug is reserved.',
],
'footer' => [
'copy-right' => ' مدعوم من <a href="https://bagisto.com/" target="_blank"> باغيستو </a> ، مشروع مجتمع بواسطة <a href="https://webkul.com/" target="_blank">Webkul</a>',
],

View File

@ -1370,6 +1370,10 @@ return [
'order-pending' => 'Konto kann nicht gelöscht werden, da einige Bestellungen ausstehen oder verarbeitet werden.',
'something-went-wrong' => 'Something went wrong!',
],
'validations' => [
'slug-being-used' => 'This slug is getting used in either categories or products.',
'slug-reserved' => 'This slug is reserved.',
],
'footer' =>
[
'copy-right' => 'Powered by <a href="https://bagisto.com/" target="_blank">Bagisto</a>, A Community Project by <a href="https://webkul.com/" target="_blank">Webkul</a>',

View File

@ -1364,7 +1364,7 @@ return [
],
'response' => [
'being-used' => 'This resource :name is getting used in :source',
'being-used' => 'This :name is getting used in :source',
'product-copied' => 'The Product has been copied',
'error-while-copying' => 'Something went wrong while trying to copy the product',
'product-can-not-be-copied' => 'Products of type :type can not be copied',
@ -1390,6 +1390,11 @@ return [
'something-went-wrong' => 'Something went wrong!',
],
'validations' => [
'slug-being-used' => 'This slug is getting used in either categories or products.',
'slug-reserved' => 'This slug is reserved.',
],
'footer' => [
'copy-right' => 'Powered by <a href="https://bagisto.com/" target="_blank">Bagisto</a>, A Community Project by <a href="https://webkul.com/" target="_blank">Webkul</a>',
],

View File

@ -1373,6 +1373,11 @@ return [
'something-went-wrong' => 'Something went wrong!',
],
'validations' => [
'slug-being-used' => 'This slug is getting used in either categories or products.',
'slug-reserved' => 'This slug is reserved.',
],
'footer' => [
'copy-right' => 'Powered by <a href="https://bagisto.com/" target="_blank">Bagisto</a>, A Community Project by <a href="https://webkul.com/" target="_blank">Webkul</a>',
],

View File

@ -1361,6 +1361,11 @@ return [
'something-went-wrong' => 'Something went wrong!',
],
'validations' => [
'slug-being-used' => 'This slug is getting used in either categories or products.',
'slug-reserved' => 'This slug is reserved.',
],
'footer' => [
'copy-right' => 'طراحی شده توسط <a href="https://bagisto.com/" target="_blank">Bagisto</a> ، یک پروژه عمومی توسط <a href="https://webkul.com/" target="_blank">Webkul</a>',
],

View File

@ -1387,6 +1387,11 @@ return [
'something-went-wrong' => 'Something went wrong!',
],
'validations' => [
'slug-being-used' => 'This slug is getting used in either categories or products.',
'slug-reserved' => 'This slug is reserved.',
],
'footer' => [
'copy-right' => 'Propulsé par <a href="https://bagisto.com/" target="_blank">Bagisto</a>, un projet communautaire de <a href="https://webkul.com/" target="_blank ">Webkul</a>',
],

View File

@ -1364,6 +1364,11 @@ return [
'something-went-wrong' => 'Something went wrong!',
],
'validations' => [
'slug-being-used' => 'This slug is getting used in either categories or products.',
'slug-reserved' => 'This slug is reserved.',
],
'footer' => [
'copy-right' => 'Realizzato con <a href="https://bagisto.com/" target="_blank">Bagisto</a>, Un Community Project di <a href="https://webkul.com/" target="_blank">Webkul</a>',
],

View File

@ -1358,6 +1358,11 @@ return [
'something-went-wrong' => 'Something went wrong!',
],
'validations' => [
'slug-being-used' => 'This slug is getting used in either categories or products.',
'slug-reserved' => 'This slug is reserved.',
],
'footer' => [
'copy-right' => 'Aangedreven door <a href="https://bagisto.com/" target="_blank">Bagisto</a>, Een gemeenschapsproject door <a href="https://webkul.com/" target="_blank">Webkul</a>',
],

View File

@ -1361,6 +1361,11 @@ return [
'something-went-wrong' => 'Something went wrong!',
],
'validations' => [
'slug-being-used' => 'This slug is getting used in either categories or products.',
'slug-reserved' => 'This slug is reserved.',
],
'footer' => [
'copy-right' => 'Napędzany przez <a href="https://bagisto.com/" target="_blank">Bagisto</a>, projekt wspólnotowy by <a href="https://webkul.com/" target="_blank">Webkul</a>',
],

View File

@ -1360,6 +1360,11 @@ return [
'something-went-wrong' => 'Something went wrong!',
],
'validations' => [
'slug-being-used' => 'This slug is getting used in either categories or products.',
'slug-reserved' => 'This slug is reserved.',
],
'footer' => [
'copy-right' => 'Desenvolvido por <a href="https://bagisto.com/" target="_blank">Bagisto</a>, um projeto comunitário da <a href="https://webkul.com/" target="_blank">Webkul</a>',
],

View File

@ -1348,6 +1348,11 @@ return [
'something-went-wrong' => 'Something went wrong!',
],
'validations' => [
'slug-being-used' => 'This slug is getting used in either categories or products.',
'slug-reserved' => 'This slug is reserved.',
],
'footer' => [
'copy-right' => 'Powered by <a href="https://bagisto.com/" target="_blank">Bagisto</a>, A Community Project by <a href="https://webkul.com/" target="_blank">Webkul</a>',
],
@ -1543,7 +1548,7 @@ return [
'resource-not-found' => 'Uyarı: İstenen :resource Kayıtta bulunamadı.',
],
],
'notification' => [
'title' => 'Bildirim',
'title-plural' => 'Bildirimler',

View File

@ -61,7 +61,7 @@
<div class="dropdown-toggle">
<i class="icon locale-icon-bold" style="height:26px;width:26px"></i>
<i class="icon locale-icon-bold"></i>
</div>
<div class="dropdown-list bottom-right">

View File

@ -0,0 +1,139 @@
<?php
namespace Webkul\Admin\Validations;
use Illuminate\Contracts\Validation\Rule;
use Illuminate\Support\Facades\DB;
use Webkul\Category\Models\CategoryTranslationProxy;
use Webkul\Product\Models\ProductFlatProxy;
class ProductCategoryUniqueSlug implements Rule
{
/**
* Reserved slugs.
*
* @var array
*/
protected $reservedSlugs = [
'categories',
];
/**
* Is slug reserved.
*
* @var bool
*/
protected $isSlugReserved = false;
/**
* Table name.
*
* @var string
*/
protected $tableName;
/**
* Table id.
*
* @var string
*/
protected $id;
/**
* Constructor.
*
* @param string $tableName
* @param string $id
*/
public function __construct($tableName = null, $id = null)
{
$this->tableName = $tableName;
$this->id = $id;
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
if (in_array($value, $this->reservedSlugs)) {
return ! ($this->isSlugReserved = true);
}
return $this->isSlugUnique($value);
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
if ($this->isSlugReserved) {
return trans('admin::app.validations.slug-reserved');
}
return trans('admin::app.validations.slug-being-used');
}
/**
* Checks slug is unique or not.
*
* @param string $slug
* @return bool
*/
protected function isSlugUnique($slug)
{
return ! $this->isSlugExistsInCategories($slug) && ! $this->isSlugExistsInProducts($slug);
}
/**
* Is slug is exists in categories.
*
* @param string $slug
* @return bool
*/
protected function isSlugExistsInCategories($slug)
{
if ($this->tableName && $this->id && $this->tableName === 'category_translations') {
return CategoryTranslationProxy::modelClass()::where('category_id', '<>', $this->id)
->where('slug', $slug)
->limit(1)
->select(DB::raw(1))
->exists();
}
return CategoryTranslationProxy::modelClass()::where('slug', $slug)
->limit(1)
->select(DB::raw(1))
->exists();
}
/**
* Is slug is exists in products.
*
* @param string $slug
* @return bool
*/
protected function isSlugExistsInProducts($slug)
{
if ($this->tableName && $this->id && $this->tableName === 'product_flat') {
return ProductFlatProxy::modelClass()::where('product_id', '<>', $this->id)
->where('url_key', $slug)
->limit(1)
->select(DB::raw(1))
->exists();
}
return ProductFlatProxy::modelClass()::where('url_key', $slug)
->limit(1)
->select(DB::raw(1))
->exists();
}
}

View File

@ -2,10 +2,10 @@
namespace Webkul\Category\Http\Controllers;
use Webkul\Core\Models\Channel;
use Illuminate\Support\Facades\Event;
use Webkul\Category\Repositories\CategoryRepository;
use Webkul\Attribute\Repositories\AttributeRepository;
use Webkul\Category\Http\Requests\CategoryRequest;
use Webkul\Category\Repositories\CategoryRepository;
use Webkul\Core\Models\Channel;
class CategoryController extends Controller
{
@ -17,14 +17,14 @@ class CategoryController extends Controller
protected $_config;
/**
* CategoryRepository object
* Category repository instance.
*
* @var \Webkul\Category\Repositories\CategoryRepository
*/
protected $categoryRepository;
/**
* AttributeRepository object
* Attribute repository instance.
*
* @var \Webkul\Attribute\Repositories\AttributeRepository
*/
@ -40,8 +40,7 @@ class CategoryController extends Controller
public function __construct(
CategoryRepository $categoryRepository,
AttributeRepository $attributeRepository
)
{
) {
$this->categoryRepository = $categoryRepository;
$this->attributeRepository = $attributeRepository;
@ -68,7 +67,7 @@ class CategoryController extends Controller
{
$categories = $this->categoryRepository->getCategoryTree(null, ['id']);
$attributes = $this->attributeRepository->findWhere(['is_filterable' => 1]);
$attributes = $this->attributeRepository->findWhere(['is_filterable' => 1]);
return view($this->_config['view'], compact('categories', 'attributes'));
}
@ -76,18 +75,12 @@ class CategoryController extends Controller
/**
* Store a newly created resource in storage.
*
* @param \Webkul\Category\Http\Requests\CategoryRequest $categoryRequest
* @return \Illuminate\Http\Response
*/
public function store()
public function store(CategoryRequest $categoryRequest)
{
$this->validate(request(), [
'slug' => ['required', 'unique:category_translations,slug'],
'name' => 'required',
'image.*' => 'mimes:bmp,jpeg,jpg,png,webp',
'description' => 'required_if:display_mode,==,description_only,products_and_description',
]);
$this->categoryRepository->create(request()->all());
$this->categoryRepository->create($categoryRequest->all());
session()->flash('success', trans('admin::app.response.create-success', ['name' => 'Category']));
@ -106,7 +99,7 @@ class CategoryController extends Controller
$categories = $this->categoryRepository->getCategoryTreeWithoutDescendant($id);
$attributes = $this->attributeRepository->findWhere(['is_filterable' => 1]);
$attributes = $this->attributeRepository->findWhere(['is_filterable' => 1]);
return view($this->_config['view'], compact('category', 'categories', 'attributes'));
}
@ -114,24 +107,13 @@ class CategoryController extends Controller
/**
* Update the specified resource in storage.
*
* @param \Webkul\Category\Http\Requests\CategoryRequest $categoryRequest
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update($id)
public function update(CategoryRequest $categoryRequest, $id)
{
$locale = core()->getRequestedLocaleCode();
$this->validate(request(), [
$locale . '.slug' => ['required', function ($attribute, $value, $fail) use ($id) {
if (! $this->categoryRepository->isSlugUnique($id, $value)) {
$fail(trans('admin::app.response.already-taken', ['name' => 'Category']));
}
}],
$locale . '.name' => 'required',
'image.*' => 'mimes:bmp,jpeg,jpg,png,webp',
]);
$this->categoryRepository->update(request()->all(), $id);
$this->categoryRepository->update($categoryRequest->all(), $id);
session()->flash('success', trans('admin::app.response.update-success', ['name' => 'Category']));
@ -152,11 +134,7 @@ class CategoryController extends Controller
session()->flash('warning', trans('admin::app.response.delete-category-root', ['name' => 'Category']));
} else {
try {
Event::dispatch('catalog.category.delete.before', $category);
$category->delete();
Event::dispatch('catalog.category.delete.after', $category);
$this->categoryRepository->delete($id);
session()->flash('success', trans('admin::app.response.delete-success', ['name' => 'Category']));
@ -185,15 +163,13 @@ class CategoryController extends Controller
if (isset($category)) {
if ($this->isCategoryDeletable($category)) {
$suppressFlash = false;
session()->flash('warning', trans('admin::app.response.delete-category-root', ['name' => 'Category']));
} else {
try {
$suppressFlash = true;
Event::dispatch('catalog.category.delete.before', $categoryId);
$category->delete();
Event::dispatch('catalog.category.delete.after', $categoryId);
$this->categoryRepository->delete($categoryId);
} catch (\Exception $e) {
session()->flash('error', trans('admin::app.response.delete-failed', ['name' => 'Category']));
}
@ -213,11 +189,12 @@ class CategoryController extends Controller
*
* @return \Illuminate\Http\Response
*/
public function categoryProductCount() {
$indexes = explode(",", request()->input('indexes'));
public function categoryProductCount()
{
$product_count = 0;
$indexes = explode(',', request()->input('indexes'));
foreach($indexes as $index) {
foreach ($indexes as $index) {
$category = $this->categoryRepository->find($index);
$product_count += $category->products->count();
}
@ -244,4 +221,4 @@ class CategoryController extends Controller
return $category->id === 1 || $rootIdInChannels->contains($category->id);
}
}
}

View File

@ -0,0 +1,44 @@
<?php
namespace Webkul\Category\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Webkul\Admin\Validations\ProductCategoryUniqueSlug;
class CategoryRequest extends FormRequest
{
/**
* Determine if the Configuraion is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
$locale = core()->getRequestedLocaleCode();
if ($id = request('id')) {
return [
$locale . '.slug' => ['required', new ProductCategoryUniqueSlug('category_translations', $id)],
$locale . '.name' => 'required',
'image.*' => 'mimes:bmp,jpeg,jpg,png,webp',
];
}
return [
'slug' => ['required', new ProductCategoryUniqueSlug],
'name' => 'required',
'image.*' => 'mimes:bmp,jpeg,jpg,png,webp',
'description' => 'required_if:display_mode,==,description_only,products_and_description',
];
}
}

View File

@ -2,12 +2,12 @@
namespace Webkul\Category\Repositories;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Support\Facades\DB;
use Webkul\Core\Eloquent\Repository;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\Storage;
use Webkul\Category\Models\CategoryTranslationProxy;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Webkul\Core\Eloquent\Repository;
class CategoryRepository extends Repository
{
@ -18,7 +18,7 @@ class CategoryRepository extends Repository
*/
public function model()
{
return 'Webkul\Category\Contracts\Category';
return \Webkul\Category\Contracts\Category::class;
}
/**
@ -57,6 +57,50 @@ class CategoryRepository extends Repository
return $category;
}
/**
* Update category.
*
* @param array $data
* @param int $id
* @param string $attribute
* @return \Webkul\Category\Contracts\Category
*/
public function update(array $data, $id, $attribute = 'id')
{
$category = $this->find($id);
Event::dispatch('catalog.category.update.before', $id);
$data = $this->setSameAttributeValueToAllLocale($data, 'slug');
$category->update($data);
$this->uploadImages($data, $category);
if (isset($data['attributes'])) {
$category->filterableAttributes()->sync($data['attributes']);
}
Event::dispatch('catalog.category.update.after', $id);
return $category;
}
/**
* Delete category.
*
* @param int $id
* @return void
*/
public function delete($id)
{
Event::dispatch('catalog.category.delete.before', $id);
parent::delete($id);
Event::dispatch('catalog.category.delete.after', $id);
}
/**
* Specify category tree.
*
@ -79,8 +123,8 @@ class CategoryRepository extends Repository
public function getCategoryTreeWithoutDescendant($id = null)
{
return $id
? $this->model::orderBy('position', 'ASC')->where('id', '!=', $id)->whereNotDescendantOf($id)->get()->toTree()
: $this->model::orderBy('position', 'ASC')->get()->toTree();
? $this->model::orderBy('position', 'ASC')->where('id', '!=', $id)->whereNotDescendantOf($id)->get()->toTree()
: $this->model::orderBy('position', 'ASC')->get()->toTree();
}
/**
@ -90,7 +134,7 @@ class CategoryRepository extends Repository
*/
public function getRootCategories()
{
return $this->getModel()->where('parent_id', NULL)->get();
return $this->getModel()->where('parent_id', null)->get();
}
/**
@ -130,6 +174,21 @@ class CategoryRepository extends Repository
return $exists ? false : true;
}
/**
* Retrive category from slug.
*
* @param string $slug
* @return \Webkul\Category\Contracts\Category
*/
public function findBySlug($slug)
{
$category = $this->model->whereTranslation('slug', $slug)->first();
if ($category) {
return $category;
}
}
/**
* Retrive category from slug.
*
@ -149,21 +208,6 @@ class CategoryRepository extends Repository
);
}
/**
* Retrive category from slug.
*
* @param string $slug
* @return \Webkul\Category\Contracts\Category
*/
public function findBySlug($slug)
{
$category = $this->model->whereTranslation('slug', $slug)->first();
if ($category) {
return $category;
}
}
/**
* Find by path.
*
@ -175,50 +219,6 @@ class CategoryRepository extends Repository
return $this->model->whereTranslation('url_path', $urlPath)->first();
}
/**
* Update category.
*
* @param array $data
* @param int $id
* @param string $attribute
* @return \Webkul\Category\Contracts\Category
*/
public function update(array $data, $id, $attribute = "id")
{
$category = $this->find($id);
Event::dispatch('catalog.category.update.before', $id);
$data = $this->setSameAttributeValueToAllLocale($data, 'slug');
$category->update($data);
$this->uploadImages($data, $category);
if (isset($data['attributes'])) {
$category->filterableAttributes()->sync($data['attributes']);
}
Event::dispatch('catalog.category.update.after', $id);
return $category;
}
/**
* Delete category.
*
* @param int $id
* @return void
*/
public function delete($id)
{
Event::dispatch('catalog.category.delete.before', $id);
parent::delete($id);
Event::dispatch('catalog.category.delete.after', $id);
}
/**
* Upload category's images.
*
@ -227,7 +227,7 @@ class CategoryRepository extends Repository
* @param string $type
* @return void
*/
public function uploadImages($data, $category, $type = "image")
public function uploadImages($data, $category, $type = 'image')
{
if (isset($data[$type])) {
$request = request();
@ -268,7 +268,7 @@ class CategoryRepository extends Repository
$trimmed = [];
foreach ($categories as $key => $category) {
if ($category->name != null || $category->name != "") {
if ($category->name != null || $category->name != '') {
$trimmed[$key] = [
'id' => $category->id,
'name' => $category->name,
@ -300,7 +300,9 @@ class CategoryRepository extends Repository
foreach (core()->getAllLocales() as $locale) {
foreach ($model->translatedAttributes as $attribute) {
if ($attribute === $attributeName) {
$data[$locale->code][$attribute] = isset($data[$requestedLocale][$attribute]) ?: $data[$data['locale']][$attribute];
$data[$locale->code][$attribute] = isset($data[$requestedLocale][$attribute])
? $data[$requestedLocale][$attribute]
: $data[$data['locale']][$attribute];
}
}
}

View File

@ -1,5 +1,4 @@
@if (request()->route()->getName() == 'shop.checkout.onepage.index')
@php
$clientId = core()->getConfigData('sales.paymentmethods.paypal_smart_button.client_id');
$acceptedCurrency = core()->getConfigData('sales.paymentmethods.paypal_smart_button.accepted_currencies');
@ -28,12 +27,6 @@
return;
}
if (typeof paypal == 'undefined') {
options.alertBox(messages.sdkValidationError);
return;
}
let options = {
style: {
layout: 'vertical',
@ -98,9 +91,14 @@
}
};
if (typeof paypal == 'undefined') {
options.alertBox(messages.sdkValidationError);
return;
}
paypal.Buttons(options).render('.paypal-button-container');
});
});
</script>
@endif

View File

@ -218,7 +218,7 @@ class ProductController extends Controller
{
$data = request()->all();
$multiselectAttributeCodes = array();
$multiselectAttributeCodes = [];
$productAttributes = $this->productRepository->findOrFail($id);
@ -237,7 +237,7 @@ class ProductController extends Controller
if (count($multiselectAttributeCodes)) {
foreach ($multiselectAttributeCodes as $multiselectAttributeCode) {
if (! isset($data[$multiselectAttributeCode])) {
$data[$multiselectAttributeCode] = array();
$data[$multiselectAttributeCode] = [];
}
}
}
@ -262,8 +262,8 @@ class ProductController extends Controller
$this->productInventoryRepository->saveInventories(request()->all(), $product);
return response()->json([
'message' => __('admin::app.catalog.products.saved-inventory-message'),
'updatedTotal' => $this->productInventoryRepository->where('product_id', $product->id)->sum('qty')
'message' => __('admin::app.catalog.products.saved-inventory-message'),
'updatedTotal' => $this->productInventoryRepository->where('product_id', $product->id)->sum('qty'),
]);
}

View File

@ -3,28 +3,32 @@
namespace Webkul\Product\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
use Webkul\Product\Repositories\ProductRepository;
use Webkul\Product\Repositories\ProductAttributeValueRepository;
use Webkul\Admin\Validations\ProductCategoryUniqueSlug;
use Webkul\Core\Contracts\Validations\Decimal;
use Webkul\Core\Contracts\Validations\Slug;
use Webkul\Product\Models\ProductAttributeValue;
use Webkul\Product\Repositories\ProductAttributeValueRepository;
use Webkul\Product\Repositories\ProductRepository;
class ProductForm extends FormRequest
{
/**
* ProductRepository object
* Product repository instance.
*
* @var \Webkul\Product\Repositories\ProductRepository
*/
protected $productRepository;
/**
* ProductAttributeValueRepository object
* Product attribute value repository instnace.
*
* @var \Webkul\Product\Repositories\ProductAttributeValueRepository
*/
protected $productAttributeValueRepository;
/**
* Rules.
*
* @var array
*/
protected $rules;
@ -39,8 +43,7 @@ class ProductForm extends FormRequest
public function __construct(
ProductRepository $productRepository,
ProductAttributeValueRepository $productAttributeValueRepository
)
{
) {
$this->productRepository = $productRepository;
$this->productAttributeValueRepository = $productAttributeValueRepository;
@ -65,19 +68,20 @@ class ProductForm extends FormRequest
{
$product = $this->productRepository->find($this->id);
$maxVideoFileSize = (core()->getConfigData('catalog.products.attribute.file_attribute_upload_size')) ? core()->getConfigData('catalog.products.attribute.file_attribute_upload_size') : '2048' ;
$maxVideoFileSize = (core()->getConfigData('catalog.products.attribute.file_attribute_upload_size')) ? core()->getConfigData('catalog.products.attribute.file_attribute_upload_size') : '2048';
$this->rules = array_merge($product->getTypeInstance()->getTypeValidationRules(), [
'sku' => ['required', 'unique:products,sku,' . $this->id, new \Webkul\Core\Contracts\Validations\Slug],
'sku' => ['required', 'unique:products,sku,' . $this->id, new Slug],
'url_key' => ['required', new ProductCategoryUniqueSlug('product_flat', $this->id)],
'images.*' => 'nullable|mimes:bmp,jpeg,jpg,png,webp',
'videos.*' => "nullable|mimes:mov,mp4|max:$maxVideoFileSize",
'special_price_from' => 'nullable|date',
'special_price_to' => 'nullable|date|after_or_equal:special_price_from',
'special_price' => ['nullable', new \Webkul\Core\Contracts\Validations\Decimal, 'lt:price'],
'special_price' => ['nullable', new Decimal, 'lt:price'],
]);
foreach ($product->getEditableAttributes() as $attribute) {
if ($attribute->code == 'sku' || $attribute->type == 'boolean') {
if (in_array($attribute->code, ['sku', 'url_key']) || $attribute->type == 'boolean') {
continue;
}
@ -92,13 +96,13 @@ class ProductForm extends FormRequest
if ($attribute->type == 'text' && $attribute->validation) {
array_push($validations,
$attribute->validation == 'decimal'
? new \Webkul\Core\Contracts\Validations\Decimal
: $attribute->validation
? new Decimal
: $attribute->validation
);
}
if ($attribute->type == 'price') {
array_push($validations, new \Webkul\Core\Contracts\Validations\Decimal);
array_push($validations, new Decimal);
}
if ($attribute->is_unique) {
@ -118,10 +122,10 @@ class ProductForm extends FormRequest
}
/**
* Custom message for validation
* Custom message for validation.
*
* @return array
*/
*/
public function messages()
{
return [

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
{
"/js/shop.js": "/js/shop.js?id=9d5b79be5419c0a5c1bc",
"/css/shop.css": "/css/shop.css?id=115fadd65b812c605be3"
"/css/shop.css": "/css/shop.css?id=547e2e10c32ca9fd4028"
}

View File

@ -3522,6 +3522,26 @@ ol.breadcrumb {
}
}
//Account content inside a table
.account-table-content {
color: $font-dark;
margin-top: 1.4%;
table {
width: 100%;
tbody {
tr {
height: 45px;
td {
width: 250px;
}
}
}
}
}
.account-content {
width: 100%;
display: flex;
@ -3805,7 +3825,7 @@ ol.breadcrumb {
padding: 20px 0;
border-bottom: 1px solid $address-card-border-color;
.row {
.sale {
display: block;
padding: 7px 0;

View File

@ -34,7 +34,7 @@
<tab name="{{ __('shop::app.customer.account.order.view.info') }}" :selected="true">
<div class="sale-section">
<div class="section-content">
<div class="row">
<div class="sale">
<span class="title">
{{ __('shop::app.customer.account.order.view.placed-on') }}
</span>
@ -53,87 +53,90 @@
<div class="section-content">
<div class="table">
<table>
<thead>
<tr>
<th>{{ __('shop::app.customer.account.order.view.SKU') }}</th>
<th>{{ __('shop::app.customer.account.order.view.product-name') }}</th>
<th>{{ __('shop::app.customer.account.order.view.price') }}</th>
<th>{{ __('shop::app.customer.account.order.view.item-status') }}</th>
<th>{{ __('shop::app.customer.account.order.view.subtotal') }}</th>
<th>{{ __('shop::app.customer.account.order.view.tax-percent') }}</th>
<th>{{ __('shop::app.customer.account.order.view.tax-amount') }}</th>
<th>{{ __('shop::app.customer.account.order.view.grand-total') }}</th>
</tr>
</thead>
<tbody>
@foreach ($order->items as $item)
<div class="table-responsive">
<table>
<thead>
<tr>
<td data-value="{{ __('shop::app.customer.account.order.view.SKU') }}">
{{ $item->getTypeInstance()->getOrderedItem($item)->sku }}
</td>
<td data-value="{{ __('shop::app.customer.account.order.view.product-name') }}">
{{ $item->name }}
@if (isset($item->additional['attributes']))
<div class="item-options">
@foreach ($item->additional['attributes'] as $attribute)
<b>{{ $attribute['attribute_name'] }} : </b>{{ $attribute['option_label'] }}</br>
@endforeach
</div>
@endif
</td>
<td data-value="{{ __('shop::app.customer.account.order.view.price') }}">
{{ core()->formatPrice($item->price, $order->order_currency_code) }}
</td>
<td data-value="{{ __('shop::app.customer.account.order.view.item-status') }}">
<span class="qty-row">
{{ __('shop::app.customer.account.order.view.item-ordered', ['qty_ordered' => $item->qty_ordered]) }}
</span>
<span class="qty-row">
{{ $item->qty_invoiced ? __('shop::app.customer.account.order.view.item-invoice', ['qty_invoiced' => $item->qty_invoiced]) : '' }}
</span>
<span class="qty-row">
{{ $item->qty_shipped ? __('shop::app.customer.account.order.view.item-shipped', ['qty_shipped' => $item->qty_shipped]) : '' }}
</span>
<span class="qty-row">
{{ $item->qty_refunded ? __('shop::app.customer.account.order.view.item-refunded', ['qty_refunded' => $item->qty_refunded]) : '' }}
</span>
<span class="qty-row">
{{ $item->qty_canceled ? __('shop::app.customer.account.order.view.item-canceled', ['qty_canceled' => $item->qty_canceled]) : '' }}
</span>
</td>
<td data-value="{{ __('shop::app.customer.account.order.view.subtotal') }}">
{{ core()->formatPrice($item->total, $order->order_currency_code) }}
</td>
<td data-value="{{ __('shop::app.customer.account.order.view.tax-percent') }}">
{{ number_format($item->tax_percent, 2) }}%
</td>
<td data-value="{{ __('shop::app.customer.account.order.view.tax-amount') }}">
{{ core()->formatPrice($item->tax_amount, $order->order_currency_code) }}
</td>
<td data-value="{{ __('shop::app.customer.account.order.view.grand-total') }}">
{{ core()->formatPrice($item->total + $item->tax_amount - $item->discount_amount, $order->order_currency_code) }}
</td>
<th>{{ __('shop::app.customer.account.order.view.SKU') }}</th>
<th>{{ __('shop::app.customer.account.order.view.product-name') }}</th>
<th>{{ __('shop::app.customer.account.order.view.price') }}</th>
<th>{{ __('shop::app.customer.account.order.view.item-status') }}</th>
<th>{{ __('shop::app.customer.account.order.view.subtotal') }}</th>
<th>{{ __('shop::app.customer.account.order.view.tax-percent') }}</th>
<th>{{ __('shop::app.customer.account.order.view.tax-amount') }}</th>
<th>{{ __('shop::app.customer.account.order.view.grand-total') }}</th>
</tr>
@endforeach
</tbody>
</table>
</thead>
<tbody>
@foreach ($order->items as $item)
<tr>
<td data-value="{{ __('shop::app.customer.account.order.view.SKU') }}">
{{ $item->getTypeInstance()->getOrderedItem($item)->sku }}
</td>
<td data-value="{{ __('shop::app.customer.account.order.view.product-name') }}">
{{ $item->name }}
@if (isset($item->additional['attributes']))
<div class="item-options">
@foreach ($item->additional['attributes'] as $attribute)
<b>{{ $attribute['attribute_name'] }} : </b>{{ $attribute['option_label'] }}</br>
@endforeach
</div>
@endif
</td>
<td data-value="{{ __('shop::app.customer.account.order.view.price') }}">
{{ core()->formatPrice($item->price, $order->order_currency_code) }}
</td>
<td data-value="{{ __('shop::app.customer.account.order.view.item-status') }}">
<span class="qty-row">
{{ __('shop::app.customer.account.order.view.item-ordered', ['qty_ordered' => $item->qty_ordered]) }}
</span>
<span class="qty-row">
{{ $item->qty_invoiced ? __('shop::app.customer.account.order.view.item-invoice', ['qty_invoiced' => $item->qty_invoiced]) : '' }}
</span>
<span class="qty-row">
{{ $item->qty_shipped ? __('shop::app.customer.account.order.view.item-shipped', ['qty_shipped' => $item->qty_shipped]) : '' }}
</span>
<span class="qty-row">
{{ $item->qty_refunded ? __('shop::app.customer.account.order.view.item-refunded', ['qty_refunded' => $item->qty_refunded]) : '' }}
</span>
<span class="qty-row">
{{ $item->qty_canceled ? __('shop::app.customer.account.order.view.item-canceled', ['qty_canceled' => $item->qty_canceled]) : '' }}
</span>
</td>
<td data-value="{{ __('shop::app.customer.account.order.view.subtotal') }}">
{{ core()->formatPrice($item->total, $order->order_currency_code) }}
</td>
<td data-value="{{ __('shop::app.customer.account.order.view.tax-percent') }}">
{{ number_format($item->tax_percent, 2) }}%
</td>
<td data-value="{{ __('shop::app.customer.account.order.view.tax-amount') }}">
{{ core()->formatPrice($item->tax_amount, $order->order_currency_code) }}
</td>
<td data-value="{{ __('shop::app.customer.account.order.view.grand-total') }}">
{{ core()->formatPrice($item->total + $item->tax_amount - $item->discount_amount, $order->order_currency_code) }}
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
<div class="totals">
<table class="sale-summary">
@ -220,53 +223,55 @@
<div class="section-content">
<div class="table">
<table>
<thead>
<tr>
<th>{{ __('shop::app.customer.account.order.view.SKU') }}</th>
<th>{{ __('shop::app.customer.account.order.view.product-name') }}</th>
<th>{{ __('shop::app.customer.account.order.view.price') }}</th>
<th>{{ __('shop::app.customer.account.order.view.qty') }}</th>
<th>{{ __('shop::app.customer.account.order.view.subtotal') }}</th>
<th>{{ __('shop::app.customer.account.order.view.tax-amount') }}</th>
<th>{{ __('shop::app.customer.account.order.view.grand-total') }}</th>
</tr>
</thead>
<tbody>
@foreach ($invoice->items as $item)
<div class="table-responsive">
<table>
<thead>
<tr>
<td data-value="{{ __('shop::app.customer.account.order.view.SKU') }}">
{{ $item->getTypeInstance()->getOrderedItem($item)->sku }}
</td>
<td data-value="{{ __('shop::app.customer.account.order.view.product-name') }}">
{{ $item->name }}
</td>
<td data-value="{{ __('shop::app.customer.account.order.view.price') }}">
{{ core()->formatPrice($item->price, $order->order_currency_code) }}
</td>
<td data-value="{{ __('shop::app.customer.account.order.view.qty') }}">
{{ $item->qty }}
</td>
<td data-value="{{ __('shop::app.customer.account.order.view.subtotal') }}">
{{ core()->formatPrice($item->total, $order->order_currency_code) }}
</td>
<td data-value="{{ __('shop::app.customer.account.order.view.tax-amount') }}">
{{ core()->formatPrice($item->tax_amount, $order->order_currency_code) }}
</td>
<td data-value="{{ __('shop::app.customer.account.order.view.grand-total') }}">
{{ core()->formatPrice($item->total + $item->tax_amount, $order->order_currency_code) }}
</td>
<th>{{ __('shop::app.customer.account.order.view.SKU') }}</th>
<th>{{ __('shop::app.customer.account.order.view.product-name') }}</th>
<th>{{ __('shop::app.customer.account.order.view.price') }}</th>
<th>{{ __('shop::app.customer.account.order.view.qty') }}</th>
<th>{{ __('shop::app.customer.account.order.view.subtotal') }}</th>
<th>{{ __('shop::app.customer.account.order.view.tax-amount') }}</th>
<th>{{ __('shop::app.customer.account.order.view.grand-total') }}</th>
</tr>
@endforeach
</tbody>
</table>
</thead>
<tbody>
@foreach ($invoice->items as $item)
<tr>
<td data-value="{{ __('shop::app.customer.account.order.view.SKU') }}">
{{ $item->getTypeInstance()->getOrderedItem($item)->sku }}
</td>
<td data-value="{{ __('shop::app.customer.account.order.view.product-name') }}">
{{ $item->name }}
</td>
<td data-value="{{ __('shop::app.customer.account.order.view.price') }}">
{{ core()->formatPrice($item->price, $order->order_currency_code) }}
</td>
<td data-value="{{ __('shop::app.customer.account.order.view.qty') }}">
{{ $item->qty }}
</td>
<td data-value="{{ __('shop::app.customer.account.order.view.subtotal') }}">
{{ core()->formatPrice($item->total, $order->order_currency_code) }}
</td>
<td data-value="{{ __('shop::app.customer.account.order.view.tax-amount') }}">
{{ core()->formatPrice($item->tax_amount, $order->order_currency_code) }}
</td>
<td data-value="{{ __('shop::app.customer.account.order.view.grand-total') }}">
{{ core()->formatPrice($item->total + $item->tax_amount, $order->order_currency_code) }}
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
<div class="totals">
@ -315,7 +320,7 @@
@foreach ($order->shipments as $shipment)
<div class="sale-section">
<div class="section-content">
<div class="row">
<div class="sale">
<span class="title">
{{ __('shop::app.customer.account.order.view.tracking-number') }}
</span>
@ -335,25 +340,27 @@
<div class="section-content">
<div class="table">
<table>
<thead>
<tr>
<th>{{ __('shop::app.customer.account.order.view.SKU') }}</th>
<th>{{ __('shop::app.customer.account.order.view.product-name') }}</th>
<th>{{ __('shop::app.customer.account.order.view.qty') }}</th>
</tr>
</thead>
<tbody>
@foreach ($shipment->items as $item)
<div class="table-responsive">
<table>
<thead>
<tr>
<td data-value="{{ __('shop::app.customer.account.order.view.SKU') }}">{{ $item->sku }}</td>
<td data-value="{{ __('shop::app.customer.account.order.view.product-name') }}">{{ $item->name }}</td>
<td data-value="{{ __('shop::app.customer.account.order.view.qty') }}">{{ $item->qty }}</td>
<th>{{ __('shop::app.customer.account.order.view.SKU') }}</th>
<th>{{ __('shop::app.customer.account.order.view.product-name') }}</th>
<th>{{ __('shop::app.customer.account.order.view.qty') }}</th>
</tr>
@endforeach
</tbody>
</table>
</thead>
<tbody>
@foreach ($shipment->items as $item)
<tr>
<td data-value="{{ __('shop::app.customer.account.order.view.SKU') }}">{{ $item->sku }}</td>
<td data-value="{{ __('shop::app.customer.account.order.view.product-name') }}">{{ $item->name }}</td>
<td data-value="{{ __('shop::app.customer.account.order.view.qty') }}">{{ $item->qty }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>

View File

@ -58,13 +58,17 @@
<td>{{ $customer->email }}</td>
</tr>
<tr>
<td>
<button type="submit" @click="showModal('deleteProfile')" class="btn btn-lg btn-primary mt-10">
{{ __('shop::app.customer.account.address.index.delete') }}
</button>
</td>
</tr>
{!! view_render_event('bagisto.shop.customers.account.profile.view.table.after', ['customer' => $customer]) !!}
</tbody>
</table>
<button type="submit" @click="showModal('deleteProfile')" class="btn btn-lg btn-primary mt-10">
{{ __('shop::app.customer.account.address.index.delete') }}
</button>
</table>
<form method="POST" action="{{ route('customer.profile.destroy') }}" @submit.prevent="onSubmit">
@csrf

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
{
"/js/ui.js": "/js/ui.js?id=99de3c7f62be5fb50eaf",
"/css/ui.css": "/css/ui.css?id=cd88292a65dfcf07d879"
"/css/ui.css": "/css/ui.css?id=31bef3cce7a4a1b9e172"
}

View File

@ -169,6 +169,8 @@
.locale-icon-bold {
@extend %menu-properties;
background-image: url("../images/Local-Icon-bold.svg");
height: 26px;
width: 26px;
}
.store-icon {