resolve conflicts
This commit is contained in:
commit
c16e124cc5
File diff suppressed because one or more lines are too long
|
|
@ -1 +1,4 @@
|
|||
{}
|
||||
{
|
||||
"/js/admin.js": "/js/admin.js?id=94da304c8b02ad3ba649",
|
||||
"/css/admin.css": "/css/admin.css?id=8f47f9d965583dd83648"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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>',
|
||||
],
|
||||
|
|
|
|||
|
|
@ -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>',
|
||||
|
|
|
|||
|
|
@ -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>',
|
||||
],
|
||||
|
|
|
|||
|
|
@ -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>',
|
||||
],
|
||||
|
|
|
|||
|
|
@ -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>',
|
||||
],
|
||||
|
|
|
|||
|
|
@ -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>',
|
||||
],
|
||||
|
|
|
|||
|
|
@ -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>',
|
||||
],
|
||||
|
|
|
|||
|
|
@ -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>',
|
||||
],
|
||||
|
|
|
|||
|
|
@ -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>',
|
||||
],
|
||||
|
|
|
|||
|
|
@ -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>',
|
||||
],
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
@ -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];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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'),
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -169,6 +169,8 @@
|
|||
.locale-icon-bold {
|
||||
@extend %menu-properties;
|
||||
background-image: url("../images/Local-Icon-bold.svg");
|
||||
height: 26px;
|
||||
width: 26px;
|
||||
}
|
||||
|
||||
.store-icon {
|
||||
|
|
|
|||
Loading…
Reference in New Issue