Prestashop - 将库存转移到其他仓库时创建交货单

Gir*_*ldi 3 prestashop stock prestashop-1.5

  1. 将库存从一个仓库转移到另一个仓库(库存>库存管理 - > 操作>转移)时,我需要创建某种带有转移号码转移单(就像交货单一样)(例如转移#TR000008)股票).

  2. 我想在Stock Move 列中显示转移号码(例如#TR000008).

  3. 并且,如果可能的话,我想将LABEL"转移到另一个仓库"更改为"转移到[此处的仓库名称] ".

我有什么方法可以破解PrestaShop来做上述事情?

非常感谢帮助.

更新:

如果no.1太难了,也许只是给我一个在Stock Transfer表单中添加额外输入字段的方法,这样我就可以手动输入转移号码.

注意:

我真的需要帮助才能根据@soulseekah提供的方向获得完整的工作代码.

PS:我正在使用Prestashop 1.5.2.0

sou*_*kah 6

虽然Prestashop在灵活性方面非常严格并且扩展了它的功能,但你可以通过在这里和那里洒上一些JavaScript魔法(读取:hacks)来实现.

注意:我正在使用Prestashop 1.5.6.1,因此可能存在一些细微差别.

假设

我假设您知道如何编写基本的Prestashop模块,使用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>';
}
Run Code Online (Sandbox Code Playgroud)

额外的专栏

以上内容将包含随模块一起提供的脚本.此脚本可以使用jQuery来更改列的外观和内容.

jQuery( '.table.stock_mvt thead tr:nth(0)' ).append( '<th>Transfer</th>' );
jQuery( '.table.stock_mvt thead tr:nth(1)' ).append( '<td></td>' );
Run Code Online (Sandbox Code Playgroud)

通过新列进行排序,搜索和过滤的加分点.

标签

更改名称"转移到另一个仓库或从另一个仓库转移"很简单,不需要任何数据库调用.只需查看每一行,如果列包含"从"查看上一行并从"仓库"列中获取名称.如果它包含"to"查看下一行.

这显然不适用于那样的排序和过滤器.在这种情况下,您可以为数据库调用每个运动的仓库名称 - 请参阅下一节.

用户界面非常简单.但是如何获得转移单数据呢?这是困难的部分.

转移单数据

就像我说的那样,移动数据是可用的,并且可以很容易地以相同的方式检索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数据,因此您必须确保以正确的顺序返回结果,因此不要忘记考虑排序,限制和分页以输出正确的ordrdered有效负载以注入表中.您应该能够仅发送传输数据对.

或者,您可以创建一个名为"Stock Transfers"的新管理选项卡,您可以使用仅传输的干净方式输出表格.

PDF单据

PDF生成可以分叉AdminPdfController.您必须从转移中包含必要的数据.到目前为止,您已经发现了获取输出所需数据的正确方法.构建PDF非常简单.

一旦您的生成器获得了滑动ID,您就可以在移动表中查找它,获取它们的对和所有数据.你可以想象,动态的一代ocurrs,以及滑动从未存储在Prestashops中.您的新转帐单也不需要存储.

概观

快速概述模块需要包含的内容:

  • 基本模块代码(安装,卸载,挂钩注册)
  • 注册hookDisplayBackOfficeHeader功能
  • 一个script.js文件,它对表数据执行AJAX请求
  • 给出一些参数的AJAX请求响应器将返回滑动ID,仓库名称
  • 一个PDF控制器,可以从其中一个ID(id_stock_mvt)中识别出一对,并输出一个漂亮的单据供您打印
  • 一些传统的安全措施,你不希望陌生人在你的转移周围徘徊

结论

整个过程远非易事(即使解释起来也很困难),并且可能需要几天时间才能实现基本功能,但是当然可能会有不同的(非常成功的)结果.

其中一个主要困难在于两个相关的运动如何没有明确地联系起来,而不是一些有约束力的转移ID,你有一个"到"运动和一个"从"运动,它们之间的关闭时间和相同的数量.

顺便说一句,维护一个干净的核心分支也是一种选择,您可以对核心进行最小的更改,这些更改可以轻松地与更新合并.就像在方便的地方添加钩子一样,用一个核心类替换你自己的类等等.这样可以减少黑客攻击.

我很乐意聊聊并讨论上述方法的细节.祝您节日快乐,祝您好运!