Package clips.directory.editors.update.updaters.collaborators

Source Code of clips.directory.editors.update.updaters.collaborators.UpdaterCollaborators

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package clips.directory.editors.update.updaters.collaborators;

import beans.user.collaborator.entities.CollaboratorFunctionsDetails;
import beans.user.search.ClientFilter;
import cli_fmw.delegate.directory.UpdaterDirectory;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import cli_fmw.main.ClipsException;
import cli_fmw.main.MainWindow;
import cli_fmw.main.audit.AuditManager;
import cli_fmw.utils.MessageBox;
import cli_fmw.utils.ModalDialog;
import cli_fmw.utils.SelectorEditable;
import clips.delegate.client.ClientLocal;
import clips.delegate.client.ClientSearchLocal;
import clips.delegate.client.CollaboratorFunctionsChunk;
import clips.delegate.client.CollaboratorLocal;
import clips.delegate.directory.ro.DirectoryCollaborator;
import clips.delegate.directory.ro.DirectoryCollaboratorItem;
import clips.delegate.directory.ro.DirectoryLpuItem;
import clips.delegate.directory.simple.dvr.DirectoryDvr;
import clips.delegate.directory.simple.dvr.DirectoryDvrItem;
import clips.delegate.directory.simple.medicalAidType.DirectoryMedicalAidType;
import clips.delegate.directory.simple.medicalAidType.DirectoryMedicalAidTypeItem;
import clips.delegate.directory.simple.name.DirectoryName;
import clips.delegate.directory.simple.name.DirectoryNameItem;
import clips.delegate.directory.simple.pathron.DirectoryPathron;
import clips.delegate.directory.simple.pathron.DirectoryPathronItem;
import clips.delegate.directory.simple.receptionType.DirectoryReceptionType;
import clips.delegate.directory.simple.receptionType.DirectoryReceptionTypeItem;
import clips.delegate.directory.simple.speciality.DirectorySpeciality;
import clips.delegate.directory.simple.surname.DirectorySurname;
import clips.delegate.directory.simple.surname.DirectorySurnameItem;
import clips.login.UserInfo;
import clips.main.ClipsConfig;
import framework.beans.directory.DirectoryItemDetails;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import org.xBaseJ.micro.DBF;
import org.xBaseJ.micro.fields.Field;
import org.xBaseJ.micro.xBaseJException;

/**
*
* @author vip
*/
public class UpdaterCollaborators extends UpdaterDirectory{

    private ArrayList<CollaboratorLocal> collabList;
    private ArrayList<CollabData> colDataList;
    private HashMap<ColDataKey,ArrayList<ClientLocal>> colClientMap;
    private ClientSearchLocal clientSearchLocal;
    private DirectoryCollaborator dirCollab;
  private enum Col{
        ID,
    FAMILY,
        NAME,
        FATHER,
        KOD_SPEC,
        KOD_PRIEM,
        DOLV,
        VMU,
        SNILS,
  }
    private AuditManager am;

    public UpdaterCollaborators(AuditManager am) {
        this.am = am;
    }

    @Override
    public String getFilename() {
        return "WRACH.DBF";
    }

    @Override
    public String getTitle() {
        return "Врачи";
    }


    @Override
    protected void updateImpl() throws ClipsException {
        dirCollab = DirectoryLocator.getDirectory(DirectoryCollaborator.class);
        collabList = null;
        clientSearchLocal = new ClientSearchLocal(am);
        ClipsConfig cfg = ClipsConfig.getInstance();
        File file = new File(cfg.getLastDBFImportPath(),getFilename());
        DBF dbf = createDBF(file);
        HashMap<Col, Field> fields = new HashMap<Col, Field>();
        try {
            for (int i = 0; i < Col.values().length; i++) {
                Col col = Col.values()[i];
                fields.put(col, dbf.getField(col.toString()));
            }
        } catch (xBaseJException ex) {
            throw new ClipsException("Ошибка при чтении данных из файла " + dbf.getName(), ex);
        }
        int recordCount = dbf.getRecordCount();

        DirectorySurname dirSurname = DirectoryLocator.getDirectory(DirectorySurname.class);
        DirectoryName dirName = DirectoryLocator.getDirectory(DirectoryName.class);
        DirectoryPathron dirPathron = DirectoryLocator.getDirectory(DirectoryPathron.class);
        DirectorySpeciality dirSpec = DirectoryLocator.getDirectory(DirectorySpeciality.class);
        DirectoryReceptionType dirRecType = DirectoryLocator.getDirectory(DirectoryReceptionType.class);
        DirectoryDvr dirDvr = DirectoryLocator.getDirectory(DirectoryDvr.class);
        DirectoryMedicalAidType dirVmu = DirectoryLocator.getDirectory(DirectoryMedicalAidType.class);
        colDataList = new ArrayList<CollabData>();
        colClientMap = new HashMap<ColDataKey, ArrayList<ClientLocal>>();
        for (int i = 0; i < recordCount; i++) {
            try {
                dbf.read();
                if (dbf.deleted()) {
                    continue;
                }
                if (fields.get(Col.FAMILY).get().trim().isEmpty()) {
                    continue;
                }
                String extKey = fields.get(Col.ID).get().trim();
                DirectorySurnameItem surename = dirSurname.getItemFromTitle(fields.get(Col.FAMILY).get().trim());
                if (surename == null) {
                    DirectoryItemDetails d = new DirectoryItemDetails(fields.get(Col.FAMILY).get().trim());
                    surename = new DirectorySurnameItem(d);
                    dirSurname.getItems().append(surename);
                }
                int surnameID = surename.getID();
                DirectoryNameItem name = dirName.getItemFromTitle(fields.get(Col.NAME).get().trim());
                if (name == null) {
                    DirectoryItemDetails d = new DirectoryItemDetails(fields.get(Col.NAME).get().trim());
                    name = new DirectoryNameItem(d);
                    dirName.getItems().append(name);
                }
                int nameID = name.getID();
                //Финт ушами - исправление отчества
                String father = fields.get(Col.FATHER).get().trim();
                if (father.equals("Тимирьянович")) {
                    father = "Тимерзянович";
                }
                DirectoryPathronItem pathron = dirPathron.getItemFromTitle(father);
                if (pathron == null) {
                    DirectoryItemDetails d = new DirectoryItemDetails(father);
                    pathron = new DirectoryPathronItem(d);
                    dirPathron.getItems().append(pathron);
                }
                int pathronID = pathron.getID();
                int specID = dirSpec.getItemFromExtKey(fields.get(Col.KOD_SPEC).get().trim()).getID();
                DirectoryReceptionTypeItem recType = dirRecType.getItemFromExtKey(fields.get(Col.KOD_PRIEM).get().trim());
                if (recType == null) {
                    recType = dirRecType.getItemFromExtKey("600");
                }
                int receptionTypeID = recType.getID();
                DirectoryDvrItem dvr = dirDvr.getItemFromExtKey(fields.get(Col.DOLV).get().trim());
                if (dvr == null) {
                    dvr = dirDvr.getItemFromID(0);
                }
                int dvrID = dvr.getID();
                DirectoryMedicalAidTypeItem vmu = dirVmu.getItemFromExtKey(fields.get(Col.VMU).get().trim());
                if (vmu == null) {
                    vmu = dirVmu.getItemFromID(0);
                }
                int vmuID = vmu.getID();
                String snils = fields.get(Col.SNILS).get().trim();

                CollabData cd = new CollabData(extKey, surnameID, nameID, pathronID, specID, receptionTypeID, dvrID, vmuID);
                ColDataKey key = new ColDataKey(surnameID, nameID, pathronID);
                colClientMap.put(key, findClient(surename.getTitle(), name.getTitle(), pathron.getTitle(), snils));
                colDataList.add(cd);

            } catch (IOException ex) {
                closeDBF(dbf);
                throw new ClipsException("Ошибка при чтении данных из файла " + dbf.getName() + " (строка " + i + ")", ex);
            } catch (xBaseJException ex) {
                closeDBF(dbf);
                throw new ClipsException("Ошибка при чтении данных из файла " + dbf.getName() + " (строка " + i + ")", ex);
            } catch (NumberFormatException ex) {
                closeDBF(dbf);
                throw new ClipsException("Ошибка при чтении данных из файла " + dbf.getName() + " (строка " + i + ")", ex);
            }
        }
        changeData();
    }

    private void changeData() {
        try {
            DialogPolling dlg = new DialogPolling(MainWindow.mainWindow, colClientMap, am);
            dlg.setVisible(true);
            if (dlg.getDlgResult() == ModalDialog.DLG_OK) {
                saveData();
            }
        } catch (ClipsException ex) {
            MessageBox.showException(ex);
        }

    }

    private void saveData() throws ClipsException {
        for (int i = 0; i < colDataList.size(); i++) {
            CollabData cd = colDataList.get(i);
            ColDataKey key = new ColDataKey(cd.surnameID, cd.nameID, cd.pathronID);
            ClientLocal client = colClientMap.get(key).get(0);
            CollaboratorLocal collab = findCollab(client);
            if (collab == null) {
                collab = new CollaboratorLocal(client);
                collab.save1();
                dirCollab = DirectoryLocator.getDirectory(DirectoryCollaborator.class, true);
                System.out.println("Загружен " + i + " " + collab);
            } else {
                System.out.println("Найден " + i + " " + collab + " ID = " + collab.getID());
            }
            CollaboratorFunctionsChunk collFunc = findFunc(collab, cd.specID, cd.receptionTypeID, cd.dvrID, cd.vmuID);
            if (collFunc == null) {
                CollaboratorFunctionsDetails d = new CollaboratorFunctionsDetails();
                d.collaboratorID = collab.getID();
                d.dvrID = cd.dvrID;
                d.firstMedicalAidID = cd.vmuID;
                d.receptionTypeID = cd.receptionTypeID;
                d.specialityID = cd.specID;
                d.external_key = cd.extKey;
                collFunc = new CollaboratorFunctionsChunk(collab, d);
                collab.getFunctions().append(collFunc);
                collab.save1();
            }
        }
    }


    private CollaboratorLocal findCollab(ClientLocal client) throws ClipsException {
        collabList = new ArrayList<CollaboratorLocal>();
        DirectoryLpuItem lpu = UserInfo.get().getCollaborator().getLpu();
        List<DirectoryCollaboratorItem> items = dirCollab.getItemsFiltered(lpu, false, false, false);
        for (int i = 0; i < items.size(); i++) {
            CollaboratorLocal collab = new CollaboratorLocal(items.get(i).getID(), am);
            collabList.add(collab);
        }
        for (int i = 0; i < collabList.size(); i++) {
            if (collabList.get(i).getClient().getID() == client.getID()) {
                return collabList.get(i);
            }
        }
        return null;
    }


    private ArrayList<ClientLocal> findClient(String surname, String name, String pathron, String snils) throws ClipsException {
        ClientFilter filter = new ClientFilter();
        filter.surname = surname;
        filter.name = name;
        filter.pathron = pathron;
        ArrayList<ClientLocal> list = clientSearchLocal.getClientList(filter);
        if (list.size() > 1) {
            //Если найдено несколько пробуем уточнить по снилсу
            ArrayList<ClientLocal> tmp = new ArrayList<ClientLocal>(list);
            for (Iterator<ClientLocal> it = tmp.iterator(); it.hasNext();) {
                ClientLocal clientLocal = it.next();
                if (!clientLocal.getSnils().equals(snils)) {
                    it.remove();
                }
            }
            if (tmp.size() == 1) {
                return tmp;
            }
        }
        return list;
    }

    private CollaboratorFunctionsChunk findFunc(CollaboratorLocal collab, int specID, int receptionTypeID, int dvrID, int vmuID) throws ClipsException {
        SelectorEditable<CollaboratorFunctionsChunk> functions = collab.getFunctions();
        for (int i = 0; i < functions.size(); i++) {
            CollaboratorFunctionsChunk chunk = functions.get(i);
            if (chunk.getSpeciality().getID() == specID
                    && chunk.getReceptionType().getID() == receptionTypeID
                    && chunk.getDvr().getID() == dvrID
                    && chunk.getFirstMedicalAid().getID() == vmuID) {
                return chunk;
            }
        }
        return null;
    }

}
TOP

Related Classes of clips.directory.editors.update.updaters.collaborators.UpdaterCollaborators

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.