FR-3015882 - Copy Product

Link to SF Tracker: http://sourceforge.net/support/tracker.php?aid=3015882
This commit is contained in:
usrdno 2010-06-17 13:14:03 +00:00
parent dfd780d8ab
commit 34249806d1
3 changed files with 363 additions and 0 deletions

View File

@ -0,0 +1,273 @@
package org.compiere.process;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import org.compiere.model.MBPartnerProduct;
import org.compiere.model.MProductDownload;
import org.compiere.model.MProductPrice;
import org.compiere.model.Query;
import org.compiere.model.X_M_RelatedProduct;
import org.compiere.model.X_M_Replenish;
import org.compiere.model.X_M_Substitute;
/**
* Process that copies product information such as substitutes, related, prices, downloads
* etc from another product. Purchase information and accounting is not copied at this
* moment.
*
* @author Daniel Tamm (usrdno)
*
*/
public class CopyProduct extends SvrProcess {
private int m_copyFromId;
@Override
protected void prepare() {
ProcessInfoParameter[] para = getParameter();
for (int i = 0; i < para.length; i++)
{
String name = para[i].getParameterName();
if (para[i].getParameter() == null)
;
else if (name.equals("C_CopyFrom_ID"))
m_copyFromId = para[i].getParameterAsInt();
else if (name.equals("M_Product_ID"))
m_copyFromId = para[i].getParameterAsInt();
else
log.log(Level.SEVERE, "prepare - Unknown Parameter: " + name);
}
}
@Override
protected String doIt() throws Exception {
int toMProductID = getRecord_ID();
log.info("From M_Product_ID=" + m_copyFromId + " to " + toMProductID);
if (toMProductID == 0)
throw new IllegalArgumentException("Target M_Product_ID == 0");
if (m_copyFromId == 0)
throw new IllegalArgumentException("Source M_Product_ID == 0");
// Get product price from the source product
List<MProductPrice> prices = new Query(getCtx(), MProductPrice.Table_Name, "M_Product_ID=?", get_TrxName())
.setParameters(new Object[]{m_copyFromId})
.setOnlyActiveRecords(true)
.list();
// Copy prices
MProductPrice priceSrc;
MProductPrice priceDst;
for (Iterator<MProductPrice> it = prices.iterator(); it.hasNext();) {
priceSrc = it.next();
priceDst = new MProductPrice(getCtx(), 0, get_TrxName());
priceDst.setM_Product_ID(toMProductID);
priceDst.setM_PriceList_Version_ID(priceSrc.getM_PriceList_Version_ID());
priceDst.setPrices(priceSrc.getPriceList(), priceSrc.getPriceStd(), priceSrc.getPriceLimit());
priceDst.saveEx(get_TrxName());
}
int count = prices.size();
// Copy substitutes
List<X_M_Substitute> subs = new Query(getCtx(), X_M_Substitute.Table_Name, "M_Product_ID=? and NOT substitute_ID=?", get_TrxName())
.setParameters(new Object[]{m_copyFromId, toMProductID})
.setOnlyActiveRecords(true)
.list();
X_M_Substitute subSrc;
X_M_Substitute subDst;
for (Iterator<X_M_Substitute> it = subs.iterator(); it.hasNext();) {
subSrc = it.next();
subDst = new X_M_Substitute(getCtx(), 0, get_TrxName());
subDst.setM_Product_ID(toMProductID);
subDst.setSubstitute_ID(subSrc.getSubstitute_ID());
subDst.setName(subSrc.getName());
subDst.setDescription(subSrc.getDescription());
subDst.saveEx(get_TrxName());
}
count += subs.size();
// Copy related
List<X_M_RelatedProduct> related = new Query(getCtx(), X_M_RelatedProduct.Table_Name, "M_Product_ID=? and NOT relatedProduct_ID=?", get_TrxName())
.setParameters(new Object[]{m_copyFromId, toMProductID})
.setOnlyActiveRecords(true)
.list();
X_M_RelatedProduct relatedSrc;
X_M_RelatedProduct relatedDst;
for (Iterator<X_M_RelatedProduct> it = related.iterator(); it.hasNext();) {
relatedSrc = it.next();
relatedDst = new X_M_RelatedProduct(getCtx(), 0, get_TrxName());
relatedDst.setM_Product_ID(toMProductID);
relatedDst.setRelatedProduct_ID(relatedSrc.getRelatedProduct_ID());
relatedDst.setRelatedProductType(relatedSrc.getRelatedProductType());
relatedDst.setName(relatedSrc.getName());
relatedDst.setDescription(relatedSrc.getDescription());
relatedDst.saveEx(get_TrxName());
}
count += related.size();
// Copy replenish
List<X_M_Replenish> replenish = new Query(getCtx(), X_M_Replenish.Table_Name, "M_Product_ID=?", get_TrxName())
.setParameters(new Object[]{m_copyFromId})
.setOnlyActiveRecords(true)
.list();
X_M_Replenish replenishSrc;
X_M_Replenish replenishDst;
for (Iterator<X_M_Replenish> it = replenish.iterator(); it.hasNext();) {
replenishSrc = it.next();
replenishDst = new X_M_Replenish(getCtx(), 0, get_TrxName());
replenishDst.setM_Product_ID(toMProductID);
replenishDst.setM_Warehouse_ID(replenishSrc.getM_Warehouse_ID());
replenishDst.setM_WarehouseSource_ID(replenishSrc.getM_WarehouseSource_ID());
replenishDst.setReplenishType(replenishSrc.getReplenishType());
replenishDst.setM_Locator_ID(replenishSrc.getM_Locator_ID());
replenishDst.setLevel_Min(replenishSrc.getLevel_Min());
replenishDst.setLevel_Max(replenishSrc.getLevel_Max());
replenishDst.saveEx(get_TrxName());
}
count += replenish.size();
// Don't copy purchasing since it demands a unique vendor product no
/*
List<MProductPO> poList = new Query(getCtx(), MProductPO.Table_Name, "M_Product_ID=? AND Discontinued='N'", get_TrxName())
.setParameters(new Object[]{m_copyFromId})
.setOnlyActiveRecords(true)
.list();
MProductPO poSrc;
MProductPO poDst;
for (Iterator<MProductPO> it = poList.iterator(); it.hasNext();) {
poSrc = it.next();
poDst = new MProductPO(getCtx(), 0, get_TrxName());
poDst.setM_Product_ID(toMProductID);
poDst.setC_BPartner_ID(poSrc.getC_BPartner_ID());
poDst.setC_Currency_ID(poSrc.getC_Currency_ID());
poDst.setC_UOM_ID(poSrc.getC_UOM_ID());
poDst.setCostPerOrder(poSrc.getCostPerOrder());
poDst.setDeliveryTime_Actual(poSrc.getDeliveryTime_Actual());
poDst.setDeliveryTime_Promised(poSrc.getDeliveryTime_Promised());
poDst.setIsCurrentVendor(poSrc.isCurrentVendor());
poDst.setManufacturer(poSrc.getManufacturer());
poDst.setOrder_Min(poSrc.getOrder_Min());
poDst.setOrder_Pack(poSrc.getOrder_Pack());
poDst.setPriceEffective(poSrc.getPriceEffective());
poDst.setPriceLastInv(poSrc.getPriceLastInv());
poDst.setPriceLastPO(poSrc.getPriceLastPO());
poDst.setPriceList(poSrc.getPriceList());
poDst.setPricePO(poSrc.getPricePO());
poDst.setQualityRating(poSrc.getQualityRating());
poDst.setRoyaltyAmt(poSrc.getRoyaltyAmt());
// Don't set vendor product no or UPC since that's likely to be different
poDst.setVendorCategory(poSrc.getVendorCategory());
poDst.saveEx(get_TrxName());
}
count += poList.size();
*/
// Copy business partner
List<MBPartnerProduct> bpList = new Query(getCtx(), MBPartnerProduct.Table_Name, "M_Product_ID=?", get_TrxName())
.setParameters(new Object[]{m_copyFromId})
.setOnlyActiveRecords(true)
.list();
MBPartnerProduct bpSrc;
MBPartnerProduct bpDst;
for (Iterator<MBPartnerProduct> it = bpList.iterator(); it.hasNext();) {
bpSrc = it.next();
bpDst = new MBPartnerProduct(getCtx(), 0, get_TrxName());
bpDst.setC_BPartner_ID(bpSrc.getC_BPartner_ID());
bpDst.setDescription(bpSrc.getDescription());
bpDst.setIsManufacturer(bpSrc.isManufacturer());
bpDst.setM_Product_ID(toMProductID);
bpDst.setManufacturer(bpSrc.getManufacturer());
bpDst.setQualityRating(bpSrc.getQualityRating());
bpDst.setShelfLifeMinDays(bpSrc.getShelfLifeMinDays());
bpDst.setShelfLifeMinPct(bpSrc.getShelfLifeMinPct());
bpDst.setVendorCategory(bpSrc.getVendorCategory());
bpDst.setVendorProductNo(bpSrc.getVendorProductNo());
bpDst.saveEx(get_TrxName());
}
count += bpList.size();
// Copy download
List<MProductDownload> dlList = new Query(getCtx(), MProductDownload.Table_Name, "M_Product_ID=?", get_TrxName())
.setParameters(new Object[]{m_copyFromId})
.setOnlyActiveRecords(true)
.list();
MProductDownload dlSrc;
MProductDownload dlDst;
for (Iterator<MProductDownload> it = dlList.iterator(); it.hasNext();) {
dlSrc = it.next();
dlDst = new MProductDownload(getCtx(), 0, get_TrxName());
dlDst.setM_Product_ID(toMProductID);
dlDst.setName(dlSrc.getName());
dlDst.setDownloadURL(dlSrc.getDownloadURL());
dlDst.saveEx(get_TrxName());
}
count += dlList.size();
// Don't copy accounting because of constraints.
/*
// Delete any current accounting records
DB.executeUpdate("delete from " + X_M_Product_Acct.Table_Name + " where M_Product_ID=" + toMProductID, get_TrxName());
// Copy accounting
List<X_M_Product_Acct> acctList = new Query(getCtx(), X_M_Product_Acct.Table_Name, "M_Product_ID=?", get_TrxName())
.setParameters(new Object[]{m_copyFromId})
.setOnlyActiveRecords(true)
.list();
X_M_Product_Acct acctSrc;
X_M_Product_Acct acctDst;
for (Iterator<X_M_Product_Acct> it = acctList.iterator(); it.hasNext();) {
acctSrc = it.next();
acctDst = new X_M_Product_Acct(getCtx(), 0, get_TrxName());
acctDst.setC_AcctSchema_ID(acctSrc.getC_AcctSchema_ID());
acctDst.setM_Product_ID(toMProductID);
acctDst.setP_Asset_Acct(acctSrc.getP_Asset_Acct());
acctDst.setP_AverageCostVariance_Acct(acctSrc.getP_AverageCostVariance_Acct());
acctDst.setP_Burden_Acct(acctSrc.getP_Burden_Acct());
acctDst.setP_COGS_Acct(acctSrc.getP_COGS_Acct());
acctDst.setP_CostAdjustment_Acct(acctSrc.getP_CostAdjustment_Acct());
acctDst.setP_CostOfProduction_Acct(acctSrc.getP_CostOfProduction_Acct());
acctDst.setP_Expense_Acct(acctSrc.getP_Expense_Acct());
acctDst.setP_FloorStock_Acct(acctSrc.getP_FloorStock_Acct());
acctDst.setP_InventoryClearing_Acct(acctSrc.getP_InventoryClearing_Acct());
acctDst.setP_InvoicePriceVariance_Acct(acctSrc.getP_InvoicePriceVariance_Acct());
acctDst.setP_Labor_Acct(acctSrc.getP_Labor_Acct());
acctDst.setP_MethodChangeVariance_Acct(acctSrc.getP_MethodChangeVariance_Acct());
acctDst.setP_MixVariance_Acct(acctSrc.getP_MixVariance_Acct());
acctDst.setP_OutsideProcessing_Acct(acctSrc.getP_OutsideProcessing_Acct());
acctDst.setP_Overhead_Acct(acctSrc.getP_Overhead_Acct());
acctDst.setP_PurchasePriceVariance_Acct(acctSrc.getP_PurchasePriceVariance_Acct());
acctDst.setP_RateVariance_Acct(acctSrc.getP_RateVariance_Acct());
acctDst.setP_Revenue_Acct(acctSrc.getP_Revenue_Acct());
acctDst.setP_Scrap_Acct(acctSrc.getP_Scrap_Acct());
acctDst.setP_TradeDiscountGrant_Acct(acctSrc.getP_TradeDiscountGrant_Acct());
acctDst.setP_TradeDiscountRec_Acct(acctSrc.getP_TradeDiscountRec_Acct());
acctDst.setP_UsageVariance_Acct(acctSrc.getP_UsageVariance_Acct());
acctDst.setP_WIP_Acct(acctSrc.getP_WIP_Acct());
acctDst.saveEx(get_TrxName());
}
count += acctList.size();
*/
// TODO Auto-generated method stub
return "@Copied@=" + count;
}
}

View File

@ -0,0 +1,45 @@
-- Jun 14, 2010 2:48:57 PM CEST
-- FR 3015882 - Copy process for product
INSERT INTO AD_Process (AccessLevel,AD_Client_ID,AD_Org_ID,AD_Process_ID,Classname,CopyFromProcess,Created,CreatedBy,Description,EntityType,IsActive,IsBetaFunctionality,IsDirectPrint,IsReport,IsServerProcess,Name,ShowHelp,Statistic_Count,Statistic_Seconds,Updated,UpdatedBy,Value) VALUES ('1',0,0,53206,'org.compiere.process.CopyProduct','N',TO_DATE('2010-06-14 14:48:55','YYYY-MM-DD HH24:MI:SS'),100,'Copy prices etc from other product','D','Y','N','N','N','N','Copy from product','Y',0,0,TO_DATE('2010-06-14 14:48:55','YYYY-MM-DD HH24:MI:SS'),100,'M_Product CopyFrom')
;
-- Jun 14, 2010 2:48:57 PM CEST
-- FR 3015882 - Copy process for product
INSERT INTO AD_Process_Trl (AD_Language,AD_Process_ID, Description,Help,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Process_ID, t.Description,t.Help,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Process t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Process_ID=53206 AND NOT EXISTS (SELECT * FROM AD_Process_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Process_ID=t.AD_Process_ID)
;
-- Jun 14, 2010 2:49:42 PM CEST
-- FR 3015882 - Copy process for product
INSERT INTO AD_Process_Para (AD_Client_ID,AD_Element_ID,AD_Org_ID,AD_Process_ID,AD_Process_Para_ID,AD_Reference_ID,ColumnName,Created,CreatedBy,Description,EntityType,FieldLength,Help,IsActive,IsCentrallyMaintained,IsMandatory,IsRange,Name,SeqNo,Updated,UpdatedBy) VALUES (0,454,0,53206,53410,30,'M_Product_ID',TO_DATE('2010-06-14 14:49:41','YYYY-MM-DD HH24:MI:SS'),100,'Product identifier','U',0,'The product to copy from','Y','Y','Y','N','Product',10,TO_DATE('2010-06-14 14:49:41','YYYY-MM-DD HH24:MI:SS'),100)
;
-- Jun 14, 2010 2:49:42 PM CEST
-- FR 3015882 - Copy process for product
INSERT INTO AD_Process_Para_Trl (AD_Language,AD_Process_Para_ID, Description,Help,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Process_Para_ID, t.Description,t.Help,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Process_Para t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Process_Para_ID=53410 AND NOT EXISTS (SELECT * FROM AD_Process_Para_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Process_Para_ID=t.AD_Process_Para_ID)
;
-- Jun 14, 2010 2:53:15 PM CEST
-- FR 3015882 - Copy process for product
INSERT INTO AD_Column (AD_Client_ID,AD_Column_ID,AD_Element_ID,AD_Org_ID,AD_Process_ID,AD_Reference_ID,AD_Table_ID,ColumnName,Created,CreatedBy,Description,EntityType,FieldLength,Help,IsActive,IsAllowLogging,IsAlwaysUpdateable,IsAutocomplete,IsEncrypted,IsIdentifier,IsKey,IsMandatory,IsParent,IsSelectionColumn,IsSyncDatabase,IsTranslated,IsUpdateable,Name,SeqNo,Updated,UpdatedBy,Version) VALUES (0,59231,2037,0,53206,28,208,'CopyFrom',TO_DATE('2010-06-14 14:53:14','YYYY-MM-DD HH24:MI:SS'),100,'Copy From Record','D',1,'Copy From Record','Y','Y','N','N','N','N','N','N','N','N','N','N','Y','Copy From',0,TO_DATE('2010-06-14 14:53:14','YYYY-MM-DD HH24:MI:SS'),100,1.000000000000)
;
-- Jun 14, 2010 2:53:15 PM CEST
-- FR 3015882 - Copy process for product
INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=59231 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
;
-- Jun 14, 2010 2:53:28 PM CEST
-- FR 3015882 - Copy process for product
ALTER TABLE M_Product ADD CopyFrom CHAR(1) DEFAULT NULL
;
-- Jun 14, 2010 2:58:52 PM CEST
-- FR 3015882 - Copy process for product
INSERT INTO AD_Field (AD_Client_ID,AD_Column_ID,AD_Field_ID,AD_Org_ID,AD_Tab_ID,Created,CreatedBy,Description,DisplayLength,EntityType,Help,IsActive,IsCentrallyMaintained,IsDisplayed,IsEncrypted,IsFieldOnly,IsHeading,IsReadOnly,IsSameLine,Name,SeqNo,SortNo,Updated,UpdatedBy) VALUES (0,59231,58973,0,180,TO_DATE('2010-06-14 14:58:51','YYYY-MM-DD HH24:MI:SS'),100,'Copy From Record',23,'D','Copy From Record','Y','Y','Y','N','N','N','N','N','Copy From',540,0,TO_DATE('2010-06-14 14:58:51','YYYY-MM-DD HH24:MI:SS'),100)
;
-- Jun 14, 2010 2:58:52 PM CEST
-- FR 3015882 - Copy process for product
INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Description,Help,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Field_ID, t.Description,t.Help,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=58973 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
;

View File

@ -0,0 +1,45 @@
-- Jun 14, 2010 2:48:57 PM CEST
-- FR 3015882 - Copy process for product
INSERT INTO AD_Process (AccessLevel,AD_Client_ID,AD_Org_ID,AD_Process_ID,Classname,CopyFromProcess,Created,CreatedBy,Description,EntityType,IsActive,IsBetaFunctionality,IsDirectPrint,IsReport,IsServerProcess,Name,ShowHelp,Statistic_Count,Statistic_Seconds,Updated,UpdatedBy,Value) VALUES ('1',0,0,53206,'org.compiere.process.CopyProduct','N',TO_TIMESTAMP('2010-06-14 14:48:55','YYYY-MM-DD HH24:MI:SS'),100,'Copy prices etc from other product','D','Y','N','N','N','N','Copy from product','Y',0,0,TO_TIMESTAMP('2010-06-14 14:48:55','YYYY-MM-DD HH24:MI:SS'),100,'M_Product CopyFrom')
;
-- Jun 14, 2010 2:48:57 PM CEST
-- FR 3015882 - Copy process for product
INSERT INTO AD_Process_Trl (AD_Language,AD_Process_ID, Description,Help,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Process_ID, t.Description,t.Help,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Process t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Process_ID=53206 AND NOT EXISTS (SELECT * FROM AD_Process_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Process_ID=t.AD_Process_ID)
;
-- Jun 14, 2010 2:49:42 PM CEST
-- FR 3015882 - Copy process for product
INSERT INTO AD_Process_Para (AD_Client_ID,AD_Element_ID,AD_Org_ID,AD_Process_ID,AD_Process_Para_ID,AD_Reference_ID,ColumnName,Created,CreatedBy,Description,EntityType,FieldLength,Help,IsActive,IsCentrallyMaintained,IsMandatory,IsRange,Name,SeqNo,Updated,UpdatedBy) VALUES (0,454,0,53206,53410,30,'M_Product_ID',TO_TIMESTAMP('2010-06-14 14:49:41','YYYY-MM-DD HH24:MI:SS'),100,'Product identifier','U',0,'The product to copy from','Y','Y','Y','N','Product',10,TO_TIMESTAMP('2010-06-14 14:49:41','YYYY-MM-DD HH24:MI:SS'),100)
;
-- Jun 14, 2010 2:49:42 PM CEST
-- FR 3015882 - Copy process for product
INSERT INTO AD_Process_Para_Trl (AD_Language,AD_Process_Para_ID, Description,Help,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Process_Para_ID, t.Description,t.Help,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Process_Para t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Process_Para_ID=53410 AND NOT EXISTS (SELECT * FROM AD_Process_Para_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Process_Para_ID=t.AD_Process_Para_ID)
;
-- Jun 14, 2010 2:53:15 PM CEST
-- FR 3015882 - Copy process for product
INSERT INTO AD_Column (AD_Client_ID,AD_Column_ID,AD_Element_ID,AD_Org_ID,AD_Process_ID,AD_Reference_ID,AD_Table_ID,ColumnName,Created,CreatedBy,Description,EntityType,FieldLength,Help,IsActive,IsAllowLogging,IsAlwaysUpdateable,IsAutocomplete,IsEncrypted,IsIdentifier,IsKey,IsMandatory,IsParent,IsSelectionColumn,IsSyncDatabase,IsTranslated,IsUpdateable,Name,SeqNo,Updated,UpdatedBy,Version) VALUES (0,59231,2037,0,53206,28,208,'CopyFrom',TO_TIMESTAMP('2010-06-14 14:53:14','YYYY-MM-DD HH24:MI:SS'),100,'Copy From Record','D',1,'Copy From Record','Y','Y','N','N','N','N','N','N','N','N','N','N','Y','Copy From',0,TO_TIMESTAMP('2010-06-14 14:53:14','YYYY-MM-DD HH24:MI:SS'),100,1.000000000000)
;
-- Jun 14, 2010 2:53:15 PM CEST
-- FR 3015882 - Copy process for product
INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=59231 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
;
-- Jun 14, 2010 2:53:29 PM CEST
-- FR 3015882 - Copy process for product
ALTER TABLE M_Product ADD COLUMN CopyFrom CHAR(1) DEFAULT NULL
;
-- Jun 14, 2010 2:58:52 PM CEST
-- FR 3015882 - Copy process for product
INSERT INTO AD_Field (AD_Client_ID,AD_Column_ID,AD_Field_ID,AD_Org_ID,AD_Tab_ID,Created,CreatedBy,Description,DisplayLength,EntityType,Help,IsActive,IsCentrallyMaintained,IsDisplayed,IsEncrypted,IsFieldOnly,IsHeading,IsReadOnly,IsSameLine,Name,SeqNo,SortNo,Updated,UpdatedBy) VALUES (0,59231,58973,0,180,TO_TIMESTAMP('2010-06-14 14:58:51','YYYY-MM-DD HH24:MI:SS'),100,'Copy From Record',23,'D','Copy From Record','Y','Y','Y','N','N','N','N','N','Copy From',540,0,TO_TIMESTAMP('2010-06-14 14:58:51','YYYY-MM-DD HH24:MI:SS'),100)
;
-- Jun 14, 2010 2:58:52 PM CEST
-- FR 3015882 - Copy process for product
INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Description,Help,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Field_ID, t.Description,t.Help,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=58973 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
;