From 89c24e190aef428cc54b5db457a94d7e83624055 Mon Sep 17 00:00:00 2001 From: devansh bawari Date: Wed, 15 Sep 2021 18:34:03 +0530 Subject: [PATCH 1/6] Base Structure Created --- .../Admin/publishable/assets/css/admin.css | 2 +- .../publishable/assets/mix-manifest.json | 2 +- .../Admin/src/DataGrids/ProductDataGrid.php | 101 ++++++++++++++++-- .../src/Resources/assets/sass/_variables.scss | 1 + .../assets/sass/partials/ui/_components.scss | 12 ++- .../products/datagrid/quantity.blade.php | 35 ++++++ .../views/catalog/products/index.blade.php | 24 ++++- 7 files changed, 161 insertions(+), 16 deletions(-) create mode 100644 packages/Webkul/Admin/src/Resources/views/catalog/products/datagrid/quantity.blade.php diff --git a/packages/Webkul/Admin/publishable/assets/css/admin.css b/packages/Webkul/Admin/publishable/assets/css/admin.css index 103baa325..ae27db964 100755 --- a/packages/Webkul/Admin/publishable/assets/css/admin.css +++ b/packages/Webkul/Admin/publishable/assets/css/admin.css @@ -1 +1 @@ -@import url(https://fonts.googleapis.com/css?family=Montserrat:400,500);body{margin:0;color:#3a3a3a;font-family:Montserrat,sans-serif;font-size:14px;font-weight:500;position:static;height:100%;width:100%;background-color:#fff}::-webkit-scrollbar{width:12px}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px hsla(0,0%,100%,.3);border-radius:10px}::-webkit-scrollbar-thumb{border-radius:10px;-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.5)}.navbar-top{height:60px;background-color:#fff;font-size:0;box-shadow:0 3px 6px 0 rgba(0,0,0,.05);border-bottom:1px solid hsla(0,0%,63.5%,.2);position:fixed;left:0;right:0;z-index:5}.navbar-top .navbar-top-left{width:50%;height:60px;display:inline-block;vertical-align:middle;background-color:#fff}.navbar-top .navbar-top-left .brand-logo{padding:10px}.navbar-top .navbar-top-right{width:50%;height:60px;text-align:right;display:inline-block;vertical-align:middle}.navbar-top .navbar-top-right .profile-info{display:inline-block;vertical-align:middle;text-align:left;min-width:50px;padding:12px 0;margin:0 25px 0 30px;font-size:15px;cursor:pointer;position:relative}.navbar-top .navbar-top-right .profile-info .app-version{padding:10px 20px 0;margin-bottom:-10px;display:block;cursor:default;color:#a2a2a2}.navbar-top .navbar-top-right .profile-info .dropdown-list{top:63px;right:0;bottom:inherit!important}.navbar-top .navbar-top-right .profile-info .name{color:#000311;display:block;text-align:left}.navbar-top .navbar-top-right .profile-info .role{font-size:14px;color:#8e8e8e;display:block;text-align:left}.navbar-top .navbar-top-right .profile-info i.icon{margin-left:10px}.navbar-left{position:fixed;left:0;top:60px;width:90px;padding-top:20px;border-right:1px solid hsla(0,0%,63.5%,.2);height:auto;bottom:0;z-index:1;background-color:#fff}.navbar-left ul.menubar li.menu-item{padding:10px 5px;font-size:11px;text-align:center;text-transform:uppercase}.navbar-left ul.menubar li.menu-item a{color:#a2a2a2}.navbar-left ul.menubar li.menu-item.active a{color:#0041ff}.navbar-left ul.menubar li.menu-item span{display:block;margin:auto}.content-container{padding-left:90px;position:absolute;margin-top:60px;top:0;right:0;left:0;bottom:0;height:calc(100% - 60px);width:100%}.content-container .inner-section{height:100%}.content-container .aside-nav{width:280px;position:fixed;top:60px;bottom:0;border-right:1px solid hsla(0,0%,63.5%,.2);background-color:#f8f9fa;padding-top:10px;padding-bottom:10px;z-index:4}.content-container .aside-nav ul{overflow-y:auto;height:90%}.content-container .aside-nav a{padding:15px;display:block;color:#000311}.content-container .aside-nav .active a{background:#fff;border-top:1px solid hsla(0,0%,63.5%,.2);border-bottom:1px solid hsla(0,0%,63.5%,.2)}.content-container .aside-nav .active i{float:right}.content-container .content-wrapper{padding:25px 25px 25px 15px;margin-left:280px;margin-top:1px;background-color:#fff}.content-container .content{margin-top:25px}.content-container .content.full-page{padding:25px}.content-container .content .page-header{display:inline-block;width:100%;padding:15px 10px 15px 0;position:sticky;top:50px;z-index:3;background-color:#fff}.content-container .content .page-header .page-title{float:left}.content-container .content .page-header .page-title .back-link{float:left;margin-right:10px;width:24px;height:24px;cursor:pointer;margin-top:5px}.content-container .content .page-header .page-title h1{margin-bottom:0;vertical-align:middle;display:inline-block;line-height:normal}.content-container .content .page-header .page-action{float:right}.content-container .content .page-header .page-action *{display:inline-block}.content-container .content .page-header .page-action a{margin-left:25px}.content-container .content .page-header .control-group{width:180px;display:inline-block;margin-bottom:0;margin-left:20px}.content-container .content .page-header .control{width:100%;margin:0}.content-container .content .page-content{width:100%;display:inline-block}.control-container{display:flex;flex-direction:row;align-items:flex-start;width:750px}.control-container .control{background:#fff;border:2px solid #c7c7c7;border-radius:3px;width:150px;height:36px;display:inline-block;vertical-align:middle;transition:.2s cubic-bezier(.4,0,.2,1);padding:0 10px;font-size:15px}.control-container .control:focus{border-color:#0041ff}.control-container .icon:hover{cursor:pointer}.control-container .control-group::last-child{margin-right:0}.boolean-control-container{display:flex;flex-direction:row;justify-content:flex-start;width:750px}.boolean-control-container .control-group{width:200px}.control-group label{width:70%}.control-group label .locale{float:right;color:#8e8e8e}.control-group .mce-tinymce{margin-top:10px;margin-bottom:5px}.ticket-list .control-group.date:after{left:unset;right:10px;top:34px}.ticket-list .control-group.has-error.date:after{top:47px}.variant-image .image-item{height:100px!important;width:100px!important;background-size:100px 100px!important}.variant-image .trash-icon{position:absolute;cursor:pointer;margin-top:25%}.btn.add-image{display:inline-block;width:auto}.rtl .ticket-list .control-group.has-error.date:after{top:47px;right:100%!important}.dashboard .page-header{margin-bottom:0!important;padding-bottom:15px;border-bottom:1px solid hsla(0,0%,63.5%,.2)}.dashboard .page-header .control-group span{width:100%}.dashboard .page-header .control-group.date:after{margin-top:-13px;left:100%}.dashboard .page-content{margin-top:15px}.dashboard .card{height:445px;background-color:#fff;border:1px solid hsla(0,0%,63.5%,.2);box-shadow:0 5px 10px 2px hsla(0,0%,63.5%,.2);border-radius:.25rem;padding:20px 0 0 20px;overflow:auto}.dashboard .card .card-title{font-size:14px;color:#a2a2a2;letter-spacing:-.26px;text-transform:uppercase}.dashboard .card .card-info{width:100%;display:inline-block}.dashboard .card .card-info.center{text-align:center}.dashboard .card .card-info ul li{border-bottom:1px solid hsla(0,0%,63.5%,.2);width:100%;display:inline-block;padding:10px 0;position:relative}.dashboard .card .card-info ul li .image{height:60px;width:60px;float:left;margin-right:15px}.dashboard .card .card-info ul li .image.product{background:#f2f2f2}.dashboard .card .card-info ul li .image img{width:100%}.dashboard .card .card-info ul li .description{margin-top:10px}.dashboard .card .card-info ul li .description .name{color:#0041ff}.dashboard .card .card-info ul li .description .info{color:#3a3a3a;margin-top:5px}.dashboard .card .card-info ul li .icon.angle-right-icon{position:absolute;right:30px;top:50%;margin-top:-8px}.dashboard .card .card-info ul li:last-child{border-bottom:0}.dashboard .card .card-info .no-result-found{margin-top:146px}.dashboard .card .card-info .no-result-found p{margin:0;color:#a2a2a2}.dashboard .dashboard-stats{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));grid-auto-rows:auto;grid-column-gap:30px;grid-row-gap:15px}.dashboard .dashboard-stats .dashboard-card{height:100px;background:#fff;border:1px solid hsla(0,0%,63.5%,.2);box-shadow:0 5px 10px 2px hsla(0,0%,63.5%,.2);border-radius:5px;position:relative;padding:15px}.dashboard .dashboard-stats .dashboard-card .title{font-size:14px;color:#a2a2a2;text-transform:uppercase}.dashboard .dashboard-stats .dashboard-card .data{padding-top:13px;font-size:32px;color:#0041ff}.dashboard .dashboard-stats .dashboard-card .data .progress{font-size:14px;color:#8e8e8e;float:right;margin-top:-2px}.dashboard .dashboard-stats .dashboard-card .data .progress .icon{vertical-align:middle}.dashboard .graph-stats{margin-top:30px;width:100%;display:inline-block}.dashboard .graph-stats .left-card-container{float:left;width:75%;padding-right:9px}.dashboard .graph-stats .right-card-container{float:left;width:25%;padding-left:21px}.dashboard .sale-stock{width:100%;display:inline-block;display:grid;grid-template-columns:repeat(auto-fill,minmax(435px,1fr));grid-auto-rows:auto;grid-column-gap:30px;grid-row-gap:15px;margin-top:30px}.rtl .dashboard .page-header .control-group.date:after{margin-top:-13px!important;right:100%}.configuration-image{position:relative;height:33px;width:33px;top:15px;border-radius:3px;margin-right:5px}.download{position:relative;height:24px!important;width:24px!important;top:12px;margin-right:10px}.aside-nav-toggle{height:48px;width:100%;padding-top:15px;border-top:1px solid hsla(0,0%,63.5%,.2)}.aside-nav-toggle .close-icon,.aside-nav-toggle .open-icon{position:absolute;cursor:pointer;left:45%}.aside-nav-toggle.open{display:none}.linked-product-search-result{box-shadow:0 2px 4px 0 rgba(0,0,0,.16),0 0 9px 0 rgba(0,0,0,.16);z-index:10;text-align:left;border-radius:3px;background-color:#fff;width:70%;max-height:200px;overflow-y:auto}.linked-product-search-result li{padding:10px;border-bottom:1px solid #e8e8e8;cursor:pointer}.cart-rule-conditions table td.attribute,.catalog-rule-conditions table td.attribute{width:250px;padding-left:0}.cart-rule-conditions table td.operator,.cart-rule-conditions table td.value,.catalog-rule-conditions table td.operator,.catalog-rule-conditions table td.value{width:260px}.cart-rule-conditions table td.actions,.catalog-rule-conditions table td.actions{width:44px}.cart-rule-conditions table td.actions .icon,.catalog-rule-conditions table td.actions .icon{margin-top:6px}.sale-container .sale-section{font-size:16px}.sale-container .sale-section .secton-title{font-size:18px;color:#8e8e8e;padding:15px 0;border-bottom:1px solid hsla(0,0%,63.5%,.2)}.sale-container .sale-section .section-content{display:block;padding:20px 0}.sale-container .sale-section .section-content .row{display:block;padding:7px 0}.sale-container .sale-section .section-content .row .title{width:200px;color:#3a3a3a;letter-spacing:-.26px;display:inline-block}.sale-container .sale-section .section-content .row .value{color:#3a3a3a;letter-spacing:-.26px;display:inline-block}.sale-container .table .qty-row{display:block;margin-bottom:5px}.sale-container .table .qty-row:last-child{margin-bottom:0}.sale-container .table .radio{margin:0}.sale-container .summary-comment-container .comment-container{margin-top:20px;float:left}.sale-container .summary-comment-container .comment-container .comment-list{margin-top:40px}.sale-container .summary-comment-container .comment-container .comment-list li{margin-bottom:20px}.sale-container .summary-comment-container .comment-container .comment-list li:last-child{margin-bottom:0}.sale-container .summary-comment-container .comment-container .comment-list li p{margin:5px 0 0;color:#8e8e8e}.sale-container .sale-summary{margin-top:20px;height:130px;float:right}.sale-container .sale-summary tr td{padding:5px 8px;vertical-align:text-bottom}.sale-container .sale-summary tr.bold{font-weight:600;font-size:15px}.sale-container .sale-summary tr.border td{border-bottom:1px solid hsla(0,0%,63.5%,.2)}.stars{margin-top:5px}.stars .icon{width:16px;height:16px}.export-import{cursor:pointer}.export-import .export-icon,.export-import .import-icon{position:relative;top:10px}.export-import span{margin-left:2px}.rtl{direction:rtl}.rtl .form-container{text-align:right!important}.rtl .navbar-top .navbar-top-right{text-align:left}.rtl .navbar-top .navbar-top-right .profile-info{margin:0 30px 0 25px}.rtl .navbar-top .navbar-top-right .profile-info i.icon{margin-left:0;margin-right:10px}.rtl .navbar-left{border-left:1px solid hsla(0,0%,63.5%,.2);border-right:none;left:calc(100% - 90px);background-color:#fff}.rtl .content-container{padding-right:90px;padding-left:0}.rtl .content-container .content .page-header .page-title{float:right}.rtl .content-container .content .page-header .page-action{float:left}.rtl .content-container .content .page-header .page-action a{margin-left:0}.rtl .content-container .content .page-header .control-group{margin-right:20px;margin-left:0}.rtl .content-container .content-wrapper{padding:25px 305px 25px 25px;margin-left:0}.rtl .content-container .aside-nav .active i{float:left;transform:rotate(180deg)}.rtl .dashboard .dashboard-stats .dashboard-card .data span{float:left}.rtl .dashboard .card{padding:20px 20px 0 0}.rtl .dashboard .card .card-info ul li .image{float:right;margin-right:0;margin-left:15px}.rtl .dashboard .card .card-info ul li .icon.angle-right-icon{left:30px;right:auto;transform:rotate(180deg)}.rtl .dashboard .graph-stats .left-card-container{float:right;padding-right:0}.rtl .dashboard .graph-stats .right-card-container{float:right;padding-left:0;padding-right:30px}.rtl .sale-container .sale-summary{float:left}.rtl .grid-container .table tbody td.action a:first-child{margin-left:10px;margin-right:0}.rtl .table table{text-align:right}.rtl .table table .massaction-remove{margin-right:5px!important;margin-left:10px}.rtl .table table .btn.btn-primary{margin-right:10px!important}.rtl .dropdown-list.bottom-right{left:0;right:auto!important}.rtl .dropdown-list .dropdown-container{text-align:right}.rtl .accordian .accordian-header .icon{float:left}.rtl .tree-container .tree-item{padding-right:30px}.rtl .tree-container .tree-item .expand-icon,.rtl .tree-container .tree-item .folder-icon{margin-left:10px;margin-right:0}.rtl .tree-container>.tree-item{padding-right:0}.rtl .radio .radio-view{margin-left:5px}.rtl .image-wrapper .image-item{margin-right:0;margin-left:20px}.rtl .image-wrapper .image-item .remove-image{margin-right:0}.rtl .control-group label.required:before{content:"*";color:#fc6868;font-weight:700}.rtl .control-group label.required:after{content:none}.rtl .control-group label .locale{float:left}.rtl .multiselect{text-align:unset}.rtl .pagination .page-item .icon{transform:rotate(180deg)}.accordian-header{background-color:#fbfbfb}.btn.btn-primary{background:#0041ff}.fixed-action{top:108px}.fixed-action,.fixed-action-slight{position:fixed;right:32px;z-index:20}.fixed-action-slight{top:94px}.pagination{margin-top:30px}.ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.do-not-cross-arrow{width:85%}.linked-product-filter-tag{text-transform:capitalize;margin-top:10px;margin-right:0;justify-content:flex-start;height:100%}.linked-product-wrapper{margin-left:0!important;margin-right:10px!important;height:100%!important}.do-not-cross-linked-product-arrow{width:95%} \ No newline at end of file +@import url(https://fonts.googleapis.com/css?family=Montserrat:400,500);body{margin:0;color:#3a3a3a;font-family:Montserrat,sans-serif;font-size:14px;font-weight:500;position:static;height:100%;width:100%;background-color:#fff}::-webkit-scrollbar{width:12px}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px hsla(0,0%,100%,.3);border-radius:10px}::-webkit-scrollbar-thumb{border-radius:10px;-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.5)}.navbar-top{height:60px;background-color:#fff;font-size:0;box-shadow:0 3px 6px 0 rgba(0,0,0,.05);border-bottom:1px solid hsla(0,0%,63.5%,.2);position:fixed;left:0;right:0;z-index:5}.navbar-top .navbar-top-left{width:50%;height:60px;display:inline-block;vertical-align:middle;background-color:#fff}.navbar-top .navbar-top-left .brand-logo{padding:10px}.navbar-top .navbar-top-right{width:50%;height:60px;text-align:right;display:inline-block;vertical-align:middle}.navbar-top .navbar-top-right .profile-info{display:inline-block;vertical-align:middle;text-align:left;min-width:50px;padding:12px 0;margin:0 25px 0 30px;font-size:15px;cursor:pointer;position:relative}.navbar-top .navbar-top-right .profile-info .app-version{padding:10px 20px 0;margin-bottom:-10px;display:block;cursor:default;color:#a2a2a2}.navbar-top .navbar-top-right .profile-info .dropdown-list{top:63px;right:0;bottom:inherit!important}.navbar-top .navbar-top-right .profile-info .name{color:#000311;display:block;text-align:left}.navbar-top .navbar-top-right .profile-info .role{font-size:14px;color:#8e8e8e;display:block;text-align:left}.navbar-top .navbar-top-right .profile-info i.icon{margin-left:10px}.navbar-left{position:fixed;left:0;top:60px;width:90px;padding-top:20px;border-right:1px solid hsla(0,0%,63.5%,.2);height:auto;bottom:0;z-index:1;background-color:#fff}.navbar-left ul.menubar li.menu-item{padding:10px 5px;font-size:11px;text-align:center;text-transform:uppercase}.navbar-left ul.menubar li.menu-item a{color:#a2a2a2}.navbar-left ul.menubar li.menu-item.active a{color:#0041ff}.navbar-left ul.menubar li.menu-item span{display:block;margin:auto}.content-container{padding-left:90px;position:absolute;margin-top:60px;top:0;right:0;left:0;bottom:0;height:calc(100% - 60px);width:100%}.content-container .inner-section{height:100%}.content-container .aside-nav{width:280px;position:fixed;top:60px;bottom:0;border-right:1px solid hsla(0,0%,63.5%,.2);background-color:#f8f9fa;padding-top:10px;padding-bottom:10px;z-index:4}.content-container .aside-nav ul{overflow-y:auto;height:90%}.content-container .aside-nav a{padding:15px;display:block;color:#000311}.content-container .aside-nav .active a{background:#fff;border-top:1px solid hsla(0,0%,63.5%,.2);border-bottom:1px solid hsla(0,0%,63.5%,.2)}.content-container .aside-nav .active i{float:right}.content-container .content-wrapper{padding:25px 25px 25px 15px;margin-left:280px;margin-top:1px;background-color:#fff}.content-container .content{margin-top:25px}.content-container .content.full-page{padding:25px}.content-container .content .page-header{display:inline-block;width:100%;padding:15px 10px 15px 0;position:sticky;top:50px;z-index:3;background-color:#fff}.content-container .content .page-header .page-title{float:left}.content-container .content .page-header .page-title .back-link{float:left;margin-right:10px;width:24px;height:24px;cursor:pointer;margin-top:5px}.content-container .content .page-header .page-title h1{margin-bottom:0;vertical-align:middle;display:inline-block;line-height:normal}.content-container .content .page-header .page-action{float:right}.content-container .content .page-header .page-action *{display:inline-block}.content-container .content .page-header .page-action a{margin-left:25px}.content-container .content .page-header .control-group{width:180px;display:inline-block;margin-bottom:0;margin-left:20px}.content-container .content .page-header .control{width:100%;margin:0}.content-container .content .page-content{width:100%;display:inline-block}.control-container{display:flex;flex-direction:row;align-items:flex-start;width:750px}.control-container .control{background:#fff;border:2px solid #c7c7c7;border-radius:3px;width:150px;height:36px;display:inline-block;vertical-align:middle;transition:.2s cubic-bezier(.4,0,.2,1);padding:0 10px;font-size:15px}.control-container .control:focus{border-color:#0041ff}.control-container .icon:hover{cursor:pointer}.control-container .control-group::last-child{margin-right:0}.boolean-control-container{display:flex;flex-direction:row;justify-content:flex-start;width:750px}.boolean-control-container .control-group{width:200px}.control-group label{width:70%}.control-group label .locale{float:right;color:#8e8e8e}.control-group .mce-tinymce{margin-top:10px;margin-bottom:5px}.ticket-list .control-group.date:after{left:unset;right:10px;top:34px}.ticket-list .control-group.has-error.date:after{top:47px}.variant-image .image-item{height:100px!important;width:100px!important;background-size:100px 100px!important}.variant-image .trash-icon{position:absolute;cursor:pointer;margin-top:25%}.btn.add-image{display:inline-block;width:auto}.rtl .ticket-list .control-group.has-error.date:after{top:47px;right:100%!important}.dashboard .page-header{margin-bottom:0!important;padding-bottom:15px;border-bottom:1px solid hsla(0,0%,63.5%,.2)}.dashboard .page-header .control-group span{width:100%}.dashboard .page-header .control-group.date:after{margin-top:-13px;left:100%}.dashboard .page-content{margin-top:15px}.dashboard .card{height:445px;background-color:#fff;border:1px solid hsla(0,0%,63.5%,.2);box-shadow:0 5px 10px 2px hsla(0,0%,63.5%,.2);border-radius:.25rem;padding:20px 0 0 20px;overflow:auto}.dashboard .card .card-title{font-size:14px;color:#a2a2a2;letter-spacing:-.26px;text-transform:uppercase}.dashboard .card .card-info{width:100%;display:inline-block}.dashboard .card .card-info.center{text-align:center}.dashboard .card .card-info ul li{border-bottom:1px solid hsla(0,0%,63.5%,.2);width:100%;display:inline-block;padding:10px 0;position:relative}.dashboard .card .card-info ul li .image{height:60px;width:60px;float:left;margin-right:15px}.dashboard .card .card-info ul li .image.product{background:#f2f2f2}.dashboard .card .card-info ul li .image img{width:100%}.dashboard .card .card-info ul li .description{margin-top:10px}.dashboard .card .card-info ul li .description .name{color:#0041ff}.dashboard .card .card-info ul li .description .info{color:#3a3a3a;margin-top:5px}.dashboard .card .card-info ul li .icon.angle-right-icon{position:absolute;right:30px;top:50%;margin-top:-8px}.dashboard .card .card-info ul li:last-child{border-bottom:0}.dashboard .card .card-info .no-result-found{margin-top:146px}.dashboard .card .card-info .no-result-found p{margin:0;color:#a2a2a2}.dashboard .dashboard-stats{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));grid-auto-rows:auto;grid-column-gap:30px;grid-row-gap:15px}.dashboard .dashboard-stats .dashboard-card{height:100px;background:#fff;border:1px solid hsla(0,0%,63.5%,.2);box-shadow:0 5px 10px 2px hsla(0,0%,63.5%,.2);border-radius:5px;position:relative;padding:15px}.dashboard .dashboard-stats .dashboard-card .title{font-size:14px;color:#a2a2a2;text-transform:uppercase}.dashboard .dashboard-stats .dashboard-card .data{padding-top:13px;font-size:32px;color:#0041ff}.dashboard .dashboard-stats .dashboard-card .data .progress{font-size:14px;color:#8e8e8e;float:right;margin-top:-2px}.dashboard .dashboard-stats .dashboard-card .data .progress .icon{vertical-align:middle}.dashboard .graph-stats{margin-top:30px;width:100%;display:inline-block}.dashboard .graph-stats .left-card-container{float:left;width:75%;padding-right:9px}.dashboard .graph-stats .right-card-container{float:left;width:25%;padding-left:21px}.dashboard .sale-stock{width:100%;display:inline-block;display:grid;grid-template-columns:repeat(auto-fill,minmax(435px,1fr));grid-auto-rows:auto;grid-column-gap:30px;grid-row-gap:15px;margin-top:30px}.rtl .dashboard .page-header .control-group.date:after{margin-top:-13px!important;right:100%}.configuration-image{position:relative;height:33px;width:33px;top:15px;border-radius:3px;margin-right:5px}.download{position:relative;height:24px!important;width:24px!important;top:12px;margin-right:10px}.aside-nav-toggle{height:48px;width:100%;padding-top:15px;border-top:1px solid hsla(0,0%,63.5%,.2)}.aside-nav-toggle .close-icon,.aside-nav-toggle .open-icon{position:absolute;cursor:pointer;left:45%}.aside-nav-toggle.open{display:none}.linked-product-search-result{box-shadow:0 2px 4px 0 rgba(0,0,0,.16),0 0 9px 0 rgba(0,0,0,.16);z-index:10;text-align:left;border-radius:3px;background-color:#fff;width:70%;max-height:200px;overflow-y:auto}.linked-product-search-result li{padding:10px;border-bottom:1px solid #e8e8e8;cursor:pointer}.cart-rule-conditions table td.attribute,.catalog-rule-conditions table td.attribute{width:250px;padding-left:0}.cart-rule-conditions table td.operator,.cart-rule-conditions table td.value,.catalog-rule-conditions table td.operator,.catalog-rule-conditions table td.value{width:260px}.cart-rule-conditions table td.actions,.catalog-rule-conditions table td.actions{width:44px}.cart-rule-conditions table td.actions .icon,.catalog-rule-conditions table td.actions .icon{margin-top:6px}.sale-container .sale-section{font-size:16px}.sale-container .sale-section .secton-title{font-size:18px;color:#8e8e8e;padding:15px 0;border-bottom:1px solid hsla(0,0%,63.5%,.2)}.sale-container .sale-section .section-content{display:block;padding:20px 0}.sale-container .sale-section .section-content .row{display:block;padding:7px 0}.sale-container .sale-section .section-content .row .title{width:200px;color:#3a3a3a;letter-spacing:-.26px;display:inline-block}.sale-container .sale-section .section-content .row .value{color:#3a3a3a;letter-spacing:-.26px;display:inline-block}.sale-container .table .qty-row{display:block;margin-bottom:5px}.sale-container .table .qty-row:last-child{margin-bottom:0}.sale-container .table .radio{margin:0}.sale-container .summary-comment-container .comment-container{margin-top:20px;float:left}.sale-container .summary-comment-container .comment-container .comment-list{margin-top:40px}.sale-container .summary-comment-container .comment-container .comment-list li{margin-bottom:20px}.sale-container .summary-comment-container .comment-container .comment-list li:last-child{margin-bottom:0}.sale-container .summary-comment-container .comment-container .comment-list li p{margin:5px 0 0;color:#8e8e8e}.sale-container .sale-summary{margin-top:20px;height:130px;float:right}.sale-container .sale-summary tr td{padding:5px 8px;vertical-align:text-bottom}.sale-container .sale-summary tr.bold{font-weight:600;font-size:15px}.sale-container .sale-summary tr.border td{border-bottom:1px solid hsla(0,0%,63.5%,.2)}.stars{margin-top:5px}.stars .icon{width:16px;height:16px}.export-import{cursor:pointer}.export-import .export-icon,.export-import .import-icon{position:relative;top:10px}.export-import span{margin-left:2px}.rtl{direction:rtl}.rtl .form-container{text-align:right!important}.rtl .navbar-top .navbar-top-right{text-align:left}.rtl .navbar-top .navbar-top-right .profile-info{margin:0 30px 0 25px}.rtl .navbar-top .navbar-top-right .profile-info i.icon{margin-left:0;margin-right:10px}.rtl .navbar-left{border-left:1px solid hsla(0,0%,63.5%,.2);border-right:none;left:calc(100% - 90px);background-color:#fff}.rtl .content-container{padding-right:90px;padding-left:0}.rtl .content-container .content .page-header .page-title{float:right}.rtl .content-container .content .page-header .page-action{float:left}.rtl .content-container .content .page-header .page-action a{margin-left:0}.rtl .content-container .content .page-header .control-group{margin-right:20px;margin-left:0}.rtl .content-container .content-wrapper{padding:25px 305px 25px 25px;margin-left:0}.rtl .content-container .aside-nav .active i{float:left;transform:rotate(180deg)}.rtl .dashboard .dashboard-stats .dashboard-card .data span{float:left}.rtl .dashboard .card{padding:20px 20px 0 0}.rtl .dashboard .card .card-info ul li .image{float:right;margin-right:0;margin-left:15px}.rtl .dashboard .card .card-info ul li .icon.angle-right-icon{left:30px;right:auto;transform:rotate(180deg)}.rtl .dashboard .graph-stats .left-card-container{float:right;padding-right:0}.rtl .dashboard .graph-stats .right-card-container{float:right;padding-left:0;padding-right:30px}.rtl .sale-container .sale-summary{float:left}.rtl .grid-container .table tbody td.action a:first-child{margin-left:10px;margin-right:0}.rtl .table table{text-align:right}.rtl .table table .massaction-remove{margin-right:5px!important;margin-left:10px}.rtl .table table .btn.btn-primary{margin-right:10px!important}.rtl .dropdown-list.bottom-right{left:0;right:auto!important}.rtl .dropdown-list .dropdown-container{text-align:right}.rtl .accordian .accordian-header .icon{float:left}.rtl .tree-container .tree-item{padding-right:30px}.rtl .tree-container .tree-item .expand-icon,.rtl .tree-container .tree-item .folder-icon{margin-left:10px;margin-right:0}.rtl .tree-container>.tree-item{padding-right:0}.rtl .radio .radio-view{margin-left:5px}.rtl .image-wrapper .image-item{margin-right:0;margin-left:20px}.rtl .image-wrapper .image-item .remove-image{margin-right:0}.rtl .control-group label.required:before{content:"*";color:#fc6868;font-weight:700}.rtl .control-group label.required:after{content:none}.rtl .control-group label .locale{float:left}.rtl .multiselect{text-align:unset}.rtl .pagination .page-item .icon{transform:rotate(180deg)}.accordian-header{background-color:#fbfbfb}.btn.btn-primary{background:#0041ff}.btn.btn-danger{background:red}.fixed-action{top:108px}.fixed-action,.fixed-action-slight{position:fixed;right:32px;z-index:20}.fixed-action-slight{top:94px}.pagination{margin-top:30px}.ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.do-not-cross-arrow{width:85%}.linked-product-filter-tag{text-transform:capitalize;margin-top:10px;margin-right:0;justify-content:flex-start;height:100%}.linked-product-wrapper{margin-left:0!important;margin-right:10px!important;height:100%!important}.do-not-cross-linked-product-arrow{width:95%} \ No newline at end of file diff --git a/packages/Webkul/Admin/publishable/assets/mix-manifest.json b/packages/Webkul/Admin/publishable/assets/mix-manifest.json index e0026b29d..8b27d20ff 100755 --- a/packages/Webkul/Admin/publishable/assets/mix-manifest.json +++ b/packages/Webkul/Admin/publishable/assets/mix-manifest.json @@ -1,4 +1,4 @@ { "/js/admin.js": "/js/admin.js?id=8bcdcf3b86191d1739a5", - "/css/admin.css": "/css/admin.css?id=b24aa6544b82f674840f" + "/css/admin.css": "/css/admin.css?id=59ebf5021195a90c8760" } diff --git a/packages/Webkul/Admin/src/DataGrids/ProductDataGrid.php b/packages/Webkul/Admin/src/DataGrids/ProductDataGrid.php index a9668469c..924bd4511 100644 --- a/packages/Webkul/Admin/src/DataGrids/ProductDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/ProductDataGrid.php @@ -2,31 +2,85 @@ namespace Webkul\Admin\DataGrids; -use Webkul\Core\Models\Locale; -use Webkul\Core\Models\Channel; -use Webkul\Ui\DataGrid\DataGrid; use Illuminate\Support\Facades\DB; +use Webkul\Core\Models\Channel; +use Webkul\Core\Models\Locale; +use Webkul\Inventory\Repositories\InventorySourceRepository; +use Webkul\Product\Repositories\ProductRepository; +use Webkul\Ui\DataGrid\DataGrid; class ProductDataGrid extends DataGrid { + /** + * Default sort order of datagrid. + * + * @var string + */ protected $sortOrder = 'desc'; + /** + * Set index columns, ex: id. + * + * @var string + */ protected $index = 'product_id'; + /** + * If paginated then value of pagination. + * + * @var int + */ protected $itemsPerPage = 10; + /** + * Locale. + * + * @var string + */ protected $locale = 'all'; + /** + * Channel. + * + * @var string + */ protected $channel = 'all'; - /** @var string[] contains the keys for which extra filters to render */ + /** + * Contains the keys for which extra filters to show. + * + * @var string[] + */ protected $extraFilters = [ 'channels', 'locales', ]; - public function __construct() - { + /** + * Product repository instance. + * + * @var \Webkul\Product\Repositories\ProductRepository + */ + protected $productRepository; + + /** + * Inventory source repository instance. + * + * @var \Webkul\Inventory\Repositories\InventorySourceRepository + */ + protected $inventorySourceRepository; + + /** + * Create datagrid instance. + * + * @param \Webkul\Product\Repositories\ProductRepository $productRepository + * @param \Webkul\Inventory\Repositories\InventorySourceRepository $inventorySourceRepository + * @return void + */ + public function __construct( + ProductRepository $productRepository, + InventorySourceRepository $inventorySourceRepository + ) { parent::__construct(); /* locale */ @@ -40,8 +94,17 @@ class ProductDataGrid extends DataGrid $this->channel = Channel::query()->find($this->channel); $this->channel = $this->channel ? $this->channel->code : 'all'; } + + $this->productRepository = $productRepository; + + $this->inventorySourceRepository = $inventorySourceRepository; } + /** + * Prepare query builder. + * + * @return void + */ public function prepareQueryBuilder() { if ($this->channel === 'all') { @@ -91,6 +154,11 @@ class ProductDataGrid extends DataGrid $this->setQueryBuilder($queryBuilder); } + /** + * Add columns. + * + * @return void + */ public function addColumns() { $this->addColumn([ @@ -179,16 +247,28 @@ class ProductDataGrid extends DataGrid 'sortable' => true, 'searchable' => false, 'filterable' => false, + 'closure' => true, 'wrapper' => function ($value) { if (is_null($value->quantity)) { return 0; } else { - return $value->quantity; + $product = $this->productRepository->find($value->product_id); + + $inventorySources = $this->inventorySourceRepository->findWhere(['status' => 1]); + + $totalQuantity = $value->quantity; + + return view('admin::catalog.products.datagrid.quantity', compact('product', 'inventorySources', 'totalQuantity'))->render(); } }, ]); } + /** + * Prepare actions. + * + * @return void + */ public function prepareActions() { $this->addAction([ @@ -210,6 +290,11 @@ class ProductDataGrid extends DataGrid ]); } + /** + * Prepare mass actions. + * + * @return void + */ public function prepareMassActions() { $this->addAction([ @@ -237,4 +322,4 @@ class ProductDataGrid extends DataGrid ], ]); } -} \ No newline at end of file +} diff --git a/packages/Webkul/Admin/src/Resources/assets/sass/_variables.scss b/packages/Webkul/Admin/src/Resources/assets/sass/_variables.scss index 1013967be..a9a88c535 100755 --- a/packages/Webkul/Admin/src/Resources/assets/sass/_variables.scss +++ b/packages/Webkul/Admin/src/Resources/assets/sass/_variables.scss @@ -9,6 +9,7 @@ $accordian-header: #fbfbfb; // Buttons $btn-primary: $white; $btn-primary-bg: #0041FF; +$btn-danger-bg: $red; // Cards $card-title: #a2a2a2; diff --git a/packages/Webkul/Admin/src/Resources/assets/sass/partials/ui/_components.scss b/packages/Webkul/Admin/src/Resources/assets/sass/partials/ui/_components.scss index 3bf197d1e..1b7cfe81d 100644 --- a/packages/Webkul/Admin/src/Resources/assets/sass/partials/ui/_components.scss +++ b/packages/Webkul/Admin/src/Resources/assets/sass/partials/ui/_components.scss @@ -1,13 +1,17 @@ // Accordion .accordian-header { - background-color: $accordian-header; + background-color: $accordian-header; } -// buttons -.btn.btn-primary{ +// Buttons +.btn.btn-primary { background: $btn-primary-bg; } +.btn.btn-danger { + background: $btn-danger-bg; +} + .fixed-action { position: fixed; top: 108px; @@ -24,4 +28,4 @@ .pagination { margin-top: 30px; -} \ No newline at end of file +} diff --git a/packages/Webkul/Admin/src/Resources/views/catalog/products/datagrid/quantity.blade.php b/packages/Webkul/Admin/src/Resources/views/catalog/products/datagrid/quantity.blade.php new file mode 100644 index 000000000..657819340 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/catalog/products/datagrid/quantity.blade.php @@ -0,0 +1,35 @@ + + {{ $totalQuantity }} + + + \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/catalog/products/index.blade.php b/packages/Webkul/Admin/src/Resources/views/catalog/products/index.blade.php index 55a1c0423..312e80303 100755 --- a/packages/Webkul/Admin/src/Resources/views/catalog/products/index.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/catalog/products/index.blade.php @@ -29,11 +29,11 @@
@inject('products', 'Webkul\Admin\DataGrids\ProductDataGrid') + {!! $products->render() !!}
{!! view_render_event('bagisto.admin.catalog.products.list.after') !!} - @@ -46,14 +46,34 @@ @push('scripts') @include('admin::export.export', ['gridName' => $products]) - @endpush \ No newline at end of file From b0c13743527e34ef008d7557eb692ee7f632ae6e Mon Sep 17 00:00:00 2001 From: devansh bawari Date: Thu, 16 Sep 2021 10:43:13 +0530 Subject: [PATCH 2/6] Product Inventory Saved --- .../Admin/src/DataGrids/ProductDataGrid.php | 29 ++-- packages/Webkul/Admin/src/Http/routes.php | 4 + .../products/datagrid/quantity.blade.php | 6 +- .../views/catalog/products/index.blade.php | 20 ++- .../Http/Controllers/ProductController.php | 138 +++++++++++------- 5 files changed, 126 insertions(+), 71 deletions(-) diff --git a/packages/Webkul/Admin/src/DataGrids/ProductDataGrid.php b/packages/Webkul/Admin/src/DataGrids/ProductDataGrid.php index 924bd4511..54e59f972 100644 --- a/packages/Webkul/Admin/src/DataGrids/ProductDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/ProductDataGrid.php @@ -248,17 +248,11 @@ class ProductDataGrid extends DataGrid 'searchable' => false, 'filterable' => false, 'closure' => true, - 'wrapper' => function ($value) { - if (is_null($value->quantity)) { + 'wrapper' => function ($row) { + if (is_null($row->quantity)) { return 0; } else { - $product = $this->productRepository->find($value->product_id); - - $inventorySources = $this->inventorySourceRepository->findWhere(['status' => 1]); - - $totalQuantity = $value->quantity; - - return view('admin::catalog.products.datagrid.quantity', compact('product', 'inventorySources', 'totalQuantity'))->render(); + return $this->renderQuantityView($row); } }, ]); @@ -322,4 +316,21 @@ class ProductDataGrid extends DataGrid ], ]); } + + /** + * Render quantity view. + * + * @parma object $row + * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory + */ + private function renderQuantityView($row) + { + $product = $this->productRepository->find($row->product_id); + + $inventorySources = $this->inventorySourceRepository->findWhere(['status' => 1]); + + $totalQuantity = $row->quantity; + + return view('admin::catalog.products.datagrid.quantity', compact('product', 'inventorySources', 'totalQuantity'))->render(); + } } diff --git a/packages/Webkul/Admin/src/Http/routes.php b/packages/Webkul/Admin/src/Http/routes.php index 2bd12a221..0b678572d 100755 --- a/packages/Webkul/Admin/src/Http/routes.php +++ b/packages/Webkul/Admin/src/Http/routes.php @@ -304,6 +304,10 @@ Route::group(['middleware' => ['web', 'admin_locale']], function () { 'redirect' => 'admin.catalog.products.index', ])->name('admin.catalog.products.update'); + Route::put('/products/edit/{id}/inventories', 'Webkul\Product\Http\Controllers\ProductController@updateInventories')->defaults('_config', [ + 'redirect' => 'admin.catalog.products.index', + ])->name('admin.catalog.products.update-inventories'); + Route::post('/products/upload-file/{id}', 'Webkul\Product\Http\Controllers\ProductController@uploadLink')->name('admin.catalog.products.upload_link'); Route::post('/products/upload-sample/{id}', 'Webkul\Product\Http\Controllers\ProductController@uploadSample')->name('admin.catalog.products.upload_sample'); diff --git a/packages/Webkul/Admin/src/Resources/views/catalog/products/datagrid/quantity.blade.php b/packages/Webkul/Admin/src/Resources/views/catalog/products/datagrid/quantity.blade.php index 657819340..3d93c1711 100644 --- a/packages/Webkul/Admin/src/Resources/views/catalog/products/datagrid/quantity.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/catalog/products/datagrid/quantity.blade.php @@ -1,11 +1,13 @@ - {{ $totalQuantity }} + {{ $totalQuantity }} \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/catalog/products/index.blade.php b/packages/Webkul/Admin/src/Resources/views/catalog/products/index.blade.php index 312e80303..c04125f13 100755 --- a/packages/Webkul/Admin/src/Resources/views/catalog/products/index.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/catalog/products/index.blade.php @@ -63,17 +63,25 @@ } function cancelEditQuantityForm(productId) { - $(`#product-${productId}-quantity`).show(); - $(`#edit-product-${productId}-quantity-form-block`).hide(); + + $(`#product-${productId}-quantity`).show(); } - function saveEditQuantityForm(productId) { - let quantityFormData = $(`#edit-product-${productId}-quantity-form`).serializeArray(); + function saveEditQuantityForm(updateSource, productId) { + let quantityFormData = $(`#edit-product-${productId}-quantity-form`).serialize(); - console.log(quantityFormData); + axios + .post(updateSource, quantityFormData) + .then(function (response) { + let data = response.data; - alert(`${productId} Saved!`); + $(`#edit-product-${productId}-quantity-form-block`).hide(); + + $(`#product-${productId}-quantity-anchor`).text(data.updatedTotal); + + $(`#product-${productId}-quantity`).show(); + }); } @endpush \ No newline at end of file diff --git a/packages/Webkul/Product/src/Http/Controllers/ProductController.php b/packages/Webkul/Product/src/Http/Controllers/ProductController.php index a4dc76b91..8632b96f2 100755 --- a/packages/Webkul/Product/src/Http/Controllers/ProductController.php +++ b/packages/Webkul/Product/src/Http/Controllers/ProductController.php @@ -3,89 +3,96 @@ namespace Webkul\Product\Http\Controllers; use Exception; -use Webkul\Product\Models\Product; use Illuminate\Support\Facades\Event; use Illuminate\Support\Facades\Storage; -use Webkul\Product\Helpers\ProductType; -use Webkul\Core\Contracts\Validations\Slug; -use Webkul\Product\Http\Requests\ProductForm; -use Webkul\Product\Repositories\ProductRepository; -use Webkul\Category\Repositories\CategoryRepository; use Webkul\Attribute\Repositories\AttributeFamilyRepository; +use Webkul\Category\Repositories\CategoryRepository; +use Webkul\Core\Contracts\Validations\Slug; use Webkul\Inventory\Repositories\InventorySourceRepository; +use Webkul\Product\Helpers\ProductType; +use Webkul\Product\Http\Requests\ProductForm; +use Webkul\Product\Models\Product; +use Webkul\Product\Repositories\ProductAttributeValueRepository; use Webkul\Product\Repositories\ProductDownloadableLinkRepository; use Webkul\Product\Repositories\ProductDownloadableSampleRepository; -use Webkul\Product\Repositories\ProductAttributeValueRepository; +use Webkul\Product\Repositories\ProductInventoryRepository; +use Webkul\Product\Repositories\ProductRepository; class ProductController extends Controller { /** - * Contains route related configuration + * Contains route related configuration. * * @var array */ protected $_config; /** - * CategoryRepository object + * Category repository instance. * * @var \Webkul\Category\Repositories\CategoryRepository */ protected $categoryRepository; /** - * ProductRepository object + * Product repository instance. * * @var \Webkul\Product\Repositories\ProductRepository */ protected $productRepository; /** - * ProductDownloadableLinkRepository object + * Product downloadable link repository instance. * * @var \Webkul\Product\Repositories\ProductDownloadableLinkRepository */ protected $productDownloadableLinkRepository; /** - * ProductDownloadableSampleRepository object + * Product downloadable sample repository instance. * * @var \Webkul\Product\Repositories\ProductDownloadableSampleRepository */ protected $productDownloadableSampleRepository; /** - * AttributeFamilyRepository object + * Attribute family repository instance. * * @var \Webkul\Attribute\Repositories\AttributeFamilyRepository */ protected $attributeFamilyRepository; /** - * InventorySourceRepository object + * Inventory source repository instance. * * @var \Webkul\Inventory\Repositories\InventorySourceRepository */ protected $inventorySourceRepository; /** - * ProductAttributeValueRepository object + * Product attribute value repository instance. * * @var \Webkul\Product\Repositories\ProductAttributeValueRepository */ protected $productAttributeValueRepository; + /** + * Product inventory repository instance. + * + * @var \Webkul\Product\Repositories\ProductInventoryRepository + */ + protected $productInventoryRepository; + /** * Create a new controller instance. * - * @param \Webkul\Category\Repositories\CategoryRepository $categoryRepository - * @param \Webkul\Product\Repositories\ProductRepository $productRepository - * @param \Webkul\Product\Repositories\ProductDownloadableLinkRepository $productDownloadableLinkRepository - * @param \Webkul\Product\Repositories\ProductDownloadableSampleRepository $productDownloadableSampleRepository - * @param \Webkul\Attribute\Repositories\AttributeFamilyRepository $attributeFamilyRepository - * @param \Webkul\Inventory\Repositories\InventorySourceRepository $inventorySourceRepository - * @param \Webkul\Product\Repositories\ProductAttributeValueRepository $productAttributeValueRepository - * + * @param \Webkul\Category\Repositories\CategoryRepository $categoryRepository + * @param \Webkul\Product\Repositories\ProductRepository $productRepository + * @param \Webkul\Product\Repositories\ProductDownloadableLinkRepository $productDownloadableLinkRepository + * @param \Webkul\Product\Repositories\ProductDownloadableSampleRepository $productDownloadableSampleRepository + * @param \Webkul\Attribute\Repositories\AttributeFamilyRepository $attributeFamilyRepository + * @param \Webkul\Inventory\Repositories\InventorySourceRepository $inventorySourceRepository + * @param \Webkul\Product\Repositories\ProductAttributeValueRepository $productAttributeValueRepository * @return void */ public function __construct( @@ -95,9 +102,9 @@ class ProductController extends Controller ProductDownloadableSampleRepository $productDownloadableSampleRepository, AttributeFamilyRepository $attributeFamilyRepository, InventorySourceRepository $inventorySourceRepository, - ProductAttributeValueRepository $productAttributeValueRepository - ) - { + ProductAttributeValueRepository $productAttributeValueRepository, + ProductInventoryRepository $productInventoryRepository + ) { $this->_config = request('_config'); $this->categoryRepository = $categoryRepository; @@ -113,6 +120,8 @@ class ProductController extends Controller $this->inventorySourceRepository = $inventorySourceRepository; $this->productAttributeValueRepository = $productAttributeValueRepository; + + $this->productInventoryRepository = $productInventoryRepository; } /** @@ -150,14 +159,16 @@ class ProductController extends Controller */ public function store() { - if (! request()->get('family') + if ( + ! request()->get('family') && ProductType::hasVariants(request()->input('type')) && request()->input('sku') != '' ) { return redirect(url()->current() . '?type=' . request()->input('type') . '&family=' . request()->input('attribute_family_id') . '&sku=' . request()->input('sku')); } - if (ProductType::hasVariants(request()->input('type')) + if ( + ProductType::hasVariants(request()->input('type')) && (! request()->has('super_attributes') || ! count(request()->get('super_attributes'))) ) { @@ -182,8 +193,7 @@ class ProductController extends Controller /** * Show the form for editing the specified resource. * - * @param int $id - * + * @param int $id * @return \Illuminate\View\View */ public function edit($id) @@ -200,9 +210,8 @@ class ProductController extends Controller /** * Update the specified resource in storage. * - * @param \Webkul\Product\Http\Requests\ProductForm $request - * @param int $id - * + * @param \Webkul\Product\Http\Requests\ProductForm $request + * @param int $id * @return \Illuminate\Http\Response */ public function update(ProductForm $request, $id) @@ -233,7 +242,7 @@ class ProductController extends Controller } } - $product = $this->productRepository->update($data, $id); + $this->productRepository->update($data, $id); session()->flash('success', trans('admin::app.response.update-success', ['name' => 'Product'])); @@ -241,10 +250,27 @@ class ProductController extends Controller } /** - * Uploads downloadable file + * Update inventories. * - * @param int $id + * @param int $id + * @return \Illuminate\Http\Response + */ + public function updateInventories($id) + { + $product = $this->productRepository->findOrFail($id); + + $this->productInventoryRepository->saveInventories(request()->all(), $product); + + return response()->json([ + 'message' => 'Product inventory saved successfully.', + 'updatedTotal' => $this->productInventoryRepository->where('product_id', $product->id)->sum('qty') + ]); + } + + /** + * Uploads downloadable file. * + * @param int $id * @return \Illuminate\Http\Response */ public function uploadLink($id) @@ -256,23 +282,30 @@ class ProductController extends Controller /** * Copy a given Product. + * + * @param int $productId + * @return \Illuminate\Http\Response */ public function copy(int $productId) { $originalProduct = $this->productRepository->findOrFail($productId); if (! $originalProduct->getTypeInstance()->canBeCopied()) { - session()->flash('error', + session()->flash( + 'error', trans('admin::app.response.product-can-not-be-copied', [ 'type' => $originalProduct->type, - ])); + ]) + ); return redirect()->to(route('admin.catalog.products.index')); } if ($originalProduct->parent_id) { - session()->flash('error', - trans('admin::app.catalog.products.variant-already-exist-message')); + session()->flash( + 'error', + trans('admin::app.catalog.products.variant-already-exist-message') + ); return redirect()->to(route('admin.catalog.products.index')); } @@ -289,10 +322,9 @@ class ProductController extends Controller } /** - * Uploads downloadable sample file - * - * @param int $id + * Uploads downloadable sample file. * + * @param int $id * @return \Illuminate\Http\Response */ public function uploadSample($id) @@ -305,8 +337,7 @@ class ProductController extends Controller /** * Remove the specified resource from storage. * - * @param int $id - * + * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) @@ -329,7 +360,7 @@ class ProductController extends Controller } /** - * Mass Delete the products + * Mass Delete the products. * * @return \Illuminate\Http\Response */ @@ -351,7 +382,7 @@ class ProductController extends Controller } /** - * Mass updates the products + * Mass updates the products. * * @return \Illuminate\Http\Response */ @@ -383,7 +414,7 @@ class ProductController extends Controller } /** - * To be manually invoked when data is seeded into products + * To be manually invoked when data is seeded into products. * * @return \Illuminate\Http\Response */ @@ -419,11 +450,10 @@ class ProductController extends Controller } /** - * Download image or file - * - * @param int $productId - * @param int $attributeId + * Download image or file. * + * @param int $productId + * @param int $attributeId * @return \Illuminate\Http\Response */ public function download($productId, $attributeId) @@ -437,7 +467,7 @@ class ProductController extends Controller } /** - * Search simple products + * Search simple products. * * @return \Illuminate\Http\Response */ @@ -447,4 +477,4 @@ class ProductController extends Controller $this->productRepository->searchSimpleProducts(request()->input('query')) ); } -} \ No newline at end of file +} From 6da4dfbbbe733378b33b46aea804c5cd24a5c47b Mon Sep 17 00:00:00 2001 From: devansh bawari Date: Thu, 16 Sep 2021 10:57:43 +0530 Subject: [PATCH 3/6] Translations Added --- .../Admin/src/Resources/lang/ar/app.php | 3 + .../Admin/src/Resources/lang/de/app.php | 3 + .../Admin/src/Resources/lang/en/app.php | 157 +++++++++--------- .../Admin/src/Resources/lang/es/app.php | 3 + .../Admin/src/Resources/lang/fa/app.php | 3 + .../Admin/src/Resources/lang/fr/app.php | 3 + .../Admin/src/Resources/lang/it/app.php | 3 + .../Admin/src/Resources/lang/nl/app.php | 3 + .../Admin/src/Resources/lang/pl/app.php | 3 + .../Admin/src/Resources/lang/pt_BR/app.php | 3 + .../Admin/src/Resources/lang/tr/app.php | 3 + .../products/datagrid/quantity.blade.php | 4 +- .../Http/Controllers/ProductController.php | 2 +- 13 files changed, 113 insertions(+), 80 deletions(-) diff --git a/packages/Webkul/Admin/src/Resources/lang/ar/app.php b/packages/Webkul/Admin/src/Resources/lang/ar/app.php index 60ead8801..4830796d4 100644 --- a/packages/Webkul/Admin/src/Resources/lang/ar/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/ar/app.php @@ -580,6 +580,9 @@ return [ 'add-video-btn-title' => 'Add Video', 'remove-video-btn-title' => 'Remove Video', 'not-support-video' => 'Your browser does not support the video tag.', + 'save' => 'Save', + 'cancel' => 'Cancel', + 'saved-inventory-message' => 'Product inventory saved successfully.', ], 'attributes' => [ diff --git a/packages/Webkul/Admin/src/Resources/lang/de/app.php b/packages/Webkul/Admin/src/Resources/lang/de/app.php index a0abd263e..ed5ca3976 100755 --- a/packages/Webkul/Admin/src/Resources/lang/de/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/de/app.php @@ -571,6 +571,9 @@ return [ 'add-video-btn-title' => 'Add Video', 'remove-video-btn-title' => 'Remove Video', 'not-support-video' => 'Your browser does not support the video tag.', + 'save' => 'Save', + 'cancel' => 'Cancel', + 'saved-inventory-message' => 'Product inventory saved successfully.', ], 'attributes' => [ diff --git a/packages/Webkul/Admin/src/Resources/lang/en/app.php b/packages/Webkul/Admin/src/Resources/lang/en/app.php index da68ac287..a09914d3e 100755 --- a/packages/Webkul/Admin/src/Resources/lang/en/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/en/app.php @@ -514,84 +514,87 @@ return [ 'catalog' => [ 'products' => [ - 'title' => 'Products', - 'add-product-btn-title' => 'Add Product', - 'add-title' => 'Add Product', - 'edit-title' => 'Edit Product', - 'save-btn-title' => 'Save Product', - 'general' => 'General', - 'product-type' => 'Product Type', - 'simple' => 'Simple', - 'configurable' => 'Configurable', - 'familiy' => 'Attribute Family', - 'sku' => 'SKU', - 'configurable-attributes' => 'Configurable Attributes', - 'attribute-header' => 'Attribute(s)', - 'attribute-option-header' => 'Attribute Option(s)', - 'no' => 'No', - 'yes' => 'Yes', - 'disabled' => 'Disabled', - 'enabled' => 'Enabled', - 'add-variant-btn-title' => 'Add Variant', - 'name' => 'Name', - 'qty' => 'Qty', - 'price' => 'Price', - 'weight' => 'Weight', - 'status' => 'Status', - 'add-variant-title' => 'Add Variant', - 'add-image-btn-title' => 'Add Image', - 'mass-delete-success' => 'All the selected products have been deleted successfully', - 'mass-update-success' => 'All the selected products have been updated successfully', - 'configurable-error' => 'Please select atleast one configurable attribute.', - 'categories' => 'Categories', - 'images' => 'Images', - 'inventories' => 'Inventories', - 'variations' => 'Variations', - 'downloadable' => 'Downloadable Information', - 'links' => 'Links', - 'add-link-btn-title' => 'Add Link', - 'samples' => 'Samples', - 'add-sample-btn-title' => 'Add Sample', - 'downloads' => 'Download Allowed', - 'file' => 'File', - 'sample' => 'Sample', - 'upload-file' => 'Upload File', - 'url' => 'Url', - 'sort-order' => 'Sort Order', - 'browse-file' => 'Browse File', - 'product-link' => 'Linked Products', - 'cross-selling' => 'Cross Selling', - 'up-selling' => 'Up Selling', - 'related-products' => 'Related Products', - 'product-search-hint' => 'Start typing product name', - 'no-result-found' => 'Products not found with same name.', - 'searching' => 'Searching ...', - 'grouped-products' => 'Grouped Products', - 'search-products' => 'Search Products', - 'channel' => 'Channels', - 'bundle-items' => 'Bundle Items', - 'add-option-btn-title' => 'Add Option', - 'option-title' => 'Option Title', - 'input-type' => 'Input Type', - 'is-required' => 'Is Required', - 'select' => 'Select', - 'radio' => 'Radio', - 'checkbox' => 'Checkbox', - 'multiselect' => 'Multiselect', - 'new-option' => 'New Option', - 'is-default' => 'Is Default', - 'customer-group' => 'Customer Group', - 'add-group-price' => 'Add Customer Group Price', - 'all-group' => 'All Groups', - 'fixed' => 'Fixed', - 'discount' => 'Discount', - 'remove-image-btn-title' => 'Remove Image', - 'videos' => 'Videos', - 'video' => 'Video', - 'add-video-btn-title' => 'Add Video', - 'remove-video-btn-title' => 'Remove Video', - 'not-support-video' => 'Your browser does not support the video tag.', + 'title' => 'Products', + 'add-product-btn-title' => 'Add Product', + 'add-title' => 'Add Product', + 'edit-title' => 'Edit Product', + 'save-btn-title' => 'Save Product', + 'general' => 'General', + 'product-type' => 'Product Type', + 'simple' => 'Simple', + 'configurable' => 'Configurable', + 'familiy' => 'Attribute Family', + 'sku' => 'SKU', + 'configurable-attributes' => 'Configurable Attributes', + 'attribute-header' => 'Attribute(s)', + 'attribute-option-header' => 'Attribute Option(s)', + 'no' => 'No', + 'yes' => 'Yes', + 'disabled' => 'Disabled', + 'enabled' => 'Enabled', + 'add-variant-btn-title' => 'Add Variant', + 'name' => 'Name', + 'qty' => 'Qty', + 'price' => 'Price', + 'weight' => 'Weight', + 'status' => 'Status', + 'add-variant-title' => 'Add Variant', + 'add-image-btn-title' => 'Add Image', + 'mass-delete-success' => 'All the selected products have been deleted successfully', + 'mass-update-success' => 'All the selected products have been updated successfully', + 'configurable-error' => 'Please select atleast one configurable attribute.', + 'categories' => 'Categories', + 'images' => 'Images', + 'inventories' => 'Inventories', + 'variations' => 'Variations', + 'downloadable' => 'Downloadable Information', + 'links' => 'Links', + 'add-link-btn-title' => 'Add Link', + 'samples' => 'Samples', + 'add-sample-btn-title' => 'Add Sample', + 'downloads' => 'Download Allowed', + 'file' => 'File', + 'sample' => 'Sample', + 'upload-file' => 'Upload File', + 'url' => 'Url', + 'sort-order' => 'Sort Order', + 'browse-file' => 'Browse File', + 'product-link' => 'Linked Products', + 'cross-selling' => 'Cross Selling', + 'up-selling' => 'Up Selling', + 'related-products' => 'Related Products', + 'product-search-hint' => 'Start typing product name', + 'no-result-found' => 'Products not found with same name.', + 'searching' => 'Searching ...', + 'grouped-products' => 'Grouped Products', + 'search-products' => 'Search Products', + 'channel' => 'Channels', + 'bundle-items' => 'Bundle Items', + 'add-option-btn-title' => 'Add Option', + 'option-title' => 'Option Title', + 'input-type' => 'Input Type', + 'is-required' => 'Is Required', + 'select' => 'Select', + 'radio' => 'Radio', + 'checkbox' => 'Checkbox', + 'multiselect' => 'Multiselect', + 'new-option' => 'New Option', + 'is-default' => 'Is Default', + 'customer-group' => 'Customer Group', + 'add-group-price' => 'Add Customer Group Price', + 'all-group' => 'All Groups', + 'fixed' => 'Fixed', + 'discount' => 'Discount', + 'remove-image-btn-title' => 'Remove Image', + 'videos' => 'Videos', + 'video' => 'Video', + 'add-video-btn-title' => 'Add Video', + 'remove-video-btn-title' => 'Remove Video', + 'not-support-video' => 'Your browser does not support the video tag.', 'variant-already-exist-message' => 'Variant with same attribute options already exists.', + 'save' => 'Save', + 'cancel' => 'Cancel', + 'saved-inventory-message' => 'Product inventory saved successfully.', ], 'attributes' => [ diff --git a/packages/Webkul/Admin/src/Resources/lang/es/app.php b/packages/Webkul/Admin/src/Resources/lang/es/app.php index 3023f1154..3c3f8b72e 100644 --- a/packages/Webkul/Admin/src/Resources/lang/es/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/es/app.php @@ -592,6 +592,9 @@ return [ 'add-video-btn-title' => 'Agregar Video', 'remove-video-btn-title' => 'Remover Video', 'not-support-video' => 'Su navegador no soporta la etiqueta video.', + 'save' => 'Save', + 'cancel' => 'Cancel', + 'saved-inventory-message' => 'Product inventory saved successfully.', ], 'attributes' => [ diff --git a/packages/Webkul/Admin/src/Resources/lang/fa/app.php b/packages/Webkul/Admin/src/Resources/lang/fa/app.php index 5fd9d0801..c5f6d96cb 100644 --- a/packages/Webkul/Admin/src/Resources/lang/fa/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/fa/app.php @@ -581,6 +581,9 @@ return [ 'add-video-btn-title' => 'اضافه کردن فیلم', 'remove-video-btn-title' => 'حذف فیلم', 'not-support-video' => 'مرورگر شما تگ ویدیو را پشتیبانی نمی کند', + 'save' => 'Save', + 'cancel' => 'Cancel', + 'saved-inventory-message' => 'Product inventory saved successfully.', ], 'attributes' => [ diff --git a/packages/Webkul/Admin/src/Resources/lang/fr/app.php b/packages/Webkul/Admin/src/Resources/lang/fr/app.php index 6f7f4b8ff..398b181e4 100644 --- a/packages/Webkul/Admin/src/Resources/lang/fr/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/fr/app.php @@ -591,6 +591,9 @@ return [ 'remove-video-btn-title' => 'Supprimer la vidéo', 'not-support-video' => 'Votre navigateur ne prend pas en charge la balise vidéo.', 'variant-already-exist-message' => 'Une variante avec les mêmes options d\'attribut existe déjà.', + 'save' => 'Save', + 'cancel' => 'Cancel', + 'saved-inventory-message' => 'Product inventory saved successfully.', ], 'attributes' => [ diff --git a/packages/Webkul/Admin/src/Resources/lang/it/app.php b/packages/Webkul/Admin/src/Resources/lang/it/app.php index c7b102e77..6c2afab72 100644 --- a/packages/Webkul/Admin/src/Resources/lang/it/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/it/app.php @@ -581,6 +581,9 @@ return [ 'add-video-btn-title' => 'Add Video', 'remove-video-btn-title' => 'Remove Video', 'not-support-video' => 'Your browser does not support the video tag.', + 'save' => 'Save', + 'cancel' => 'Cancel', + 'saved-inventory-message' => 'Product inventory saved successfully.', ], 'attributes' => [ diff --git a/packages/Webkul/Admin/src/Resources/lang/nl/app.php b/packages/Webkul/Admin/src/Resources/lang/nl/app.php index d098ad8ca..73e10a9f9 100644 --- a/packages/Webkul/Admin/src/Resources/lang/nl/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/nl/app.php @@ -577,6 +577,9 @@ return [ 'add-video-btn-title' => 'Add Video', 'remove-video-btn-title' => 'Remove Video', 'not-support-video' => 'Your browser does not support the video tag.', + 'save' => 'Save', + 'cancel' => 'Cancel', + 'saved-inventory-message' => 'Product inventory saved successfully.', ], 'attributes' => [ diff --git a/packages/Webkul/Admin/src/Resources/lang/pl/app.php b/packages/Webkul/Admin/src/Resources/lang/pl/app.php index 648b020a7..216997f9e 100644 --- a/packages/Webkul/Admin/src/Resources/lang/pl/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/pl/app.php @@ -579,6 +579,9 @@ return [ 'add-video-btn-title' => 'Add Video', 'remove-video-btn-title' => 'Remove Video', 'not-support-video' => 'Your browser does not support the video tag.', + 'save' => 'Save', + 'cancel' => 'Cancel', + 'saved-inventory-message' => 'Product inventory saved successfully.', ], 'attributes' => [ diff --git a/packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php b/packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php index d3013ccd3..ba9d42c58 100755 --- a/packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php @@ -578,6 +578,9 @@ return [ 'add-video-btn-title' => 'Add Video', 'remove-video-btn-title' => 'Remove Video', 'not-support-video' => 'Your browser does not support the video tag.', + 'save' => 'Save', + 'cancel' => 'Cancel', + 'saved-inventory-message' => 'Product inventory saved successfully.', ], 'attributes' => [ diff --git a/packages/Webkul/Admin/src/Resources/lang/tr/app.php b/packages/Webkul/Admin/src/Resources/lang/tr/app.php index 94d5d14c6..37f3e722d 100644 --- a/packages/Webkul/Admin/src/Resources/lang/tr/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/tr/app.php @@ -574,6 +574,9 @@ return [ 'add-video-btn-title' => 'Add Video', 'remove-video-btn-title' => 'Remove Video', 'not-support-video' => 'Your browser does not support the video tag.', + 'save' => 'Save', + 'cancel' => 'Cancel', + 'saved-inventory-message' => 'Product inventory saved successfully.', ], 'attributes' => [ diff --git a/packages/Webkul/Admin/src/Resources/views/catalog/products/datagrid/quantity.blade.php b/packages/Webkul/Admin/src/Resources/views/catalog/products/datagrid/quantity.blade.php index 3d93c1711..379bd010b 100644 --- a/packages/Webkul/Admin/src/Resources/views/catalog/products/datagrid/quantity.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/catalog/products/datagrid/quantity.blade.php @@ -31,7 +31,7 @@ @endforeach - - + + \ No newline at end of file diff --git a/packages/Webkul/Product/src/Http/Controllers/ProductController.php b/packages/Webkul/Product/src/Http/Controllers/ProductController.php index 8632b96f2..51513bd38 100755 --- a/packages/Webkul/Product/src/Http/Controllers/ProductController.php +++ b/packages/Webkul/Product/src/Http/Controllers/ProductController.php @@ -262,7 +262,7 @@ class ProductController extends Controller $this->productInventoryRepository->saveInventories(request()->all(), $product); return response()->json([ - 'message' => 'Product inventory saved successfully.', + 'message' => __('admin::app.catalog.products.saved-inventory-message'), 'updatedTotal' => $this->productInventoryRepository->where('product_id', $product->id)->sum('qty') ]); } From a468f45dd09868106c58395216ec9809e8e33083 Mon Sep 17 00:00:00 2001 From: devansh bawari Date: Thu, 16 Sep 2021 11:04:50 +0530 Subject: [PATCH 4/6] Alignment Done --- .../Admin/src/Resources/lang/de/app.php | 68 +++++++++---------- .../Admin/src/Resources/lang/en/app.php | 6 +- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/packages/Webkul/Admin/src/Resources/lang/de/app.php b/packages/Webkul/Admin/src/Resources/lang/de/app.php index ed5ca3976..4949aea42 100755 --- a/packages/Webkul/Admin/src/Resources/lang/de/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/de/app.php @@ -498,31 +498,31 @@ return [ [ 'products' => [ - 'title' => 'Produkte', - 'add-product-btn-title' => 'Produkt hinzufügen', - 'add-title' => 'Produkt hinzufügen', - 'edit-title' => 'Produkt bearbeiten', - 'save-btn-title' => 'Produkt speichern', - 'general' => 'Allgemein', - 'product-type' => 'Produkttyp', - 'simple' => 'Einfach', - 'configurable' => 'Konfigurierbar', - 'familiy' => 'Attributgruppe', - 'sku' => 'SKU', - 'configurable-attributes' => 'Konfigurierbare Attribute', - 'attribute-header' => 'Attribut(s)', - 'attribute-option-header' => 'Attribut Option(s)', - 'no' => 'Nein', - 'yes' => 'Ja', - 'disabled' => 'Deaktiviert', - 'enabled' => 'Aktiviert', - 'add-variant-btn-title' => 'Variante hinzufügen', - 'name' => 'Name', - 'qty' => 'Menge', - 'price' => 'Preis', - 'weight' => 'Gewicht', - 'status' => 'Status', - 'add-variant-title' => 'Variante hinzufügen', + 'title' => 'Produkte', + 'add-product-btn-title' => 'Produkt hinzufügen', + 'add-title' => 'Produkt hinzufügen', + 'edit-title' => 'Produkt bearbeiten', + 'save-btn-title' => 'Produkt speichern', + 'general' => 'Allgemein', + 'product-type' => 'Produkttyp', + 'simple' => 'Einfach', + 'configurable' => 'Konfigurierbar', + 'familiy' => 'Attributgruppe', + 'sku' => 'SKU', + 'configurable-attributes' => 'Konfigurierbare Attribute', + 'attribute-header' => 'Attribut(s)', + 'attribute-option-header' => 'Attribut Option(s)', + 'no' => 'Nein', + 'yes' => 'Ja', + 'disabled' => 'Deaktiviert', + 'enabled' => 'Aktiviert', + 'add-variant-btn-title' => 'Variante hinzufügen', + 'name' => 'Name', + 'qty' => 'Menge', + 'price' => 'Preis', + 'weight' => 'Gewicht', + 'status' => 'Status', + 'add-variant-title' => 'Variante hinzufügen', 'variant-already-exist-message' => 'Eine Variante mit denselben Attributoptionen ist bereits vorhanden.', 'add-image-btn-title' => 'Bild hinzufügen', 'mass-delete-success' => 'Alle ausgewählten Produkte wurden erfolgreich gelöscht', @@ -565,15 +565,15 @@ return [ 'multiselect' => 'Multiselect', 'new-option' => 'Neue Option', 'is-default' => 'Ist Standard', - 'remove-image-btn-title' => 'Remove Image', - 'videos' => 'Videos', - 'video' => 'Video', - 'add-video-btn-title' => 'Add Video', - 'remove-video-btn-title' => 'Remove Video', - 'not-support-video' => 'Your browser does not support the video tag.', - 'save' => 'Save', - 'cancel' => 'Cancel', - 'saved-inventory-message' => 'Product inventory saved successfully.', + 'remove-image-btn-title' => 'Remove Image', + 'videos' => 'Videos', + 'video' => 'Video', + 'add-video-btn-title' => 'Add Video', + 'remove-video-btn-title' => 'Remove Video', + 'not-support-video' => 'Your browser does not support the video tag.', + 'save' => 'Save', + 'cancel' => 'Cancel', + 'saved-inventory-message' => 'Product inventory saved successfully.', ], 'attributes' => [ diff --git a/packages/Webkul/Admin/src/Resources/lang/en/app.php b/packages/Webkul/Admin/src/Resources/lang/en/app.php index a09914d3e..891c43bac 100755 --- a/packages/Webkul/Admin/src/Resources/lang/en/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/en/app.php @@ -592,9 +592,9 @@ return [ 'remove-video-btn-title' => 'Remove Video', 'not-support-video' => 'Your browser does not support the video tag.', 'variant-already-exist-message' => 'Variant with same attribute options already exists.', - 'save' => 'Save', - 'cancel' => 'Cancel', - 'saved-inventory-message' => 'Product inventory saved successfully.', + 'save' => 'Save', + 'cancel' => 'Cancel', + 'saved-inventory-message' => 'Product inventory saved successfully.', ], 'attributes' => [ From ebe6b243d86fd9a0a0929e78bef56997c282e822 Mon Sep 17 00:00:00 2001 From: devansh bawari Date: Thu, 16 Sep 2021 11:29:09 +0530 Subject: [PATCH 5/6] Fixed Issue: https://github.com/bagisto/bagisto/issues/5155 --- packages/Webkul/Admin/src/DataGrids/ProductDataGrid.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/Webkul/Admin/src/DataGrids/ProductDataGrid.php b/packages/Webkul/Admin/src/DataGrids/ProductDataGrid.php index 54e59f972..6eb0a77f6 100644 --- a/packages/Webkul/Admin/src/DataGrids/ProductDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/ProductDataGrid.php @@ -135,7 +135,7 @@ class ProductDataGrid extends DataGrid 'product_flat.status', 'product_flat.price', 'attribute_families.name as attribute_family', - DB::raw('SUM(DISTINCT ' . DB::getTablePrefix() . 'product_inventories.qty) as quantity') + DB::raw('SUM(' . DB::getTablePrefix() . 'product_inventories.qty) as quantity') ); $queryBuilder->groupBy('product_flat.product_id', 'product_flat.locale', 'product_flat.channel'); From c5a1f37b410f988dc43283c5d696704fda65cb32 Mon Sep 17 00:00:00 2001 From: devansh bawari Date: Thu, 16 Sep 2021 14:19:22 +0530 Subject: [PATCH 6/6] Add Unit Test For The Product Inventory Updation Testing --- tests/unit/Product/ProductCest.php | 67 ++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 tests/unit/Product/ProductCest.php diff --git a/tests/unit/Product/ProductCest.php b/tests/unit/Product/ProductCest.php new file mode 100644 index 000000000..951e2da37 --- /dev/null +++ b/tests/unit/Product/ProductCest.php @@ -0,0 +1,67 @@ +haveProduct(\Webkul\Core\Helpers\Laravel5Helper::SIMPLE_PRODUCT, [], ['simple']); + + $updatedInventoriesQty = $this->getRandomUpdatedInventoriesQty($I, $product); + + app(ProductInventoryRepository::class)->saveInventories([ + 'inventories' => $updatedInventoriesQty + ], $product); + + $product->refresh(); + + $I->assertEquals(array_sum($updatedInventoriesQty), $product->inventories->sum('qty')); + } + + /** + * Test old quantities. + * + * @param UnitTester $I + * @return void + */ + public function testProductInventoriesQty(UnitTester $I): void + { + $product = $I->haveProduct(\Webkul\Core\Helpers\Laravel5Helper::SIMPLE_PRODUCT, [], ['simple']); + + $oldInventoriesQty = $product->inventories->pluck('qty', 'inventory_source_id')->toArray(); + + $oldTotalQuantity = $product->inventories->sum('qty'); + + $I->assertEquals($oldTotalQuantity, array_sum($oldInventoriesQty)); + } + + /** + * Get random inventories qty for product. + * + * @param UnitTester $I + * @param \Webkul\Product\Models\Product $product + * @return array + */ + private function getRandomUpdatedInventoriesQty(UnitTester $I, $product): array + { + $oldInventoriesQty = $product->inventories->pluck('qty', 'inventory_source_id'); + + $updatedInventoriesQty = []; + + foreach ($oldInventoriesQty as $id => $oldInventoryQty) { + $updatedInventoriesQty[$id] = $I->fake()->numberBetween(500, 2000); + } + + return $updatedInventoriesQty; + } +}