diff --git a/db/db.sql b/db/db.sql
index 8470e56d7..76c97d398 100644
--- a/db/db.sql
+++ b/db/db.sql
@@ -1576,15 +1576,19 @@ INSERT INTO saltypes (st_id, salcode, salname, salshortname, disabled) VALUES(7,
INSERT INTO saltypes (st_id, salcode, salname, salshortname, disabled) VALUES(8, 300, 'ЕСВ', 'ЕСВ', 0);
-INSERT INTO options (optname, optvalue) VALUES('api', 'YTozOntzOjM6ImV4cCI7czowOiIiO3M6Mzoia2V5IjtzOjQ6InRlc3QiO3M6NToiYXR5cGUiO3M6MToiMSI7fQ==');
-INSERT INTO options (optname, optvalue) VALUES('common', 'YTozOTp7czo5OiJxdHlkaWdpdHMiO3M6MToiMCI7czo4OiJhbWRpZ2l0cyI7czoxOiIwIjtzOjEwOiJkYXRlZm9ybWF0IjtzOjU6ImQubS5ZIjtzOjExOiJwYXJ0aW9udHlwZSI7czoxOiIxIjtzOjY6InBob25lbCI7czoyOiIxMCI7czo2OiJwcmljZTEiO3M6MTg6ItCg0L7Qt9C00YDRltCx0L3QsCI7czo2OiJwcmljZTIiO3M6MTI6ItCe0L/RgtC+0LLQsCI7czo2OiJwcmljZTMiO3M6MDoiIjtzOjY6InByaWNlNCI7czowOiIiO3M6NjoicHJpY2U1IjtzOjA6IiI7czo4OiJkZWZwcmljZSI7czowOiIiO3M6ODoic2hvcG5hbWUiO3M6MDoiIjtzOjg6InRzX2JyZWFrIjtzOjI6IjYwIjtzOjg6InRzX3N0YXJ0IjtzOjU6IjA5OjAwIjtzOjY6InRzX2VuZCI7czo1OiIxODowMCI7czoxMToiY2hlY2tzbG9nYW4iO3M6MDoiIjtzOjExOiJhdXRvYXJ0aWNsZSI7aToxO3M6MTA6InVzZXNudW1iZXIiO3M6MToiMCI7czoxMDoidXNlc2Nhbm5lciI7aTowO3M6MTY6InVzZW1vYmlsZXNjYW5uZXIiO2k6MDtzOjk6InVzZWltYWdlcyI7aTowO3M6MTQ6InByaW50b3V0cXJjb2RlIjtpOjA7czoxNDoibm9jaGVja2FydGljbGUiO2k6MDtzOjE1OiJzaG93YWN0aXZldXNlcnMiO2k6MDtzOjg6InNob3djaGF0IjtpOjA7czoxMDoidXNlY2F0dHJlZSI7aTowO3M6OToidXNlYnJhbmNoIjtpOjA7czoxMDoibm9hbGxvd2ZpeiI7aTowO3M6MTA6ImFsbG93bWludXMiO2k6MDtzOjY6InVzZXZhbCI7aTowO3M6NjoiY2FwY2hhIjtpOjA7czo5OiJudW1iZXJ0dG4iO2k6MDtzOjk6InBheXR5cGVpbiI7czoxOiIwIjtzOjEwOiJwYXl0eXBlb3V0IjtzOjE6IjAiO3M6MTI6ImFsbG93bWludXNtZiI7aTowO3M6NzoiY2FzaGllciI7czowOiIiO3M6MTA6ImFjdHVhbGRhdGUiO2k6MTcwNDA2MDAwMDtzOjE0OiJzcHJlYWRkZWxpdmVyeSI7aTowO3M6MTE6ImJheWRlbGl2ZXJ5IjtpOjA7fQ==');
-INSERT INTO options (optname, optvalue) VALUES('discount', 'YToxODp7czo4OiJmaXJzdGJheSI7czoyOiIxMSI7czo2OiJib251czEiO3M6MzoiMS4xIjtzOjY6ImxldmVsMiI7czowOiIiO3M6NjoiYm9udXMyIjtzOjM6IjEuNCI7czo2OiJzdW1tYTEiO3M6MzoiMTAwIjtzOjY6InN1bW1hMiI7czo0OiIxMDAwIjtzOjY6ImJvbnVzMyI7czoxOiIzIjtzOjY6InN1bW1hMyI7czo0OiIzMDAwIjtzOjY6ImJvbnVzNCI7czoxOiI0IjtzOjY6InN1bW1hNCI7czo0OiI0MDAwIjtzOjU6ImRpc2MxIjtzOjE6IjEiO3M6MTA6ImRpc2NzdW1tYTEiO3M6MToiMCI7czo1OiJkaXNjMiI7czoxOiIzIjtzOjEwOiJkaXNjc3VtbWEyIjtzOjE6IjAiO3M6NToiZGlzYzMiO3M6MToiNyI7czoxMDoiZGlzY3N1bW1hMyI7czoxOiIwIjtzOjU6ImRpc2M0IjtzOjA6IiI7czoxMDoiZGlzY3N1bW1hNCI7czowOiIiO30=');
-INSERT INTO options (optname, optvalue) VALUES('food', 'YToxNTp7czo4OiJ3b3JrdHlwZSI7czoxOiIyIjtzOjk6InByaWNldHlwZSI7czo2OiJwcmljZTEiO3M6ODoiZGVsaXZlcnkiO2k6MTtzOjY6InRhYmxlcyI7aToxO3M6NDoicGFjayI7aToxO3M6NDoibWVudSI7aToxO3M6NDoibmFtZSI7czo2OiJkZGRkZGQiO3M6NToicGhvbmUiO3M6ODoiNTU1NTU1NTUiO3M6NjoidGltZXBuIjtzOjI6IjExIjtzOjY6InRpbWVzYSI7czowOiIiO3M6NjoidGltZXN1IjtzOjA6IiI7czoxMjoiZm9vZGJhc2VtZW51IjtzOjE6IjAiO3M6MTY6ImZvb2RiYXNlbWVudW5hbWUiO3M6MDoiIjtzOjk6ImZvb2RtZW51MiI7czoxOiIwIjtzOjEyOiJmb29kbWVudW5hbWUiO3M6MDoiIjt9');
-INSERT INTO options (optname, optvalue) VALUES('printer', 'YTo3OntzOjg6InBtYXhuYW1lIjtzOjE6IjciO3M6OToicHJpY2V0eXBlIjtzOjY6InByaWNlMSI7czoxMToiYmFyY29kZXR5cGUiO3M6NDoiQzEyOCI7czo2OiJwcHJpY2UiO2k6MTtzOjU6InBjb2RlIjtpOjE7czo4OiJwYmFyY29kZSI7aToxO3M6NzoicHFyY29kZSI7aTowO30=');
-INSERT INTO options (optname, optvalue) VALUES('salary', 'YTo1OntzOjEzOiJjb2RlYmFzZWluY29tIjtzOjM6IjEwNSI7czoxMDoiY29kZXJlc3VsdCI7czozOiI5MDAiO3M6NDoiY2FsYyI7czoyMTk6InYyMDAgPSB2MTA1DQovL9C');
-INSERT INTO options (optname, optvalue) VALUES('shop', 'YToyMDp7czo3OiJkZWZjdXN0IjtzOjE6IjEiO3M6MTE6ImRlZmN1c3RuYW1lIjtzOjI5OiLQm9C10L7QvdC40LQg0JzQsNGA0YLRi9C90Y7QuiI7czo5OiJkZWZicmFuY2giO047czo5OiJvcmRlcnR5cGUiO3M6MToiMCI7czoxMjoiZGVmcHJpY2V0eXBlIjtzOjY6InByaWNlMSI7czo1OiJlbWFpbCI7czowOiIiO3M6ODoic2hvcG5hbWUiO3M6MTc6ItCd0LDRiCDQvNCw0LPQsNC3IjtzOjEyOiJjdXJyZW5jeW5hbWUiO3M6Njoi0YDRg9CxIjtzOjg6InVzZWxvZ2luIjtpOjA7czo5OiJ1c2VmaWx0ZXIiO2k6MDtzOjEzOiJjcmVhdGVuZXdjdXN0IjtpOjA7czoxMToidXNlZmVlZGJhY2siO2k6MDtzOjExOiJ1c2VtYWlucGFnZSI7aTowO3M6NzoiYWJvdXR1cyI7czoxNjoiUEhBK1BHSnlQand2Y0Q0PSI7czo3OiJjb250YWN0IjtzOjA6IiI7czo4OiJkZWxpdmVyeSI7czowOiIiO3M6NDoibmV3cyI7czowOiIiO3M6NToicGFnZXMiO2E6Mjp7czo0OiJuZXdzIjtPOjEyOiJBcHBcRGF0YUl0ZW0iOjI6e3M6MjoiaWQiO047czo5OiIAKgBmaWVsZHMiO2E6NDp7czo0OiJsaW5rIjtzOjQ6Im5ld3MiO3M6NToidGl0bGUiO3M6MTE6Imtra3JycnJycnJyIjtzOjU6Im9yZGVyIjtzOjE6IjIiO3M6NDoidGV4dCI7czoyNDoiUEhBK1pXVmxaV1ZsWldWbFBDOXdQZz09Ijt9fXM6ODoiYWJvdXRfdXMiO086MTI6IkFwcFxEYXRhSXRlbSI6Mjp7czoyOiJpZCI7TjtzOjk6IgAqAGZpZWxkcyI7YTo0OntzOjQ6ImxpbmsiO3M6ODoiYWJvdXRfdXMiO3M6NToidGl0bGUiO3M6OToi0J4g0L3QsNGBIjtzOjU6Im9yZGVyIjtzOjE6IjMiO3M6NDoidGV4dCI7czozMjoiUEhBK1BHSSswSjRnMEwzUXNOR0JQQzlpUGp3dmNEND0iO319fXM6NToicGhvbmUiO3M6MDoiIjtzOjEwOiJzYWxlc291cmNlIjtzOjE6IjAiO30=');
-INSERT INTO options (optname, optvalue) VALUES('val', 'YToyOntzOjc6InZhbGxpc3QiO2E6MTp7aToxNjQyNjc1OTU1O086MTI6IkFwcFxEYXRhSXRlbSI6Mjp7czoyOiJpZCI7aToxNjQyNjc1OTU1O3M6OToiACoAZmllbGRzIjthOjM6e3M6NDoiY29kZSI7czozOiJVU0QiO3M6NDoibmFtZSI7czoxMDoi0JTQvtC70LDRgCI7czo0OiJyYXRlIjtzOjI6IjYwIjt9fX1zOjg6InZhbHByaWNlIjtpOjE7fQ==');
-INSERT INTO options (optname, optvalue) VALUES('version', '6.12.0');
+INSERT INTO `options` (`optname`, `optvalue`) VALUES('api', 'YTozOntzOjM6ImV4cCI7czowOiIiO3M6Mzoia2V5IjtzOjQ6InRlc3QiO3M6NToiYXR5cGUiO3M6MToiMSI7fQ==');
+INSERT INTO `options` (`optname`, `optvalue`) VALUES('common', 'YTo0Mjp7czo5OiJxdHlkaWdpdHMiO3M6MToiMCI7czo4OiJhbWRpZ2l0cyI7czoxOiIwIjtzOjEwOiJkYXRlZm9ybWF0IjtzOjU6ImQubS5ZIjtzOjExOiJwYXJ0aW9udHlwZSI7czoxOiIxIjtzOjY6InBob25lbCI7czoyOiIxMCI7czo2OiJwcmljZTEiO3M6MTg6ItCg0L7Qt9C00YDRltCx0L3QsCI7czo2OiJwcmljZTIiO3M6MTI6ItCe0L/RgtC+0LLQsCI7czo2OiJwcmljZTMiO3M6MDoiIjtzOjY6InByaWNlNCI7czowOiIiO3M6NjoicHJpY2U1IjtzOjA6IiI7czo4OiJkZWZwcmljZSI7czowOiIiO3M6ODoic2hvcG5hbWUiO3M6MDoiIjtzOjg6InRzX2JyZWFrIjtzOjI6IjYwIjtzOjg6InRzX3N0YXJ0IjtzOjU6IjA5OjAwIjtzOjY6InRzX2VuZCI7czo1OiIxODowMCI7czoxMToiY2hlY2tzbG9nYW4iO3M6MDoiIjtzOjExOiJhdXRvYXJ0aWNsZSI7aToxO3M6MTA6InVzZXNudW1iZXIiO3M6MToiMCI7czoxMDoidXNlc2Nhbm5lciI7aTowO3M6MTY6InVzZW1vYmlsZXNjYW5uZXIiO2k6MDtzOjk6InVzZWltYWdlcyI7aTowO3M6MTQ6InByaW50b3V0cXJjb2RlIjtpOjA7czoxNDoibm9jaGVja2FydGljbGUiO2k6MDtzOjE1OiJzaG93YWN0aXZldXNlcnMiO2k6MDtzOjg6InNob3djaGF0IjtpOjA7czoxMDoidXNlY2F0dHJlZSI7aTowO3M6OToidXNlYnJhbmNoIjtpOjA7czoxMDoibm9hbGxvd2ZpeiI7aTowO3M6MTA6ImFsbG93bWludXMiO2k6MDtzOjY6InVzZXZhbCI7aTowO3M6NjoiY2FwY2hhIjtpOjA7czo5OiJudW1iZXJ0dG4iO2k6MDtzOjk6InBheXR5cGVpbiI7czoxOiIwIjtzOjEwOiJwYXl0eXBlb3V0IjtzOjE6IjAiO3M6MTI6ImFsbG93bWludXNtZiI7aTowO3M6NzoiY2FzaGllciI7czowOiIiO3M6MTA6ImFjdHVhbGRhdGUiO2k6MTcwNDA2MDAwMDtzOjE0OiJzcHJlYWRkZWxpdmVyeSI7aTowO3M6MTE6ImJheWRlbGl2ZXJ5IjtpOjA7czo4OiJub3VwZGF0ZSI7aTowO3M6NzoiY2hlY2tpcCI7aTowO3M6NjoiaXBsaXN0IjtzOjA6IiI7fQ==');
+INSERT INTO `options` (`optname`, `optvalue`) VALUES('discount', 'YToxODp7czo4OiJmaXJzdGJheSI7czoyOiIxMSI7czo2OiJib251czEiO3M6MzoiMS4xIjtzOjY6ImxldmVsMiI7czowOiIiO3M6NjoiYm9udXMyIjtzOjM6IjEuNCI7czo2OiJzdW1tYTEiO3M6MzoiMTAwIjtzOjY6InN1bW1hMiI7czo0OiIxMDAwIjtzOjY6ImJvbnVzMyI7czoxOiIzIjtzOjY6InN1bW1hMyI7czo0OiIzMDAwIjtzOjY6ImJvbnVzNCI7czoxOiI0IjtzOjY6InN1bW1hNCI7czo0OiI0MDAwIjtzOjU6ImRpc2MxIjtzOjE6IjEiO3M6MTA6ImRpc2NzdW1tYTEiO3M6MToiMCI7czo1OiJkaXNjMiI7czoxOiIzIjtzOjEwOiJkaXNjc3VtbWEyIjtzOjE6IjAiO3M6NToiZGlzYzMiO3M6MToiNyI7czoxMDoiZGlzY3N1bW1hMyI7czoxOiIwIjtzOjU6ImRpc2M0IjtzOjA6IiI7czoxMDoiZGlzY3N1bW1hNCI7czowOiIiO30=');
+INSERT INTO `options` (`optname`, `optvalue`) VALUES('food', 'YToxNTp7czo4OiJ3b3JrdHlwZSI7czoxOiIyIjtzOjk6InByaWNldHlwZSI7czo2OiJwcmljZTEiO3M6ODoiZGVsaXZlcnkiO2k6MTtzOjY6InRhYmxlcyI7aToxO3M6NDoicGFjayI7aToxO3M6NDoibWVudSI7aToxO3M6NDoibmFtZSI7czo2OiJkZGRkZGQiO3M6NToicGhvbmUiO3M6ODoiNTU1NTU1NTUiO3M6NjoidGltZXBuIjtzOjI6IjExIjtzOjY6InRpbWVzYSI7czowOiIiO3M6NjoidGltZXN1IjtzOjA6IiI7czoxMjoiZm9vZGJhc2VtZW51IjtzOjE6IjAiO3M6MTY6ImZvb2RiYXNlbWVudW5hbWUiO3M6MDoiIjtzOjk6ImZvb2RtZW51MiI7czoxOiIwIjtzOjEyOiJmb29kbWVudW5hbWUiO3M6MDoiIjt9');
+INSERT INTO `options` (`optname`, `optvalue`) VALUES('modules', 'YToxMjp7czo3OiJvY3N0b3JlIjtpOjA7czo0OiJzaG9wIjtpOjA7czoxMDoid29vY29tZXJjZSI7aTowO3M6MjoibnAiO2k6MDtzOjY6InByb211YSI7aTowO3M6ODoiaG9yb3Nob3AiO2k6MDtzOjQ6InZkb2MiO2k6MDtzOjU6Imlzc3VlIjtpOjA7czo0OiJub3RlIjtpOjA7czozOiJwcG8iO2k6MDtzOjg6ImNoZWNrYm94IjtpOjA7czo2OiJ2a2Fzc2EiO2k6MDt9');
+INSERT INTO `options` (`optname`, `optvalue`) VALUES('printer', 'YTo3OntzOjg6InBtYXhuYW1lIjtzOjE6IjciO3M6OToicHJpY2V0eXBlIjtzOjY6InByaWNlMSI7czoxMToiYmFyY29kZXR5cGUiO3M6NDoiQzEyOCI7czo2OiJwcHJpY2UiO2k6MTtzOjU6InBjb2RlIjtpOjE7czo4OiJwYmFyY29kZSI7aToxO3M6NzoicHFyY29kZSI7aTowO30=');
+INSERT INTO `options` (`optname`, `optvalue`) VALUES('salary', 'YTo1OntzOjEzOiJjb2RlYmFzZWluY29tIjtzOjM6IjEwNSI7czoxMDoiY29kZXJlc3VsdCI7czozOiI5MDAiO3M6NDoiY2FsYyI7czoyMTk6InYyMDAgPSB2MTA1DQovL9C');
+INSERT INTO `options` (`optname`, `optvalue`) VALUES('shop', 'YToyMDp7czo3OiJkZWZjdXN0IjtzOjE6IjEiO3M6MTE6ImRlZmN1c3RuYW1lIjtzOjI5OiLQm9C10L7QvdC40LQg0JzQsNGA0YLRi9C90Y7QuiI7czo5OiJkZWZicmFuY2giO047czo5OiJvcmRlcnR5cGUiO3M6MToiMCI7czoxMjoiZGVmcHJpY2V0eXBlIjtzOjY6InByaWNlMSI7czo1OiJlbWFpbCI7czowOiIiO3M6ODoic2hvcG5hbWUiO3M6MTc6ItCd0LDRiCDQvNCw0LPQsNC3IjtzOjEyOiJjdXJyZW5jeW5hbWUiO3M6Njoi0YDRg9CxIjtzOjg6InVzZWxvZ2luIjtpOjA7czo5OiJ1c2VmaWx0ZXIiO2k6MDtzOjEzOiJjcmVhdGVuZXdjdXN0IjtpOjA7czoxMToidXNlZmVlZGJhY2siO2k6MDtzOjExOiJ1c2VtYWlucGFnZSI7aTowO3M6NzoiYWJvdXR1cyI7czoxNjoiUEhBK1BHSnlQand2Y0Q0PSI7czo3OiJjb250YWN0IjtzOjA6IiI7czo4OiJkZWxpdmVyeSI7czowOiIiO3M6NDoibmV3cyI7czowOiIiO3M6NToicGFnZXMiO2E6Mjp7czo0OiJuZXdzIjtPOjEyOiJBcHBcRGF0YUl0ZW0iOjI6e3M6MjoiaWQiO047czo5OiIAKgBmaWVsZHMiO2E6NDp7czo0OiJsaW5rIjtzOjQ6Im5ld3MiO3M6NToidGl0bGUiO3M6MTE6Imtra3JycnJycnJyIjtzOjU6Im9yZGVyIjtzOjE6IjIiO3M6NDoidGV4dCI7czoyNDoiUEhBK1pXVmxaV1ZsWldWbFBDOXdQZz09Ijt9fXM6ODoiYWJvdXRfdXMiO086MTI6IkFwcFxEYXRhSXRlbSI6Mjp7czoyOiJpZCI7TjtzOjk6IgAqAGZpZWxkcyI7YTo0OntzOjQ6ImxpbmsiO3M6ODoiYWJvdXRfdXMiO3M6NToidGl0bGUiO3M6OToi0J4g0L3QsNGBIjtzOjU6Im9yZGVyIjtzOjE6IjMiO3M6NDoidGV4dCI7czozMjoiUEhBK1BHSSswSjRnMEwzUXNOR0JQQzlpUGp3dmNEND0iO319fXM6NToicGhvbmUiO3M6MDoiIjtzOjEwOiJzYWxlc291cmNlIjtzOjE6IjAiO30=');
+INSERT INTO `options` (`optname`, `optvalue`) VALUES('sms', 'YToxMTp7czoxMjoic21zY2x1YnRva2VuIjtzOjA6IiI7czoxMjoic21zY2x1YmxvZ2luIjtzOjA6IiI7czoxMToic21zY2x1YnBhc3MiO3M6MDoiIjtzOjk6InNtc2NsdWJhbiI7czowOiIiO3M6MTA6InNtc2NsdWJ2YW4iO3M6MDoiIjtzOjEyOiJzbXNzZW15dG9rZW4iO3M6MDoiIjtzOjEyOiJzbXNzZW15ZGV2aWQiO3M6MDoiIjtzOjExOiJmbHlzbXNsb2dpbiI7czowOiIiO3M6MTA6ImZseXNtc3Bhc3MiO3M6MDoiIjtzOjg6ImZseXNtc2FuIjtzOjA6IiI7czo3OiJzbXN0eXBlIjtzOjE6IjAiO30=');
+INSERT INTO `options` (`optname`, `optvalue`) VALUES('val', 'YToyOntzOjc6InZhbGxpc3QiO2E6MTp7aToxNjQyNjc1OTU1O086MTI6IkFwcFxEYXRhSXRlbSI6Mjp7czoyOiJpZCI7aToxNjQyNjc1OTU1O3M6OToiACoAZmllbGRzIjthOjM6e3M6NDoiY29kZSI7czozOiJVU0QiO3M6NDoibmFtZSI7czoxMDoi0JTQvtC70LDRgCI7czo0OiJyYXRlIjtzOjI6IjYwIjt9fX1zOjg6InZhbHByaWNlIjtpOjE7fQ==');
+INSERT INTO `options` (`optname`, `optvalue`) VALUES('version', '6.12.0');
+
+
diff --git a/www/app/entity/category.php b/www/app/entity/category.php
index 62aae6dc3..763be912a 100644
--- a/www/app/entity/category.php
+++ b/www/app/entity/category.php
@@ -22,7 +22,7 @@ protected function init() {
protected function afterLoad() {
- \App\Helper::log($this->detail);
+
$xml = @simplexml_load_string($this->detail);
$this->price1 = (string)($xml->price1[0]);
diff --git a/www/app/entity/doc/order.php b/www/app/entity/doc/order.php
index b94a5149b..11c09e944 100644
--- a/www/app/entity/doc/order.php
+++ b/www/app/entity/doc/order.php
@@ -239,7 +239,6 @@ public function reserve() {
}
}
-
}
//отмена резерва
public function unreserve() {
@@ -301,5 +300,34 @@ public function DoBalans() {
}
}
-
+ /**
+ * список неотправленных позиций
+ *
+ */
+ public function getNotSendedItem() {
+ $notsendqty=[];
+ $sendqty=[];
+ $notsend=0;
+ $docs= Document::find("state >=5 and meta_name in ('GoodsIssue','TTN') and parent_id=". $this->document_id);
+ foreach($docs as $d) {
+ foreach($d->unpackDetails('detaildata') as $item){
+ if(!isset($sendqty[$item->item_id]) ) $sendqty[$item->item_id]=0;
+
+ $sendqty[$item->item_id] += $item->quantity;
+ }
+ }
+ foreach($this->unpackDetails('detaildata') as $item){
+ if(($sendqty[$item->item_id] ?? 0) ==0) {
+ $notsend=$item->quantity;
+ } else {
+ $notsend=$item->quantity - $sendqty[$item->item_id];
+ }
+ if($notsend > 0) {
+ $notsendqty[$item->item_id] = $notsend;
+ }
+
+ }
+
+ return $notsendqty;
+ }
}
diff --git a/www/app/entity/doc/ordercust.php b/www/app/entity/doc/ordercust.php
index 537b78518..a54534f81 100644
--- a/www/app/entity/doc/ordercust.php
+++ b/www/app/entity/doc/ordercust.php
@@ -59,4 +59,35 @@ public function getRelationBased() {
return $list;
}
+
+ /**
+ * список неоприходованых позиций
+ *
+ */
+ public function getNotReceivedItems() :array{
+ $notrecqty=[];
+ $recqty=[];
+ $notrec=0;
+ $docs= Document::find("state >=5 and meta_name in ('GoodsReceipt') and parent_id=". $this->document_id);
+ foreach($docs as $d) {
+ foreach($d->unpackDetails('detaildata') as $item){
+ if(!isset($recqty[$item->item_id]) ) $recqty[$item->item_id]=0;
+
+ $recqty[$item->item_id] += $item->quantity;
+ }
+ }
+ foreach($this->unpackDetails('detaildata') as $item){
+ if(($recqty[$item->item_id] ?? 0) ==0) {
+ $notrec=$item->quantity;
+ } else {
+ $notrec=$item->quantity - $recqty[$item->item_id];
+ }
+ if($notrec > 0) {
+ $notrecqty[$item->item_id]= $notrec;
+ }
+
+ }
+
+ return $notrecqty;
+ }
}
diff --git a/www/app/entity/doc/ttn.php b/www/app/entity/doc/ttn.php
index 65a3779c7..13e04481a 100644
--- a/www/app/entity/doc/ttn.php
+++ b/www/app/entity/doc/ttn.php
@@ -275,25 +275,7 @@ public function onState($state, $oldstate) {
}
}
- $common = \App\System::getOptions("common");
-
- if ($this->parent_id > 0) {
- $order = Document::load($this->parent_id);
-
- $list = $order->getChildren('TTN');
-
- if (count($list) == 1 && $common['numberttn'] <> 1) { //только эта ТТН
- if ($state == Document::STATE_DELIVERED && ($order->state == Document::STATE_INSHIPMENT || $order->state == Document::STATE_READYTOSHIP || $order->state == Document::STATE_INPROCESS)) {
- $order->updateStatus(Document::STATE_DELIVERED);
- }
- if ($state == Document::STATE_INSHIPMENT && ($order->state == Document::STATE_INPROCESS || $order->state == Document::STATE_READYTOSHIP)) {
- $order->updateStatus(Document::STATE_INSHIPMENT);
- }
- if ($state == Document::STATE_READYTOSHIP && $order->state == Document::STATE_INPROCESS) {
- $order->updateStatus(Document::STATE_READYTOSHIP);
- }
- }
- }
+
}
public function getRelationBased() {
diff --git a/www/app/entity/entry.php b/www/app/entity/entry.php
index 36fb54784..3928cc37c 100644
--- a/www/app/entity/entry.php
+++ b/www/app/entity/entry.php
@@ -78,7 +78,7 @@ public static function getQuantity($date = 0, $stock = 0, $customer = 0, $emp =
$conn = \ZDB\DB::getConnect();
$where = " 1=1";
if ($date > 0) {
- $where = $where . " date(document_date) <= " . $conn->DBDate($date);
+ $where = $where . " document_date <= " . $conn->DBDate($date);
}
if ($emp > 0) {
@@ -109,7 +109,7 @@ public static function getAmount($date = 0, $stock = 0, $customer = 0, $emp = 0)
$conn = \ZDB\DB::getConnect();
$where = " 1=1";
if ($date > 0) {
- $where = $where . " and date(document_date) <= " . $conn->DBDate($date);
+ $where = $where . " and document_date <= " . $conn->DBDate($date);
}
if ($emp > 0) {
diff --git a/www/app/entity/stock.php b/www/app/entity/stock.php
index 4b0a4624a..5f696706c 100644
--- a/www/app/entity/stock.php
+++ b/www/app/entity/stock.php
@@ -118,7 +118,7 @@ public static function getQuantity($stock_id, $date = null) {
$stock = Stock::load($stock_id);
if ($date > 0) {
$conn = \ZDB\DB::getConnect();
- $where = " stock_id = {$stock_id} and date(document_date) <= " . $conn->DBDate($date);
+ $where = " stock_id = {$stock_id} and document_date <= " . $conn->DBDate($date);
$sql = " select coalesce(sum(quantity),0) AS quantity from entrylist_view where " . $where;
return $conn->GetOne($sql);
} else {
diff --git a/www/app/entity/subscribe.php b/www/app/entity/subscribe.php
index dc18ca43f..2a2c686e5 100644
--- a/www/app/entity/subscribe.php
+++ b/www/app/entity/subscribe.php
@@ -296,7 +296,7 @@ private function sendmsg($text, $options=[]){
$ret = self::sendSMS($options['phone'], $text);
}
if (strlen($options['email']) > 0 && $this->msg_type == self::MSG_EMAIL) {
-
+ // отправляем в очередь если включен планировщик
if(System::useCron()) {
$task = new \App\Entity\CronTask();
$task->tasktype=\App\Entity\CronTask::TYPE_SUBSEMAIL;
diff --git a/www/app/modules/note/entity/topic.php b/www/app/modules/note/entity/topic.php
index f65ed1b8d..2537bc3b5 100644
--- a/www/app/modules/note/entity/topic.php
+++ b/www/app/modules/note/entity/topic.php
@@ -17,27 +17,40 @@ protected function init() {
protected function beforeSave() {
parent::beforeSave();
- //упаковываем данные в detail
+
+ /*
$this->content = "";
$this->detail = base64_encode($this->detail) ;
$this->content .= "{$this->detail} ";
$this->content .= "1 ";
$this->content .= "{$this->updatedon} ";
$this->content .= " ";
-
- return true;
+ */
+
+ $content=[] ;
+ $content['detail'] =$this->detail ;
+ $content['updatedon'] =$this->updatedon ;
+ $this->content = serialize($content) ;
+
}
protected function afterLoad() {
- //распаковываем данные из detail
- $xml = @simplexml_load_string($this->content);
-
- $this->detail = (string)($xml->detail[0]);
- $this->isbasa64 = (int)($xml->isbasa64[0]);
- if($this->isbasa64==1) {
- $this->detail = base64_decode($this->detail) ;
+
+ if(strpos($this->content,'') ===0 ) {
+ $xml = @simplexml_load_string($this->content);
+
+ $this->detail = (string)($xml->detail[0]);
+ $this->isbasa64 = (int)($xml->isbasa64[0]);
+ if($this->isbasa64==1) {
+ $this->detail = base64_decode($this->detail) ;
+ }
+ $this->updatedon = (int)($xml->updatedon[0]);
+ } else {
+ $content = unserialize($this->content) ;
+ $this->updatedon = $content['updatedon'] ;
+ $this->detail = $content['detail'] ;
}
- $this->updatedon = (int)($xml->updatedon[0]);
+
parent::afterLoad();
}
diff --git a/www/app/modules/ocstore/orders.php b/www/app/modules/ocstore/orders.php
index 864cf8a3a..1aee00aef 100644
--- a/www/app/modules/ocstore/orders.php
+++ b/www/app/modules/ocstore/orders.php
@@ -92,7 +92,7 @@ public function filterOnSubmit($sender) {
foreach ($data['orders'] as $ocorder) {
- $cnt = $conn->getOne("select count(*) from documents_view where (meta_name='Order' or meta_name='TTN') and content like '%{$ocorder['order_id']} %'") ;
+ $cnt = $conn->getOne("select count(*) from documents_view where (meta_name='Order' or meta_name='TTN') and content like '%{$ocorder['order_id']} %' and (CURRENT_DATE - INTERVAL 1 MONTH) < document_date ") ;
if (intval($cnt) > 0) { //уже импортирован
continue;
diff --git a/www/app/modules/shop/pages/admin/dashboard.php b/www/app/modules/shop/pages/admin/dashboard.php
index 7400ad6da..9e75edc5d 100644
--- a/www/app/modules/shop/pages/admin/dashboard.php
+++ b/www/app/modules/shop/pages/admin/dashboard.php
@@ -85,8 +85,8 @@ public function updateGraph() {
$this->_tvars['ord'] = json_encode($ord);
$sql = " content LIKE '%1 %' " ;
- $sql .= " and date(document_date) <= " . $conn->DBDAte(time());
- $sql .= " and date(document_date) > " . $conn->DBDAte(strtotime("- 30 day", time()));
+ $sql .= " and (document_date) <= " . $conn->DBDAte(time());
+ $sql .= " and (document_date) > " . $conn->DBDAte(strtotime("- 30 day", time()));
$items = array();
$cats = array();
@@ -151,7 +151,7 @@ public function updateGraph() {
$sql = " state in (9,10,20) and
content LIKE '%1 %'
- and date(document_date) <= {$to} and date(document_date) > {$from} " ;
+ and (document_date) <= {$to} and (document_date) > {$from} " ;
$docs = \App\Entity\Doc\Document::find($sql);
diff --git a/www/app/modules/wc/items.php b/www/app/modules/wc/items.php
index 5d00e4efc..340854785 100644
--- a/www/app/modules/wc/items.php
+++ b/www/app/modules/wc/items.php
@@ -174,9 +174,7 @@ public function onUpdateQty($sender) {
return;
}
$c = count($data);
-
- \App\Helper::log($page*$c);
-
+
if ($c == 0) {
break;
}
diff --git a/www/app/modules/wc/orders.php b/www/app/modules/wc/orders.php
index deb2af6ce..5ab18a97e 100644
--- a/www/app/modules/wc/orders.php
+++ b/www/app/modules/wc/orders.php
@@ -217,7 +217,7 @@ public function onImport($sender) {
public function onRefresh($sender) {
- $this->_eorders = Document::find("meta_name='Order' and content like '%0 %' and state <> " . Document::STATE_NEW);
+ $this->_eorders = Document::find("meta_name='Order' and content like '%0 %' and (CURRENT_DATE - INTERVAL 1 MONTH) < document_date and state <> " . Document::STATE_NEW);
$this->updateform->orderslist->Reload();
}
diff --git a/www/app/pages/doc/goodsissue.php b/www/app/pages/doc/goodsissue.php
index 8d938977c..079b6cecb 100644
--- a/www/app/pages/doc/goodsissue.php
+++ b/www/app/pages/doc/goodsissue.php
@@ -190,22 +190,8 @@ public function __construct($docid = 0, $basedocid = 0) {
$notfound = array();
$order = $basedoc->cast();
- //проверяем что уже есть отправка
- $list = $order->getChildren('TTN');
-
- if (count($list) > 0 && $common['numberttn'] <> 1) {
-
- $this->setError('У замовлення вже є відправки');
- App::Redirect("\\App\\Pages\\Register\\GIList");
- return;
- }
- $list = $order->getChildren('GoodsIssue');
-
- if (count($list) > 0 && $common['numberttn'] <> 1) {
-
- $this->setError('У замовлення вже є відправки');
- App::Redirect("\\App\\Pages\\Register\\GIList");
- return;
+ if($order->getNotSendedItem() > 0){
+ $this->setWarn('Позиції по цьому замовленню вже відправлені') ;
}
$this->docform->total->setText(H::fa($order->amount));
diff --git a/www/app/pages/doc/goodsreceipt.php b/www/app/pages/doc/goodsreceipt.php
index 216186827..57c87f6d1 100644
--- a/www/app/pages/doc/goodsreceipt.php
+++ b/www/app/pages/doc/goodsreceipt.php
@@ -215,10 +215,24 @@ public function __construct($docid = 0, $basedocid = 0) {
$this->docform->customer->setText($basedoc->customer_name);
$this->docform->val->setValue(0);
$this->docform->rate->setText(1);
+ $this->docform->basedoc->setText($basedoc->document_number);
$order = $basedoc->cast();
- $this->docform->basedoc->setText($order->document_number);
- $this->_itemlist = $basedoc->unpackDetails('detaildata');
+ $nr=$order->getNotReceivedItems();
+ if(count($nr)==0) {
+ $this->setWarn('Всі позиції вже доставлені') ;
+ }
+ $this->_itemlist = [];
+
+ foreach($order->unpackDetails('detaildata') as $item){
+ if($nr[$item->item_id] ??0 > 0 ) {
+ $item->quantity = $nr[$item->item_id] ;
+ $this->_itemlist[] = $item;
+
+ }
+
+ }
+
$this->CalcTotal();
$this->CalcPay();
}
@@ -691,10 +705,7 @@ public function savedocOnClick($sender) {
}
$file = $this->docform->scan->getFile();
- if ($file['size'] > 10000000) {
- $this->setError("Файл більше 10 МБ!");
- return;
- }
+
if ($this->_doc->payed == 0) {
$this->_doc->headerdata['payment'] = 0;
@@ -733,16 +744,18 @@ public function savedocOnClick($sender) {
}
if ($this->_doc->parent_id > 0) { //закрываем заказ
- if ($this->_doc->payamount > 0 && $this->_doc->payamount > $this->_doc->payed) {
-
- } else {
$order = Document::load($this->_doc->parent_id);
- if ($order->meta_name =="OrderCust" && $order->state == Document::STATE_INPROCESS) {
- $order->updateStatus(Document::STATE_CLOSED);
-
- $this->setSuccess("Заявка {$order->document_number} закрита");
- }
- }
+
+ if ($order->meta_name =="OrderCust"){
+ $order = $order->cast();
+ $nr=$order->getNotReceivedItems();
+ if(count($nr)==0){ // все доставлено
+ if($order->state == Document::STATE_INPROCESS || $order->state == Document::STATE_INSHIPMENT ) {
+ $order->updateStatus(Document::STATE_DELIVERED);
+ }
+ }
+ }
+
}
//обновляем курс
diff --git a/www/app/pages/doc/ttn.php b/www/app/pages/doc/ttn.php
index 775bac194..36c2435df 100644
--- a/www/app/pages/doc/ttn.php
+++ b/www/app/pages/doc/ttn.php
@@ -190,26 +190,12 @@ public function __construct($docid = 0, $basedocid = 0) {
$notfound = array();
$order = $basedoc->cast();
- //проверяем что уже есть отправка
- $list = $order->getChildren('TTN');
-
- if (count($list) > 0 && $common['numberttn'] <> 1) {
-
- $this->setError('У замовлення вже є відправки');
- App::Redirect("\\App\\Pages\\Register\\GIList");
- return;
- }
- $list = $order->getChildren('GoodsIssue');
-
- if (count($list) > 0 && $common['numberttn'] <> 1) {
-
- $this->setError('У замовлення вже є відправки');
- App::Redirect("\\App\\Pages\\Register\\GIList");
- return;
+ if($order->getNotSendedItem() > 0){
+ $this->setWarn('Позиції по цьому замовленню вже відправлені') ;
}
+
$this->docform->total->setText($order->amount);
-
if($order->headerdata['store']>0) {
$this->docform->store->setValue($order->headerdata['store']);
diff --git a/www/app/pages/options.php b/www/app/pages/options.php
index 1a7274b3e..20eec489e 100644
--- a/www/app/pages/options.php
+++ b/www/app/pages/options.php
@@ -120,11 +120,7 @@ public function __construct() {
$this->business->add(new CheckBox('useval'));
$this->business->add(new CheckBox('printoutqrcode'));
-
-
- $this->business->add(new CheckBox('numberttn'));
-
-
+
$this->business->add(new CheckBox('spreaddelivery'));
$this->business->add(new CheckBox('baydelivery'));
@@ -150,7 +146,7 @@ public function __construct() {
$this->business->usesnumber->setValue($common['usesnumber']??0);
- $this->business->numberttn->setChecked($common['numberttn']);
+
$this->business->spreaddelivery->setChecked($common['spreaddelivery']);
$this->business->baydelivery->setChecked($common['baydelivery']);
@@ -411,8 +407,6 @@ public function saveBusinessOnClick($sender) {
$common['spreaddelivery'] = $this->business->spreaddelivery->isChecked() ? 1 : 0;
$common['baydelivery'] = $this->business->baydelivery->isChecked() ? 1 : 0;
- $common['numberttn'] = $this->business->numberttn->isChecked() ? 1 : 0;
-
System::setOptions("common", $common);
diff --git a/www/app/pages/register/grlist.php b/www/app/pages/register/grlist.php
index 015dd2ba4..fb5a7f6be 100644
--- a/www/app/pages/register/grlist.php
+++ b/www/app/pages/register/grlist.php
@@ -41,7 +41,7 @@ public function __construct() {
$this->filter->add(new TextInput('searchnumber'));
$this->filter->add(new TextInput('searchtext'));
- $this->filter->add(new DropDownChoice('status', array(0 => 'Відкриті', 1 => 'Не проведені', 2 => 'Не сплачені', 3 => 'Всі'), 0));
+ $this->filter->add(new DropDownChoice('status', array(0 => 'Відкриті', 1 => 'Не сплачені', 2 => 'Всі'), 0));
$this->filter->add(new DropDownChoice('searchcomp', Firm::findArray('firm_name', 'disabled<>1', 'firm_name'), 0));
$this->filter->add(new DropDownChoice('fstore', \App\Entity\Store::getList(), 0));
$this->filter->add(new AutocompleteTextInput('searchcust'))->onText($this, 'OnAutoCustomer');
@@ -243,16 +243,13 @@ private function getWhere() {
$status = $this->page->filter->status->getValue();
if ($status == 0) {
- $where .= " and ( (payamount > 0 and payamount > payed) or (state <>" . Document::STATE_EXECUTED . ")) ";
+ $where .= " and state >3 and state not in(14,5,9 ) ";
}
-
+
if ($status == 1) {
- $where .= " and state <>" . Document::STATE_EXECUTED;
+ $where .= " and state=". Document::STATE_WP;
}
if ($status == 2) {
- $where .= " and (payamount > 0 and payamount > payed)";
- }
- if ($status == 3) {
}
diff --git a/www/app/pages/register/officelist.php b/www/app/pages/register/officelist.php
index eb6d852a7..3ed63893d 100644
--- a/www/app/pages/register/officelist.php
+++ b/www/app/pages/register/officelist.php
@@ -531,10 +531,10 @@ private function getWhere() {
$to = $filterform->to->getDate();
if ($from > 0) {
- $where .= " and date(document_date) >= " . $conn->DBDate($from);
+ $where .= " and document_date >= " . $conn->DBDate($from);
}
if ($to > 0) {
- $where .= " and date(document_date) <= " . $conn->DBDate($to);
+ $where .= " and document_date <= " . $conn->DBDate($to);
}
diff --git a/www/app/pages/register/orderlist.php b/www/app/pages/register/orderlist.php
index f942ce41f..3b23d9fcb 100644
--- a/www/app/pages/register/orderlist.php
+++ b/www/app/pages/register/orderlist.php
@@ -521,19 +521,13 @@ public function updateStatusButtons() {
$this->statuspan->resform->setVisible(false);
}
- if (count($list) > 0 && $common['numberttn'] <> 1) {
- $this->statuspan->statusform->bttn->setVisible(false);
- }
+
$list = $this->_doc->getChildren('GoodsIssue');
if(count($list)>0) {
$this->statuspan->resform->setVisible(false);
}
-
- if (count($list) > 0 && $common['numberttn'] <> 1) {
- $this->statuspan->statusform->bgi->setVisible(false);
- }
-
+
if ($this->_doc->hasPayments()) {
$this->statuspan->statusform->bpos->setVisible(false);
@@ -957,7 +951,7 @@ private function getWhere() {
$conn = \ZDB\DB::getConnect();
$filter=$this->page->listpanel->filter;
- $where = " meta_name = 'Order' ";
+ $where = " meta_name = 'Order' and (CURRENT_DATE - INTERVAL 1 MONTH) < document_date ";
$salesource =$filter->salesource->getValue();
if ($salesource > 0) {
diff --git a/www/app/pages/register/paylist.php b/www/app/pages/register/paylist.php
index 8ff4c48e1..6535ad4a4 100644
--- a/www/app/pages/register/paylist.php
+++ b/www/app/pages/register/paylist.php
@@ -45,7 +45,8 @@ public function __construct() {
$this->add(new Form('filter'))->onSubmit($this, 'filterOnSubmit');
$this->filter->add(new DropDownChoice('fmfund', \App\Entity\MoneyFund::getList(), 0));
$this->filter->add(new DropDownChoice('fuser', \App\Entity\User::findArray('username', 'disabled<>1', 'username'), 0));
- $this->filter->add(new Date('from', time()));
+ $this->filter->add(new DropDownChoice('fsort', [], 0));
+ $this->filter->add(new Date('from', strtotime('-1 week')));
$this->filter->add(new Date('to', time()));
$this->filter->add(new AutocompleteTextInput('fcustomer'))->onText($this, 'OnAutoCustomer');
@@ -503,9 +504,18 @@ public function getItemCount() {
}
public function getItems($start=-1, $count=-1, $sortfield = null, $asc = null) {
+ $sort = $this->page->filter->fsort->getValue();
+ $order =" pl_id desc ";
+ if($sort==1) {
+ $order =" p.amount desc ";
+ }
+ if($sort==2) {
+ $order =" (0-p.amount) desc ";
+ }
+
$conn = \ZDB\DB::getConnect();
- $sql = "select p.*,d.customer_name,d.meta_id,d.document_date from documents_view d join paylist_view p on d.document_id = p.document_id where " . $this->getWhere() . " order by pl_id desc ";
+ $sql = "select p.*,d.customer_name,d.meta_id,d.document_date from documents_view d join paylist_view p on d.document_id = p.document_id where " . $this->getWhere() . " order by " . $order;
if ($count > 0) {
$limit =" limit {$start},{$count}";
diff --git a/www/app/pages/register/stocklist.php b/www/app/pages/register/stocklist.php
index 0c1873317..93c6a519c 100644
--- a/www/app/pages/register/stocklist.php
+++ b/www/app/pages/register/stocklist.php
@@ -12,6 +12,7 @@
use Zippy\Html\Form\AutocompleteTextInput;
use Zippy\Html\Form\Date;
use Zippy\Html\Form\DropDownChoice;
+use Zippy\Html\Form\TextInput;
use Zippy\Html\Form\Form;
use Zippy\Html\Label;
use Zippy\Html\Link\ClickLink;
@@ -39,7 +40,9 @@ public function __construct() {
$this->filter->add(new Date('to', time() + (1 * 24 * 3600)));
$this->filter->add(new DropDownChoice('fstore', Store::getList(), H::getDefStore()));
$this->filter->add(new AutocompleteTextInput('fitem'))->onText($this, 'OnAutoItem');
-
+ $this->filter->fitem->onChange($this, "onItem");
+ $this->filter->add(new TextInput('fsnumber'))->setVisible(false);
+
$doclist = $this->add(new DataView('doclist', new StockListDataSource($this), $this, 'doclistOnRow'));
$this->add(new Paginator('pag', $doclist));
@@ -83,7 +86,19 @@ public function OnAutoItem($sender) {
}
return $r;
}
+ public function onItem($sender) {
+ $this->filter->fsnumber->setVisible(false);
+
+ $item = Item::load($sender->getKey());
+ if ($item != null) {
+ if ($item->useserial == 1) {
+ $this->filter->fsnumber->setVisible(true);
+
+ }
+
+ }
+ }
//просмотр
public function showOnClick($sender) {
@@ -117,9 +132,12 @@ private function getWhere() {
$store_id = $this->page->filter->fstore->getValue();
$item_id = $this->page->filter->fitem->getKey();
+ $snumber = $this->page->filter->fsnumber->getText();
$where = " s.item_id = {$item_id} and date(d.document_date) >= " . $conn->DBDate($this->page->filter->from->getDate()) . " and date(d.document_date) <= " . $conn->DBDate($this->page->filter->to->getDate());
-
+ if (strlen($snumber) > 0) {
+ $where .= " and s.snumber=" . $conn->qstr($snumber);
+ }
if ($store_id > 0) {
$where .= " and s.store_id=" . $store_id;
}
diff --git a/www/app/pages/report/balance.php b/www/app/pages/report/balance.php
index 4fadb8fd2..1f85a85f3 100644
--- a/www/app/pages/report/balance.php
+++ b/www/app/pages/report/balance.php
@@ -70,7 +70,7 @@ private function generateReport() {
}
$stview ="SELECT SUM( (SELECT COALESCE(SUM(quantity), 0) FROM entrylist_view
- WHERE entrylist_view.stock_id = store_stock_view.stock_id and date(document_date) < {$dbdt} ) * partion) from store_stock_view ";
+ WHERE entrylist_view.stock_id = store_stock_view.stock_id and document_date < {$dbdt} ) * partion) from store_stock_view ";
$sql = $stview. " where {$brst} item_type= ".Item::TYPE_MAT;
$amat = doubleval($conn->GetOne($sql)) ;
diff --git a/www/app/pages/report/emptask.php b/www/app/pages/report/emptask.php
index 86e7027c4..56bd72995 100644
--- a/www/app/pages/report/emptask.php
+++ b/www/app/pages/report/emptask.php
@@ -59,8 +59,8 @@ private function generateReport() {
$conn = \ZDB\DB::getConnect();
$where = " meta_name='Task'
- AND DATE( document_date) >= " . $conn->DBDate($from) . "
- AND DATE( document_date) <= " . $conn->DBDate($to) . "
+ AND document_date >= " . $conn->DBDate($from) . "
+ AND document_date <= " . $conn->DBDate($to) . "
and state= " . Document::STATE_CLOSED;
diff --git a/www/app/pages/report/outfood.php b/www/app/pages/report/outfood.php
index be9842015..f5ee8fd08 100644
--- a/www/app/pages/report/outfood.php
+++ b/www/app/pages/report/outfood.php
@@ -67,10 +67,10 @@ private function generateReport() {
if($rtype ==0) {
$sql = "
- SELECT DATE(document_date) AS dt,COUNT(*) AS qty FROM documents_view dv
+ SELECT document_date AS dt,COUNT(*) AS qty FROM documents_view dv
WHERE dv.meta_name='OrderFood' AND state = 9
- AND DATE(dv.document_date) >= " . $conn->DBDate($from) . "
- AND DATE(dv.document_date) <= " . $conn->DBDate($to) . "
+ AND dv.document_date >= " . $conn->DBDate($from) . "
+ AND dv.document_date <= " . $conn->DBDate($to) . "
{$forbar}
GROUP BY dt
ORDER BY dt
diff --git a/www/app/pages/service/armfood.php b/www/app/pages/service/armfood.php
index 964506933..bef030b94 100644
--- a/www/app/pages/service/armfood.php
+++ b/www/app/pages/service/armfood.php
@@ -487,7 +487,7 @@ public function onDocRow($row) {
public function updateorderlist($sender) {
$conn = \ZDB\DB::getConnect();
- $where = " (state not in(9) or content like '%1 %' ) and date(document_date) >= " . $conn->DBDate(strtotime('-1 week')) ;
+ $where = " (state not in(9) or content like '%1 %' ) and document_date >= " . $conn->DBDate(strtotime('-1 week')) ;
if ($sender instanceof Form) {
$text = trim($sender->searchnumber->getText());
$cust = $sender->searchcust->getKey();
diff --git a/www/app/pages/service/armpos.php b/www/app/pages/service/armpos.php
index 1496a1d13..986db442d 100644
--- a/www/app/pages/service/armpos.php
+++ b/www/app/pages/service/armpos.php
@@ -1518,7 +1518,7 @@ public function OnOpenShift($sender) {
}
\App\Modules\PPO\PPOHelper::clearStat($this->pos->pos_id);
-
+ //задача для автозакрытия
if($this->pos->autoshift >0){
$task = new \App\Entity\CronTask() ;
$task->tasktype = \App\Entity\CronTask::TYPE_AUTOSHIFT;
@@ -1705,7 +1705,7 @@ public function onDocRow($row) {
public function updatechecklist($sender) {
$conn = \ZDB\DB::getConnect();
- $where = "meta_name='PosCheck' and date(document_date) >= " . $conn->DBDate(strtotime('-1 month')) ;
+ $where = "meta_name='PosCheck' and document_date >= " . $conn->DBDate(strtotime('-1 month')) ;
if ($sender instanceof Form) {
diff --git a/www/app/pages/service/export.php b/www/app/pages/service/export.php
index f6ab06d22..36790630f 100644
--- a/www/app/pages/service/export.php
+++ b/www/app/pages/service/export.php
@@ -250,7 +250,7 @@ public function onDPreview($sender) {
$conn = \ZDB\DB::getConnect();
- $sql = "meta_name='{$dt}' and date(document_date) >= " . $conn->DBDate($sender->dfrom->getDate()) . " and date(document_date) <= " . $conn->DBDate($sender->dto->getDate());
+ $sql = "meta_name='{$dt}' and document_date >= " . $conn->DBDate($sender->dfrom->getDate()) . " and document_date <= " . $conn->DBDate($sender->dto->getDate());
$this->_docs = Document::find($sql);
$this->dformlist->doclist->Reload();
}
diff --git a/www/app/system.php b/www/app/system.php
index 17b6870ab..d6c698cb7 100644
--- a/www/app/system.php
+++ b/www/app/system.php
@@ -10,8 +10,8 @@
*/
class System
{
- public const CURR_VERSION = "6.12.0";
- public const PREV_VERSION = "6.11.9";
+ public const CURR_VERSION = "6.12.1";
+ public const PREV_VERSION = "6.12.0";
public const REQUIRED_DB = "6.12.0";
private static $_options = array(); // для кеширования
@@ -231,12 +231,12 @@ public static function checkIP() {
/**
- * проверка обновлений и ряа параметров настроек
- *
+ * проверка обновлений и ряда параметров настроек
+ * вызывается раз в неделю
*/
public static function checkUpdate() {
$options = System::getOptions("common");
- if($options['noupdate']==1) {
+ if(($options['noupdate'] ??0)==1) {
return;
}
$lastcheck=intval( \App\Helper::getKeyVal('lastchecksystem')) ;
@@ -257,6 +257,14 @@ public static function checkUpdate() {
$n->save();
}
+ if(System::useCron() == false){
+ $n = new \App\Entity\Notify();
+ $n->user_id = $user->user_id;
+ $n->message = "Планувальник вимкнено. Деякі фонові завдання не будуть виконуватись " ;
+ $n->sender_id = \App\Entity\Notify::SYSTEM;
+
+ $n->save();
+ }
}
if($user->rolename=='admins' ){
diff --git a/www/app/widgets/docview.php b/www/app/widgets/docview.php
index 4ad3f80ca..b0d1f6555 100644
--- a/www/app/widgets/docview.php
+++ b/www/app/widgets/docview.php
@@ -154,13 +154,14 @@ public function loaddata($arg, $post) {
$ret['pdoc_id'] = 0;
$ret['pdoc_name'] = 0;
- $p = Document::load($doc->parent_id);
- if($p instanceof Document) {
- $ret['pdoc_id'] = $doc->parent_id;
- $ret['pdoc_name'] = $p->meta_desc . ' ' . $p->document_number;
+ if($doc->parent_id >0){
+ $p = Document::load($doc->parent_id);
+ if($p instanceof Document) {
+ $ret['pdoc_id'] = $doc->parent_id;
+ $ret['pdoc_name'] = $p->meta_desc . ' ' . $p->document_number. ' ' . $p->getStateName($p->state);
+ }
}
-
$ret['reldocs'] = array();
return json_encode($ret, JSON_UNESCAPED_UNICODE);
@@ -177,7 +178,11 @@ public function loadchilddocs($arg, $post) {
$docs = array();
foreach($doc->getChildren() as $d) {
- $docs[]=array('id'=>$d->document_id,'name'=>$d->meta_desc . ' ' . $d->document_number,'candel'=>($user->user_id == $d->user_id || $user->rolename =='admins'));
+ $docs[]=array('id'=>$d->document_id,
+ 'name'=>$d->meta_desc . ' ' . $d->document_number,
+ 'status'=>$d->getStateName($d->state),
+ 'candel'=>($user->user_id == $d->user_id || $user->rolename =='admins')
+ );
}
diff --git a/www/composer.lock b/www/composer.lock
index 825af88ec..72b988295 100644
--- a/www/composer.lock
+++ b/www/composer.lock
@@ -516,16 +516,16 @@
},
{
"name": "leon-mbs/ppolib",
- "version": "1.5.7",
+ "version": "1.5.8",
"source": {
"type": "git",
"url": "https://github.com/leon-mbs/ppolib.git",
- "reference": "8a383bab5e2745d1ae5d9f045b521248f73b0617"
+ "reference": "d70d399fa69b1ceb4032a27e116c45b0b8caf0b2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/leon-mbs/ppolib/zipball/8a383bab5e2745d1ae5d9f045b521248f73b0617",
- "reference": "8a383bab5e2745d1ae5d9f045b521248f73b0617",
+ "url": "https://api.github.com/repos/leon-mbs/ppolib/zipball/d70d399fa69b1ceb4032a27e116c45b0b8caf0b2",
+ "reference": "d70d399fa69b1ceb4032a27e116c45b0b8caf0b2",
"shasum": ""
},
"require": {
@@ -546,9 +546,9 @@
"homepage": "https://github.com/leon-mbs/ppolib",
"support": {
"issues": "https://github.com/leon-mbs/ppolib/issues",
- "source": "https://github.com/leon-mbs/ppolib/tree/1.5.7"
+ "source": "https://github.com/leon-mbs/ppolib/tree/1.5.8"
},
- "time": "2024-12-11T00:08:13+00:00"
+ "time": "2024-12-13T11:17:28+00:00"
},
{
"name": "leon-mbs/zdb",
@@ -1689,12 +1689,12 @@
"source": {
"type": "git",
"url": "https://github.com/Roave/SecurityAdvisories.git",
- "reference": "1fd8b74024b8938b25df3a9971c7ad9d57d4f592"
+ "reference": "233f7c395ac3b83e3c85aa304f3350bf8897aca5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/1fd8b74024b8938b25df3a9971c7ad9d57d4f592",
- "reference": "1fd8b74024b8938b25df3a9971c7ad9d57d4f592",
+ "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/233f7c395ac3b83e3c85aa304f3350bf8897aca5",
+ "reference": "233f7c395ac3b83e3c85aa304f3350bf8897aca5",
"shasum": ""
},
"conflict": {
@@ -2018,6 +2018,7 @@
"laravel/fortify": "<1.11.1",
"laravel/framework": "<6.20.45|>=7,<7.30.7|>=8,<8.83.28|>=9,<9.52.17|>=10,<10.48.23|>=11,<11.31",
"laravel/laravel": ">=5.4,<5.4.22",
+ "laravel/pulse": "<1.3.1",
"laravel/reverb": "<1.4",
"laravel/socialite": ">=1,<2.0.10",
"latte/latte": "<2.10.8",
@@ -2243,6 +2244,7 @@
"shopware/storefront": "<=6.4.8.1|>=6.5.8,<6.5.8.7-dev",
"shopxo/shopxo": "<=6.1",
"showdoc/showdoc": "<2.10.4",
+ "shuchkin/simplexlsx": ">=1.0.12,<1.1.12",
"silverstripe-australia/advancedreports": ">=1,<=2",
"silverstripe/admin": "<1.13.19|>=2,<2.1.8",
"silverstripe/assets": ">=1,<1.11.1",
@@ -2280,7 +2282,7 @@
"snipe/snipe-it": "<=7.0.13",
"socalnick/scn-social-auth": "<1.15.2",
"socialiteproviders/steam": "<1.1",
- "spatie/browsershot": "<3.57.4",
+ "spatie/browsershot": "<5.0.1",
"spatie/image-optimizer": "<1.7.3",
"spencer14420/sp-php-email-handler": "<1",
"spipu/html2pdf": "<5.2.8",
@@ -2531,7 +2533,7 @@
"type": "tidelift"
}
],
- "time": "2024-12-10T21:04:50+00:00"
+ "time": "2024-12-13T21:04:51+00:00"
},
{
"name": "sabberworm/php-css-parser",
diff --git a/www/index.php b/www/index.php
index 999d7b515..69dd54ed7 100644
--- a/www/index.php
+++ b/www/index.php
@@ -37,7 +37,7 @@
$app = new \App\Application();
$modules = \App\System::getOptions('modules');
- if ($modules['shop'] == 1 && \App\System::getOption('shop', 'usemainpage')==1) {
+ if (($modules['shop'] ??0)== 1 && \App\System::getOption('shop', 'usemainpage')==1) {
$app->Run('\App\Modules\Shop\Pages\Catalog\Main' );
} else {
$app->Run($mainpage);
diff --git a/www/templates/apihelp.html b/www/templates/apihelp.html
index 2295d99be..cdc010be4 100644
--- a/www/templates/apihelp.html
+++ b/www/templates/apihelp.html
@@ -22,12 +22,14 @@ Формат обміну
Authorization: Bearer
{"jsonrpc": "2.0", "method": "echo", "params": {"say": "Привіт"}, "id": 1}
+
jsonrpc - завжди "2.0"
method - функція, що викликається
params - параметри (не обов'язкове поле)
id - ідентифікатор запиту
+
Ідентифікатор запиту повертається у відповідь і може бути будь яким унікальним у випадку пакетного
(batch) запиту, (сервер може бути асинхронним та повернути відповіді у довільному порядку). У випадку
відсутності ідентифікатора вважається, що запит - це нотифікація і не потребує відповіді.
@@ -37,15 +39,17 @@
Формат обміну
Відповідь має вигляд
{"jsonrpc": "2.0", "result": {"answer": "Привіт"}, "id": 1}
+
jsonrpc - завжди "2.0"
result - відповідь
error - повертається замість result, якщо помилка
id - відповідний ідентифікатор із запиту
+
Поля з довільним текстом (наприклад описи) повертаються закодованими в base64
-
+
Коди помилок
@@ -73,7 +77,7 @@ Формат обміну
Хибна команда
-
+
Авторизація
Тип авторизації задається в налаштуваннях і може бути на основі JWT токена, Basic аутентифікації
@@ -237,7 +241,7 @@
Контрагенти
"params": {
"customer_id":"8",
- "customer_name":"\"Рога&Копыта\"",
+ "customer_name":"\"Рога&Копыта\"",
"phone":"0991111111",
"email":"test@ukr.net",
"city":"",
@@ -489,8 +493,8 @@ Документи
mf - каса або банкiвський рахунок
branch_id - фiлiя (якщо увiмкнено)
- amount - сума. Якщо >0 створюєтся Прибутковий касовий ордер iнакше Видатковий касовий ордер
- customer_id - контрагент. Якщо задано i сума >0 то оплата вiд покупця. Якщо сума < 0 то оплата постачальнику
+ amount - сума. Якщо >0 створюєтся Прибутковий касовий ордер iнакше Видатковий касовий ордер
+ customer_id - контрагент. Якщо задано i сума >0 то оплата вiд покупця. Якщо сума < 0 то оплата постачальнику
"params": {
diff --git a/www/templates/modules/hr/items.html b/www/templates/modules/hr/items.html
index 3bb3a5ae7..5d162c90f 100644
--- a/www/templates/modules/hr/items.html
+++ b/www/templates/modules/hr/items.html
@@ -4,10 +4,10 @@
Експорт товарів в магазин
-
Спецсимволи (типу & ' " ` )
+ Спецсимволи (типу & ' " ` )
в назвi або описi можуть викликати проблеми з вигрузкою
- Загрузити категорії
+ Загрузити категорії
diff --git a/www/templates/modules/np/options.html b/www/templates/modules/np/options.html
index 47a254982..1001f19b6 100644
--- a/www/templates/modules/np/options.html
+++ b/www/templates/modules/np/options.html
@@ -84,7 +84,7 @@ Данi вiдправника за замовчуванням
-
+
diff --git a/www/templates/modules/np/ttnlist.html b/www/templates/modules/np/ttnlist.html
index abe4f15ed..202d73faf 100644
--- a/www/templates/modules/np/ttnlist.html
+++ b/www/templates/modules/np/ttnlist.html
@@ -31,7 +31,7 @@ Стан доставок
Оновити
-
+
ТТН
Сума
diff --git a/www/templates/modules/ocstore/items.html b/www/templates/modules/ocstore/items.html
index 0a5cb863d..31ae010c4 100644
--- a/www/templates/modules/ocstore/items.html
+++ b/www/templates/modules/ocstore/items.html
@@ -4,10 +4,10 @@
Експорт товарів в магазин
-
Спецсимволи (типу & ' " ` )
+ Спецсимволи (типу & ' " ` )
в назвi або описi можуть викликати проблеми з вигрузкою
- Перевiрити з'єднання
+ Перевiрити з'єднання
diff --git a/www/templates/modules/ocstore/options.html b/www/templates/modules/ocstore/options.html
index 11d9f0151..b8631f45f 100644
--- a/www/templates/modules/ocstore/options.html
+++ b/www/templates/modules/ocstore/options.html
@@ -43,7 +43,7 @@ Налаштування підключення
Тип ціни
- Не обрано
+ Не обрано
Ціна для оновлення в магазині
@@ -53,7 +53,7 @@ Налаштування підключення
Каса за замовчанням
- Не вказана
+ Не вказана
Якщо оплата не на стороні IM
diff --git a/www/templates/modules/ocstore/orders.html b/www/templates/modules/ocstore/orders.html
index 05ccb2fc2..1ba8082f7 100644
--- a/www/templates/modules/ocstore/orders.html
+++ b/www/templates/modules/ocstore/orders.html
@@ -6,7 +6,7 @@
Імпорт замовлень
-
Перевiрити з'єднання
+
Перевiрити з'єднання
diff --git a/www/templates/modules/pu/items.html b/www/templates/modules/pu/items.html
index 07132d471..a7abe8896 100644
--- a/www/templates/modules/pu/items.html
+++ b/www/templates/modules/pu/items.html
@@ -7,7 +7,7 @@
Експорт товарів в магазин
-
Спецсимволи (типу & ' " ` )
+ Спецсимволи (типу & ' " ` )
в назвi або описi може викликати проблеми з вигрузкою
diff --git a/www/templates/modules/pu/options.html b/www/templates/modules/pu/options.html
index dcf85452c..d1c27e2fe 100644
--- a/www/templates/modules/pu/options.html
+++ b/www/templates/modules/pu/options.html
@@ -24,7 +24,7 @@ Налаштування з'єднання
Тип ціни
- Не обрано
+ Не обрано
@@ -33,7 +33,7 @@ Налаштування з'єднання
Каса за замовчанням
- Не вказана
+ Не вказана
Якщо оплата не на стороні IM
diff --git a/www/templates/modules/shop/pages/admin/custom.html b/www/templates/modules/shop/pages/admin/custom.html
index 84f15965a..bb3a2a64b 100644
--- a/www/templates/modules/shop/pages/admin/custom.html
+++ b/www/templates/modules/shop/pages/admin/custom.html
@@ -68,14 +68,14 @@ Редагування сторiнки
Вiдносне посилання
-
+
Не включаючи адресу сайту. Допускаються тiльки латиничнi символи (наприклад: news, about_us, dostavka)
diff --git a/www/templates/modules/shop/pages/catalog/main.html b/www/templates/modules/shop/pages/catalog/main.html
index 59add096a..af1ca2cae 100644
--- a/www/templates/modules/shop/pages/catalog/main.html
+++ b/www/templates/modules/shop/pages/catalog/main.html
@@ -16,7 +16,7 @@
-
+
{{^nouseimages}}
diff --git a/www/templates/modules/shop/pages/catalog/menu.html b/www/templates/modules/shop/pages/catalog/menu.html
index 2be53742a..772cecdaa 100644
--- a/www/templates/modules/shop/pages/catalog/menu.html
+++ b/www/templates/modules/shop/pages/catalog/menu.html
@@ -81,7 +81,7 @@
{{smname}}
{{#cats}}
-
{{cat_name}}
+ {{cat_name}}
{{#items}}
diff --git a/www/templates/modules/shop/pages/catalog/order.html b/www/templates/modules/shop/pages/catalog/order.html
index 1cb0a7c36..689eeac6f 100644
--- a/www/templates/modules/shop/pages/catalog/order.html
+++ b/www/templates/modules/shop/pages/catalog/order.html
@@ -81,7 +81,7 @@ Оформлення замовлення
{{#usepayment}}
diff --git a/www/templates/pages/subscribes.html b/www/templates/pages/subscribes.html
index 3fd299a0e..aa6789ab4 100644
--- a/www/templates/pages/subscribes.html
+++ b/www/templates/pages/subscribes.html
@@ -202,7 +202,7 @@ Опис тегiв шаблонізатора
Для виведення списків, наприклад, позицій документа, потрібно додати інформацію мiж тегами
- {#list} та {/list>}
+ {#list} та {/list>}
Всередині рядка списку допускаються наступні теги:
@@ -217,16 +217,16 @@ Опис тегiв шаблонізатора
Наприклад:
- Привiт {customer_name}<br>
+ Привiт {customer_name}<br>
Ми впарили тобi наступне
- <table>
- <tr> <th>Товар</th> <th align="right" >Кiл. </th> </tr>
+ <table>
+ <tr> <th>Товар</th> <th align="right" >Кiл. </th> </tr>
{#list}
- <tr> <td>{item_name} </td> <td align="right" >{qty} </td></tr>
+ <tr> <td>{item_name} </td> <td align="right" >{qty} </td></tr>
{/list}
- </table><br>
- До сплати {forpay} чистоганом <br>
- Прайси за <a href="https://price.com/">посиланням</a><br>
+ </table><br>
+ До сплати {forpay} чистоганом <br>
+ Прайси за <a href="https://price.com/">посиланням</a><br>
Пока, лошара
diff --git a/www/templates/pages/systemlog.html b/www/templates/pages/systemlog.html
index 1ec0a350c..21c21896e 100644
--- a/www/templates/pages/systemlog.html
+++ b/www/templates/pages/systemlog.html
@@ -30,7 +30,7 @@
Системнi повiдомлення
-
+
Нове
@@ -56,11 +56,11 @@
Файловий лог
-
-
+
+
-
+
diff --git a/www/templates/pages/timesheet.html b/www/templates/pages/timesheet.html
index 416262902..274bc633a 100644
--- a/www/templates/pages/timesheet.html
+++ b/www/templates/pages/timesheet.html
@@ -2,8 +2,7 @@
Табель облiку робочого часу
-
-
+
@@ -119,14 +118,14 @@ Новий запис
Дата
-
+
Тип
@@ -137,7 +136,7 @@
Новий запис
Перерва, хв.
-
+