Closed. This question needs to be more
focused。它当前不接受答案。
想改善这个问题吗?更新问题,使其仅通过
editing this post专注于一个问题。
2年前关闭。
Improve this question
我需要创建某种转移单(就像交货单一样),当库存从一个仓库转移到另一个仓库时,该转移单具有转移编号(例如,转移#TR000008)(库存>库存管理->操作>转移)股票)。
我想在“库存移动”列中显示转移编号(例如,#TR000008)。
并且,如果可能的话,我想将标签从“转移到另一个仓库”更改为“转移到[这里的仓库名称]”。
有什么办法可以破解PrestaShop来完成上述任务?
非常感谢您的帮助。
更新:
如果1号太难了,也许只是告诉我一种在“库存调拨”表单中添加额外输入字段的方法,以便我可以手动输入调拨编号。
注意:
我真的需要帮助来获得完整的工作代码,也许基于
提供的方向@soulseekah。
PS:我正在使用Prestashop 1.5.2.0
尽管Prestashop在灵活性和扩展功能方面非常僵化,但您所要求的几乎是零零散散的JavaScript魔术(阅读:hacks)。
注意:我为此使用Prestashop 1.5.6.1,因此可能会有一些细微的差异。
假设条件
我假设您知道如何编写基本的Prestashop modules,使用Prestashop挂钩,设置模块安装和卸载操作以及使用数据库,使用jQuery。
准备?
股票转移
Prestashop中没有严格的股票转移概念。但是,您确实可以获得完整的库存运动历史记录,该历史记录存储在stock_mvt
表中,并由StockMvt
类提供支持。
这非常幸运,省去了创建和管理转帐表的麻烦。但是,它可能不太可靠。
列动作
AdminStockMvtController
呈现的“库存移动”屏幕没有任何钩子来更改列。因此,这将需要一些JavaScript操作。
注入JavaScript的标准方法是挂接到displayBackOfficeHeader
中。一旦您完成此操作,请插入一个JavaScript文件。
public function hookDisplayBackOfficeHeader() {
return '<script type="text/javascript" src="'.$this->_path.'transfers.js'.'"></script>';
}
额外栏
上面将包含您的脚本,该脚本与模块一起提供。该脚本可以使用jQuery更改列的外观和内容。
jQuery( '.table.stock_mvt thead tr:nth(0)' ).append( '<th>Transfer</th>' );
jQuery( '.table.stock_mvt thead tr:nth(1)' ).append( '<td></td>' );
奖励点,用于按新列进行排序,搜索和过滤。
标签
更改名称“转移到另一个仓库/从另一个仓库转移”很简单,不需要任何数据库调用。只需查看每一行,如果该列包含“ from”,则查看上一行并从Warehouse列获取名称。如果包含“至”,请看下一行。
显然,这将不适用于像这样的排序和过滤器。在这种情况下,您可以调用数据库以获取每个移动的仓库名称-请参阅下一节。
用户界面非常简单。但是,如何将转移单数据导入那里呢?困难的部分到了。
转移单据
就像我说的那样,移动数据可用并且可以很容易地以
AdminStockMvtController
相同的方式进行检索。
该表将需要数据库中的一些数据。您需要获取仓库之间移动的ID,这将是您的单据ID和所涉及的两个仓库的名称。
基本上,您需要通过查看
stock_mvt_reason_lang
表并找到连续的“ to”和“ from”原因对来找出传输对,这些对具有您感兴趣的
id_stock_mvt_reason
。在
stock_mvt
中查找,顺序为
stock_mvt_id
并在PHP或MySQL中将它们配对。
id_stock
将指向一个仓库,您可以在其中获得名称。基本上得到您需要的任何东西,并将连续的“ to”->“ from”动作配对作为转移。
发票ID可能应该是“至”运动或“自”运动的
id_stock_mvt
(选择并坚持)。这样,您将能够生成具有一个特定ID的发票,并找到转移中涉及的两个移动。
放在一起
因此,您要做的是在模块上抛出AJAX调用并返回所需的数据-传输单ID,向/从名称的传输等。一旦完成该调用,您只需根据需要将数据注入表中即可。转移将是生成您的发票的链接(请参阅下一部分)。
由于该表没有ID数据,因此您必须确保以正确的顺序返回结果,所以不要忘记考虑排序,限制和分页,以输出正确填充的有效载荷以注入到表中。您应该能够只发送传输数据对。
另外,您可以创建一个名为“股票转账”的新管理标签,在其中以纯净方式仅输出转账来输出表格。
PDF单
可以从
AdminPdfController
中派生PDF。您必须包括传输中的必要数据。至此,您已经找到了获取所有需要的数据以进行输出的正确方法。构建PDF很简单。
一旦生成器获得了转帐ID,您就可以在移动表中查找它,获取其对及其所有数据。可以想象,生成是即时发生的,单据从未存储在Prestashops中。您也不需要存储新的转移单。
总览
您的模块将需要包含的内容的快速概述:
基本模块代码(安装,卸载,挂钩注册)
已注册的
hookDisplayBackOfficeHeader
功能
一个对表数据进行AJAX请求的script.js文件
一个提供了一些参数的AJAX请求响应器,将返回发票ID,仓库名称
一个PDF控制器,可以从其中一个ID(
id_stock_mvt
)识别一对,并输出漂亮的票据供您打印
一些常规的安全措施,您不希望陌生人四处转账
结论
整个过程远非易事(甚至很难解释),可能要花几天的时间来实现基本功能,但是肯定有可能取得不同的(非常成功的)结果。
主要困难之一在于如何不显式地连接两个相关的机芯,而不是某些绑定转移ID,而是具有一个“至”机芯和一个“来自”机芯,它们之间的时间间隔很近,并且数量相同。
顺便说一句,维护核心分叉也是一种选择,您可以对核心进行最小的更改,这些更改可以轻松地与更新合并。就像在方便的地方添加钩子,将一个核心类替换为您自己的类等一样,这将使您受到的黑客攻击更少。
我将很乐意聊天并讨论上述方法的细节。节日快乐,祝您项目顺利!