item clonation finish
This commit is contained in:
parent
91b7be32fb
commit
10e47acd6b
|
@ -2,7 +2,7 @@
|
|||
display: none;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
z-index: 10;
|
||||
z-index: 11;
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
</vn-one>
|
||||
<vn-horizontal vn-auto pad-large-top>
|
||||
<vn-one>
|
||||
<vn-icon vn-tooltip="Clone" pad-medium-top margin-medium-right margin-small-top icon="icon-clone2"></vn-icon>
|
||||
<vn-icon ng-click="$ctrl.clone()" vn-tooltip="Clone" pad-medium-top margin-medium-right margin-small-top icon="icon-clone2"></vn-icon>
|
||||
</vn-one>
|
||||
<vn-one>
|
||||
<vn-icon ng-click="$ctrl.preview()" vn-tooltip="Preview" pad-medium-top margin-small-top icon="icon-preview"></vn-icon>
|
||||
|
|
|
@ -6,7 +6,7 @@ class ItemProduct {
|
|||
}
|
||||
|
||||
clone() {
|
||||
console.log('clone ', this.item.id);
|
||||
this.ItemList.cloneItem(this.item);
|
||||
}
|
||||
|
||||
preview() {
|
||||
|
|
|
@ -27,4 +27,16 @@
|
|||
<vn-item-summary item="$ctrl.itemSelected"></vn-item-summary>
|
||||
</tpl-body>
|
||||
</vn-dialog>
|
||||
|
||||
<vn-dialog
|
||||
vn-id="clone"
|
||||
on-response="$ctrl.onCloneAccept(response)">
|
||||
<tpl-body>
|
||||
<p translate>Do you want to clone this item?</p>
|
||||
</tpl-body>
|
||||
<tpl-buttons>
|
||||
<button response="CANCEL" translate>Cancel</button>
|
||||
<button response="ACCEPT" translate>Yes, clone</button>
|
||||
</tpl-buttons>
|
||||
</vn-dialog>
|
||||
</div>
|
|
@ -3,7 +3,9 @@ import './item-product';
|
|||
import './style.scss';
|
||||
|
||||
class ItemList {
|
||||
constructor($scope) {
|
||||
constructor($http, $state, $scope) {
|
||||
this.$http = $http;
|
||||
this.$state = $state;
|
||||
this.$scope = $scope;
|
||||
this.model = {};
|
||||
this.itemSelected = null;
|
||||
|
@ -11,12 +13,26 @@ class ItemList {
|
|||
search(index) {
|
||||
index.accept();
|
||||
}
|
||||
cloneItem(item) {
|
||||
this.itemSelected = item;
|
||||
this.$scope.clone.show();
|
||||
}
|
||||
onCloneAccept(response) {
|
||||
if (response == 'ACCEPT' && this.itemSelected) {
|
||||
this.$http.post(`/item/api/Items/${this.itemSelected.id}/clone`).then(res => {
|
||||
if (res && res.data && res.data.id) {
|
||||
this.$state.go('item.card.tags', {id: res.data.id});
|
||||
}
|
||||
});
|
||||
}
|
||||
this.itemSelected = null;
|
||||
}
|
||||
showItemPreview(item) {
|
||||
this.itemSelected = item;
|
||||
this.$scope.preview.show();
|
||||
}
|
||||
}
|
||||
ItemList.$inject = ['$scope'];
|
||||
ItemList.$inject = ['$http', '$state', '$scope'];
|
||||
|
||||
ngModule.component('vnItemList', {
|
||||
template: require('./list.html'),
|
||||
|
|
|
@ -18,3 +18,7 @@ Item barcode: Código de barras del artículo
|
|||
Changed by: Cambiado por
|
||||
Action: Acción
|
||||
Date: Fecha
|
||||
Preview: Vista previa
|
||||
Clone: Clonar
|
||||
Do you want to clone this item?: ¿Desea clonar este artículo?
|
||||
Yes, clone: Si, clonar
|
|
@ -0,0 +1,59 @@
|
|||
var UserError = require('../../../../loopback/common/helpers').UserError;
|
||||
|
||||
module.exports = Self => {
|
||||
Self.remoteMethod('clone', {
|
||||
description: 'clone item',
|
||||
accessType: 'WRITE',
|
||||
accepts: [{
|
||||
arg: 'id',
|
||||
type: 'number',
|
||||
required: true,
|
||||
description: 'origin itemId',
|
||||
http: {source: 'path'}
|
||||
}],
|
||||
returns: {
|
||||
arg: 'id',
|
||||
description: 'new cloned itemId'
|
||||
},
|
||||
http: {
|
||||
path: `/:id/clone`,
|
||||
verb: 'post'
|
||||
}
|
||||
});
|
||||
|
||||
Self.clone = async (itemId, callback) => {
|
||||
let filter = {
|
||||
where: {
|
||||
id: itemId
|
||||
},
|
||||
include: [
|
||||
{relation: "itemTag", scope: {order: "priority ASC", include: {relation: "tag"}}}
|
||||
]
|
||||
};
|
||||
try {
|
||||
let origin = await Self.findOne(filter);
|
||||
let copy = JSON.parse(JSON.stringify(origin));
|
||||
|
||||
delete copy.id;
|
||||
delete copy.itemTag;
|
||||
|
||||
let newItem = await Self.create(copy);
|
||||
let promises = [];
|
||||
|
||||
let createBotanical = `INSERT INTO vn.itemBotanical (itemFk, botanical, genusFk, specieFk)
|
||||
SELECT ?, botanical, genusFk, specieFk
|
||||
FROM vn.itemBotanical ib WHERE itemFk = ?`;
|
||||
promises.push(Self.rawSql(createBotanical, [newItem.id, origin.id]));
|
||||
|
||||
let createTags = `INSERT INTO vn.itemTag (itemFk, tagFk, value, priority)
|
||||
SELECT ?, tagFk, value, priority
|
||||
FROM vn.itemTag WHERE itemFk = ?`;
|
||||
promises.push(Self.rawSql(createTags, [newItem.id, origin.id]));
|
||||
|
||||
await Promise.all(promises);
|
||||
return newItem.id;
|
||||
} catch (err) {
|
||||
throw new UserError(err);
|
||||
}
|
||||
};
|
||||
};
|
|
@ -1,5 +1,6 @@
|
|||
module.exports = function(Self) {
|
||||
require('../methods/item/filter.js')(Self);
|
||||
require('../methods/item/clone.js')(Self);
|
||||
|
||||
Self.validatesPresenceOf('name', {message: 'Cannot be blank'});
|
||||
Self.validatesPresenceOf('originFk', {message: 'Cannot be blank'});
|
||||
|
|
Loading…
Reference in New Issue