User Tools

Site Tools


kommissionierungslaeufeanbieten

Kommissionierungsläufe Anbieten

Auf dem mobilen Client sollen abhängig von dem jeweiligen Mitarbeiter bei der Kommissionierung nur die Kommissionierungsläufe angeboten werden, die der Mitarbeiter machen darf.

Client mobile should offer only such “Kommissionierläufe” which are relevant for current user. But manually entry should be also possible (the current functionality should exist as previously).

Implementierung

Add a new method to the service which should call the XCI-Event.

The method name is getListDcLiDocCooForPostingOpenXCI

This method is called in SvDcInvPostingEditImpl.getTraCooFrom(). There we check if the mask do not have any text in the field dcInvPosting.cooinput. If the field has no input, the fetch only such “Kommissionierungsbelege”, that the current user may see. (But this means also he is free to entry the numbers in the field.)

In the SvDcInvPostingEditImpl.getListDcLiDocCooForPostingOpenXCI() method we simply delegate the functionality to an XCI-Event:

svXci.executeCodeWithCache("SvDcInvPostingEdit", "getListDcLiDocCooForPostingOpenXCI", [context : this, company : company, dcLiDocCooForPostingList: ret])))

So the real functionality is programmed in the XCI-Event : SvDcInvPostingEdit.getListDcLiDocCooForPostingOpenXCI

The following places are affected:

  • appBoInv.efcbl
    • declare the new method getListDcLiDocCooForPostingOpenXCI(String company) in the service SvDcInvPostingEdit
  • appSstDoc.efcbl
    • declare the new method getListDocForCooForPersnum(String company, String persnum) in the repository SoLiDocForCooRepository
  • SvDcInvPostingEditImpl.groovy
    • the new method public EFCList<DcLiDocCooForPosting> getListDcLiDocCooForPostingOpenXCI(EFCString company) will be generated → implement it. It should call our XCI event
    • change some details in the method getTraCooFrom()
      • it should now call our new method getListDcLiDocCooForPostingOpenXCI()
  • SoLiDocForCooRepositoryImpl.groovy
    • implement method getListDocForCooForPersnum() here

XCI-Event

Hier werden die offenen und ungelöschten SoLiDocForCoo Einträge geholt.
Gefiltert nach Personalnummer.

To see the XCI-Event implementation start the Java-Client and open “System / XCI-Events”. Then search for getListDcLiDocCooForPostingOpenXCI.

This is the current version from 16.02.2023 (edited by Klaus):

import de.effectivecompany.app.sst.SoLiDocForCoo
import de.effectivecompany.app.inv.DcLiDocCooForPosting
import de.effectivecompany.base.datatypes.EFCList
import de.effectivecompany.base.datatypes.EFCString
import de.effectivecompany.util.StringTools

String        			helptext
DcLiDocCooForPosting	dcDoc
EFCList<SoLiDocForCoo>	boList
EFCString				persNum

// BEGIN get persNum of current user
persNum = context.svSysUser.getMdSysUsrBas()?.getPersnum()?.getPersnum()
// END

if (persNum?.data) {
	boList = context.soLiDocForCooRepository.getListDocForCooForPersnum(company, persNum)
	
	boList.each { SoLiDocForCoo soLiDoc ->
		dcDoc = new DcLiDocCooForPosting()
		dcDoc.map(soLiDoc)
		helptext = soLiDoc.dockey.data + soLiDoc.docnum.data + " - " + soLiDoc.info_bupmatchcode
		if (soLiDoc.v_stextfromdocdet.data) {
		helptext = helptext + " - " + soLiDoc.v_stextfromdocdet.data
		}
		helptext = StringTools.left(helptext, 40)
		dcDoc.setStext(helptext)
		dcDoc.setCoo_docsubitem(0)    // keine Unterteilung KL
		if (soLiDoc.v_refdocitemfromdocdet.data) {
		dcDoc.setCoo_docsubitem(soLiDoc.v_refdocitemfromdocdet)
		}
		dcLiDocCooForPostingList.add(dcDoc)
	}
}

return dcLiDocCooForPostingList

Backup: A copy of it I've saved in the method XciEventEditorHelper.getListDcLiDocCooForPostingOpenXCI() (in ther project xci_events). I saved the copy because the editor of Eclipse is more convenient to edit groovy (Code completion etc.).

Tests

Test data

Lokal: Use data record for 00075183

Zimmermann: Use data record for 00100583

Tests to do

  • The user should receive only such entries, which are configured for him
    • User 'vk' should receive only 2 entries:
      • KL00075183 - schmettau - Bla
      • KL00075183 - schmettau - etwasneues
  • If the user enter some data in the field Kommission, the system should deliver all entries which contains the entered data
  • The user 'tz' should receive nothing

Misc

Beispiel SoLiDocRepository verwenden (aus dem XCI-Event SvBoDoc.save()):

SoLiDocRepository	soLiDocRepository = SpringHelper.getService(SoLiDocRepository)
...
			ex = new DBV_sst_docEx()
			ex.createCriteria()
				.andCompanyEqualTo(boDoc.company.company.data)
				.andExtpcknumEqualTo(docItem.stext.data)
				.andDoctypeBetween(OptionTools.DOCTYPE_SAL_DLN_MIN, OptionTools.DOCTYPE_SAL_DLN_MAX)
				.andIsdeletedEqualTo(false)
			dlnList = soLiDocRepository.getListDocByExample(ex)

SoLiDocRepository soLiDocRepository = SpringHelper.getService(SoLiDocRepository)

DocDetType für Kommissionierung Belegdetails: OpDocdettypeType.INV_COOSUBITEM

kommissionierungslaeufeanbieten.txt · Last modified: by kalaschnikow