diff --git a/tests/tine20/Sales/AllTests.php b/tests/tine20/Sales/AllTests.php
index b075cabb3cb..cf01059f32d 100644
--- a/tests/tine20/Sales/AllTests.php
+++ b/tests/tine20/Sales/AllTests.php
@@ -4,7 +4,7 @@
*
* @package Sales
* @license http://www.gnu.org/licenses/agpl.html
- * @copyright Copyright (c) 2008-2022 Metaways Infosystems GmbH (http://www.metaways.de)
+ * @copyright Copyright (c) 2008-2024 Metaways Infosystems GmbH (http://www.metaways.de)
* @author Philipp Schuele
*/
@@ -40,6 +40,7 @@ public static function suite ()
$suite->addTestSuite(Sales_Document_ControllerTest::class);
$suite->addTestSuite(Sales_Document_ExportTest::class);
$suite->addTestSuite(Sales_Document_JsonTest::class);
+ $suite->addTestSuite(Sales_Export_DebitorTest::class);
$suite->addTestSuite(Sales_Export_ProductTest::class);
return $suite;
diff --git a/tests/tine20/Sales/Export/DebitorTest.php b/tests/tine20/Sales/Export/DebitorTest.php
new file mode 100644
index 00000000000..ac7944209ac
--- /dev/null
+++ b/tests/tine20/Sales/Export/DebitorTest.php
@@ -0,0 +1,53 @@
+
+ */
+
+/**
+ * Sales Debitor export tests
+ *
+ * @package Sales
+ * @subpackage Export
+ */
+class Sales_Export_DebitorTest extends Sales_Document_Abstract
+{
+ public function testXlsExport()
+ {
+ $customer = $this->_createCustomer();
+ $customer->{Sales_Model_Customer::FLD_DEBITORS}->addRecord(new Sales_Model_Debitor([
+ Sales_Model_Debitor::FLD_NAME => 'unittest',
+ Sales_Model_Debitor::FLD_DIVISION_ID => Sales_Config::getInstance()->{Sales_Config::DEFAULT_DIVISION},
+ ], true));
+ $customer = Sales_Controller_Customer::getInstance()->update($customer);
+
+ $export = new Sales_Export_DebitorXls(Tinebase_Model_Filter_FilterGroup::getFilterForModel(
+ Sales_Model_Debitor::class, [
+ ['field' => Sales_Model_Debitor::FLD_CUSTOMER_ID, 'operator' => 'equals', 'value' => $customer->getId()],
+ ]), null,
+ [
+ 'definitionId' => Tinebase_ImportExportDefinition::getInstance()->search(Tinebase_Model_Filter_FilterGroup::getFilterForModel(Tinebase_Model_ImportExportDefinition::class, [
+ 'model' => Sales_Model_Debitor::class,
+ 'name' => 'debitor_xls'
+ ]))->getFirstRecord()->getId()
+ ]);
+
+ $xls = Tinebase_TempFile::getTempPath();
+ $export->generate();
+ $export->write($xls);
+
+ $reader = PHPExcel_IOFactory::createReader('Excel2007');
+ $doc = $reader->load($xls);
+ $arrayData = $doc->getActiveSheet()->rangeToArray('A1:M4');
+
+ for ($i = 2; $i < 4; ++$i) {
+ $this->assertTrue(in_array($customer->getTitle(), $arrayData[$i]));
+ $this->assertTrue(in_array($customer->{Sales_Model_Customer::FLD_DEBITORS}->getFirstRecord()->{Sales_Model_Debitor::FLD_DIVISION_ID}->getTitle(), $arrayData[$i])
+ || in_array($customer->{Sales_Model_Customer::FLD_DEBITORS}->getLastRecord()->{Sales_Model_Debitor::FLD_DIVISION_ID}->getTitle(), $arrayData[$i]));
+ }
+ }
+}
diff --git a/tine20/Sales/Export/DebitorXls.php b/tine20/Sales/Export/DebitorXls.php
new file mode 100644
index 00000000000..73e69bfdedc
--- /dev/null
+++ b/tine20/Sales/Export/DebitorXls.php
@@ -0,0 +1,32 @@
+
+ * @copyright Copyright (c) 2024 Metaways Infosystems GmbH (http://www.metaways.de)
+ *
+ */
+
+/**
+ * Sales xls generation class
+ *
+ * @package Sales
+ * @subpackage Export
+ */
+class Sales_Export_DebitorXls extends Tinebase_Export_Xls
+{
+ /**
+ * @var string $_applicationName
+ */
+ protected $_applicationName = 'Sales';
+
+ /**
+ * default export definition name
+ *
+ * @var string
+ */
+ protected $_defaultExportname = 'debitor_default_xls';
+}
diff --git a/tine20/Sales/Export/definitions/debitor_xls.xml b/tine20/Sales/Export/definitions/debitor_xls.xml
new file mode 100644
index 00000000000..c36198ec4f7
--- /dev/null
+++ b/tine20/Sales/Export/definitions/debitor_xls.xml
@@ -0,0 +1,13 @@
+
+
+ Sales_Model_Debitor
+ debitor_xls
+
+
+ export
+ Sales_Export_DebitorXls
+ tinebase-action-export-xls
+ true
+ 600
+ multi
+