From b8494e3b6f526915cf0d23400470ce99bc9d3bf5 Mon Sep 17 00:00:00 2001 From: staccatomamba Date: Wed, 21 Sep 2016 12:42:32 +0200 Subject: [PATCH] Nur Mitarbeiter mit aktivem Chatcode werden auf die App geladen. Beim Herunterziehen der Kontaktliste in der App werden die Kontakte aktualisiert. Teams sind noch davon ausgenommen. --- Android/BewoMitarbeiterApp/.idea/gradle.xml | 8 +- Android/BewoMitarbeiterApp/app/app.iml | 44 ++++++-- .../main/java/Database/DatabaseHandler.java | 19 +++- .../bewomitarbeiterapp/ContactListItem.java | 39 ++++++- .../KontaktChatActivity.java | 104 +++++++++++++++--- .../bewomitarbeiterapp/LoginActivity.java | 1 - .../OnRequestSuccessCallback.java | 9 ++ .../main/java/soapConnection/SoapCalls.java | 1 - .../java/tcpConnection/SocketManager.java | 8 +- .../app/src/main/java/util/Util.java | 22 ++++ .../src/main/res/layout/kontakt_list_chat.xml | 5 +- Android/BewoMitarbeiterApp/build.gradle | 2 +- BeWoPlanerAndroid/AndroidSoapService.asmx.cs | 13 +-- Data/Access/SearchDAO.cs | 31 +++++- 14 files changed, 245 insertions(+), 61 deletions(-) create mode 100644 Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/OnRequestSuccessCallback.java diff --git a/Android/BewoMitarbeiterApp/.idea/gradle.xml b/Android/BewoMitarbeiterApp/.idea/gradle.xml index bb1e6cef5..e5e9072bd 100644 --- a/Android/BewoMitarbeiterApp/.idea/gradle.xml +++ b/Android/BewoMitarbeiterApp/.idea/gradle.xml @@ -13,13 +13,7 @@ - + diff --git a/Android/BewoMitarbeiterApp/app/app.iml b/Android/BewoMitarbeiterApp/app/app.iml index dadeec421..2b71d64e0 100644 --- a/Android/BewoMitarbeiterApp/app/app.iml +++ b/Android/BewoMitarbeiterApp/app/app.iml @@ -32,12 +32,14 @@ + + @@ -64,14 +66,6 @@ - - - - - - - - @@ -80,10 +74,17 @@ + + + + + + + + - @@ -93,6 +94,7 @@ + @@ -115,10 +117,32 @@ - + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/Database/DatabaseHandler.java b/Android/BewoMitarbeiterApp/app/src/main/java/Database/DatabaseHandler.java index 4791fa116..628a5144b 100644 --- a/Android/BewoMitarbeiterApp/app/src/main/java/Database/DatabaseHandler.java +++ b/Android/BewoMitarbeiterApp/app/src/main/java/Database/DatabaseHandler.java @@ -50,6 +50,7 @@ public class DatabaseHandler extends SQLiteOpenHelper { private static final String KEY_IS_TEAM = "isteam"; private static final String KEY_TEAM_MEMBER_OIDS = "teammemberoids"; private static final String KEY_TEAM_MEMBER_NAMES = "teammembernames"; + private static final String KEY_VERSION = "version"; // ChatMessage-Tabelle @@ -98,7 +99,8 @@ public class DatabaseHandler extends SQLiteOpenHelper { KEY_PICTURE_BLOB + " BLOB, " + KEY_IS_TEAM + " INTEGER, " + KEY_TEAM_MEMBER_NAMES + " TEXT, " + - KEY_TEAM_MEMBER_OIDS + " TEXT)"; + KEY_TEAM_MEMBER_OIDS + " TEXT, " + + KEY_VERSION + " INTEGER)"; db.execSQL(CREATE_CONTACTS_TABLE); @@ -291,6 +293,7 @@ public class DatabaseHandler extends SQLiteOpenHelper { values.put(KEY_IS_TEAM, contact.isTeam); values.put(KEY_TEAM_MEMBER_NAMES, contact.teamMemberNames); values.put(KEY_TEAM_MEMBER_OIDS, contact.teamMemberOids); + values.put(KEY_VERSION, contact.getVersion()); writableDatabase.insertOrThrow(TABLE_CONTACTS, null, values); } @@ -403,7 +406,8 @@ public class DatabaseHandler extends SQLiteOpenHelper { KEY_PICTURE_BLOB, KEY_IS_TEAM, KEY_TEAM_MEMBER_NAMES, - KEY_TEAM_MEMBER_OIDS}, + KEY_TEAM_MEMBER_OIDS, + KEY_VERSION}, KEY_ID + "=?", new String[]{String.valueOf(id)}, null,null,null,null); @@ -418,8 +422,9 @@ public class DatabaseHandler extends SQLiteOpenHelper { boolean contactIsTeam = cursor.getInt(4) == 1; String teamMemberOids = cursor.getString(5); String teamMemberNames = cursor.getString(6); + int contactVersion = cursor.getInt(7); - ContactListItem contact = new ContactListItem(contactId, contactName, contactPersonOid, contactPicture, contactIsTeam, teamMemberOids, teamMemberNames); + ContactListItem contact = new ContactListItem(contactId, contactName, contactPersonOid, contactPicture, contactIsTeam, teamMemberOids, teamMemberNames, contactVersion); cursor.close(); @@ -447,6 +452,7 @@ public class DatabaseHandler extends SQLiteOpenHelper { contact.isTeam = cursor.getInt(4) == 1; contact.teamMemberNames = cursor.getString(5); contact.teamMemberOids = cursor.getString(6); + contact.setVersion(cursor.getInt(7)); contactList.add(contact); } while (cursor.moveToNext()); @@ -499,6 +505,7 @@ public class DatabaseHandler extends SQLiteOpenHelper { values.put(KEY_IS_TEAM, (contact.isTeam ? 1 : 0)); values.put(KEY_TEAM_MEMBER_NAMES, contact.teamMemberNames); values.put(KEY_TEAM_MEMBER_OIDS, contact.teamMemberOids); + values.put(KEY_VERSION, contact.getVersion()); return writableDatabase.update(TABLE_CONTACTS, values, KEY_ID + " = ?", new String[] { String.valueOf(contact.getId()) }); } @@ -551,7 +558,8 @@ public class DatabaseHandler extends SQLiteOpenHelper { KEY_PICTURE_BLOB, KEY_IS_TEAM, KEY_TEAM_MEMBER_NAMES, - KEY_TEAM_MEMBER_OIDS}, + KEY_TEAM_MEMBER_OIDS, + KEY_VERSION}, KEY_PERSONOID + "=? AND " + KEY_IS_TEAM + "=?", new String[]{String.valueOf(personOid), String.valueOf((isTeam ? 1 : 0))}, null,null,null,null); @@ -565,8 +573,9 @@ public class DatabaseHandler extends SQLiteOpenHelper { boolean contactIsTeam = cursor.getInt(4) == 1; String teamMemberOids = cursor.getString(5); String teamMemberNames = cursor.getString(6); + int contactVersion = cursor.getInt(7); - ContactListItem contact = new ContactListItem(contactId, contactName, contactPersonOid, contactPicture, contactIsTeam, teamMemberOids, teamMemberNames); + ContactListItem contact = new ContactListItem(contactId, contactName, contactPersonOid, contactPicture, contactIsTeam, teamMemberOids, teamMemberNames, contactVersion); cursor.close(); diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/ContactListItem.java b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/ContactListItem.java index 4c07d07c2..b1986e9e7 100644 --- a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/ContactListItem.java +++ b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/ContactListItem.java @@ -1,5 +1,7 @@ package beyondsoft.bewomitarbeiterapp; +import entities.ChatPerson; + /** * Created by JettenM on 24.08.2016. */ @@ -8,6 +10,7 @@ public class ContactListItem { private String mChatName; private byte[] mPicture; private int mPersonOid; + private int mVersion; public boolean isTeam; public boolean isOnline; @@ -16,7 +19,7 @@ public class ContactListItem { public ContactListItem(){} - public ContactListItem(int id, String kontaktname, int personOid, byte[] picture, boolean isTeam, String teamMemberOids, String teamMemberNames){ + public ContactListItem(int id, String kontaktname, int personOid, byte[] picture, boolean isTeam, String teamMemberOids, String teamMemberNames, int version){ this.mId = id; this.mChatName = kontaktname; this.mPersonOid = personOid; @@ -24,15 +27,17 @@ public class ContactListItem { this.isTeam = isTeam; this.teamMemberNames = teamMemberNames; this.teamMemberOids = teamMemberOids; + this.mVersion = version; } - public ContactListItem(String kontaktname, int personOid, boolean isTeam, String teamMemberOids, String teamMemberNames){ + public ContactListItem(String kontaktname, int personOid, boolean isTeam, String teamMemberOids, String teamMemberNames, int version){ this.mChatName = kontaktname; this.mPersonOid = personOid; this.mPicture = null; this.isTeam = isTeam; this.teamMemberNames = teamMemberNames; this.teamMemberOids = teamMemberOids; + this.mVersion = version; } public int getId(){ @@ -73,4 +78,34 @@ public class ContactListItem { this.mPersonOid = mPersonOid; } + + public int getVersion() { + return mVersion; + } + + public void setVersion(int mVersion) { + this.mVersion = mVersion; + } + + @Override + public String toString() { + String result = ""; + + result += "Id: " + mId; + result += "\nChatName: " + mChatName; + result += "\nPersonOid: " + mPersonOid; + result += "\nIsTeam: " + isTeam; + if(isTeam) { + result += "\nTeam members: " + teamMemberNames; + result += "\nMember Oids: " + teamMemberOids; + } + + result += "\nVersion: " + mVersion; + + return result; + } + + public Boolean compareToChatPerson(ChatPerson chatPerson) { + return mPersonOid == chatPerson.Oid && isTeam == chatPerson.IsTeam; + } } diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/KontaktChatActivity.java b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/KontaktChatActivity.java index ee7bc3bd9..bf83b3ffd 100644 --- a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/KontaktChatActivity.java +++ b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/KontaktChatActivity.java @@ -4,6 +4,7 @@ import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; +import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.app.ActionBarActivity; import android.util.Log; import android.view.Menu; @@ -27,15 +28,15 @@ import org.ksoap2.serialization.SoapPrimitive; import java.io.ByteArrayOutputStream; import java.lang.reflect.Type; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.TimeUnit; +import java.util.Map; import Database.DatabaseHandler; +import entities.ChatEntity; import entities.ChatPerson; import soapConnection.JsonSoapPrimitiveRequest; +import soapConnection.OnRequestSuccessCallback; import soapConnection.Packet; import soapConnection.SoapCalls; import soapConnection.SoapConnectionManager; @@ -47,14 +48,16 @@ import util.Util; /** * Created by bib on 02.05.2016. */ -public class KontaktChatActivity extends ActionBarActivity implements ConnectivityReceiver.ConnectivityReceiverListener { +public class KontaktChatActivity extends ActionBarActivity implements ConnectivityReceiver.ConnectivityReceiverListener, SwipeRefreshLayout.OnRefreshListener { - private static final String LOGTAG = ""; + private static final String LOGTAG = "KONTAKT_CHAT_ACTIVITY"; private SpiceManager spiceManager = new SpiceManager(UncachedSpiceService.class); private DatabaseHandler databaseHandler; - public static ListView listView; + public ListView listView; + + private SwipeRefreshLayout swipeRefreshLayout; ArrayList contactList = new ArrayList<>(); @@ -68,6 +71,8 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi super.onCreate(savedInstanceState); setContentView(R.layout.kontakt_list_chat); + swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout); + databaseHandler = DatabaseHandler.getInstance(this); listView = (ListView) findViewById(R.id.contact_listview); @@ -88,7 +93,6 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi Intent in = new Intent(getBaseContext(), ChatActivity.class); in.putExtras(bundle); - //Gib Bild für den Chat mit if(selectedValue.getPicture() == null) { ByteArrayOutputStream stream = new ByteArrayOutputStream(); Bitmap a = BitmapFactory.decodeResource(getResources(), R.drawable.katze3); @@ -103,15 +107,49 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi } }); + swipeRefreshLayout.setOnRefreshListener(this); + + swipeRefreshLayout.post(new Runnable() { + @Override + public void run() { + swipeRefreshLayout.setRefreshing(true); + + updateContactList(); + } + } + ); + if(SocketManager.uiHandler == null ||! SocketManager.uiHandler.equals(kontaktChatActivityUIHandler)) { SocketManager.uiHandler = kontaktChatActivityUIHandler; } +// ArrayList propertyInfos = new ArrayList<>(); +// propertyInfos.add(SoapConnectionManager.BuildProperty("pPersonOid", SoapConnectionManager.User.getPersonOid(), Long.class)); +// +// JsonSoapPrimitiveRequest request = new JsonSoapPrimitiveRequest(SoapCalls.GET_CONTACTS_FOR_PERSON, propertyInfos); +// spiceManager.execute(request, new JsonSoapPrimitiveRequestListener()); + } + + @Override + public void onRefresh() { + updateContactList(); + } + + private void updateContactList() { + swipeRefreshLayout.setRefreshing(true); + ArrayList propertyInfos = new ArrayList<>(); propertyInfos.add(SoapConnectionManager.BuildProperty("pPersonOid", SoapConnectionManager.User.getPersonOid(), Long.class)); JsonSoapPrimitiveRequest request = new JsonSoapPrimitiveRequest(SoapCalls.GET_CONTACTS_FOR_PERSON, propertyInfos); - spiceManager.execute(request, new JsonSoapPrimitiveRequestListener()); + spiceManager.execute(request, new JsonSoapPrimitiveRequestListener(new OnRequestSuccessCallback() { + @Override + public void doCallback() { + Util.sendStatusRequest(); + + swipeRefreshLayout.setRefreshing(false); + } + })); } public UIHandler kontaktChatActivityUIHandler = new UIHandler() { @@ -163,6 +201,7 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi ka.notifyDataSetChanged(); } }); + break; case STATUS_NOTIFICATION_LOGIN_BROADCAST: runOnUiThread(new Runnable() { @@ -287,6 +326,13 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi private final class JsonSoapPrimitiveRequestListener implements RequestListener { + //TODO: zusätzliches onRequestSuccess-Callback einbauen + OnRequestSuccessCallback callback; + + JsonSoapPrimitiveRequestListener(OnRequestSuccessCallback callback) { + this.callback = callback; + } + @Override public void onRequestFailure(SpiceException spiceException) { Toast.makeText(KontaktChatActivity.this, "Ein Fehler ist beim laden der Kontaktliste aufgetreten.", Toast.LENGTH_SHORT).show(); @@ -295,9 +341,11 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi @Override public void onRequestSuccess(SoapPrimitive soapPrimitive) { if(soapPrimitive == null) { - Log.i("KONTAKT_CHAT_ACTIVITY", "soapPrimitive ist NULL!"); + Log.e("KONTAKT_CHAT_ACTIVITY", "soapPrimitive ist NULL!"); } + Log.i(LOGTAG, "Lade Kontakte vom Server herunter"); + Gson gson = new GsonBuilder().create(); Type listType = new TypeToken>(){}.getType(); @@ -306,20 +354,42 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi List lc = databaseHandler.getAllContacts(); - List oidList = new ArrayList<>(); + Map oid2VersionList = new HashMap<>(); for(ContactListItem item : lc) { - oidList.add(item.getPersonOid()); + Log.i(LOGTAG, "Aus DB: Oid: " + item.getPersonOid() + "; Version: " + item.getVersion() + "; " + item.getChatName()); + oid2VersionList.put(new ChatEntity(item.getPersonOid(), item.isTeam), item.getVersion()); } for(ChatPerson cp : result) { - Log.i("KONTAKTLISTE", "Version: " + cp.Version); + ContactListItem contact = new ContactListItem(cp.Name, cp.Oid, cp.IsTeam, cp.TeamMemberOids, cp.TeamMemberNames, cp.Version); - if(!oidList.contains(cp.Oid)) { - databaseHandler.addContact(new ContactListItem(cp.Name, cp.Oid, cp.IsTeam, cp.TeamMemberOids, cp.TeamMemberNames)); + ChatEntity cliEntity = new ChatEntity(cp.Oid, cp.IsTeam); + + if(!oid2VersionList.containsKey(cliEntity)) { + databaseHandler.addContact(contact); + } else if(oid2VersionList.get(cliEntity) < cp.Version) { + + contact.setId(databaseHandler.getContactByPersonOid(cp.Oid, cp.IsTeam).getId()); + databaseHandler.updateContact(contact); + + //TODO: Team updaten, wenn Person Mitglied ist +// if(Util.contains(Util.convertStringArrayToIntegerArray(cp.TeamMemberOids.split(",")), cp.Oid)) { +// +// } + + for(ContactListItem item : lc) { + if(!item.isTeam) { + continue; + } + + + } } } + oid2VersionList.clear(); + lc = databaseHandler.getAllContacts(); for(ContactListItem item : lc) { @@ -342,6 +412,10 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi listView.setAdapter(adapter); ((KontaktAdapter) listView.getAdapter()).notifyDataSetChanged(); + + if(callback != null) { + callback.doCallback(); + } } } } diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/LoginActivity.java b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/LoginActivity.java index f6773a3e3..4bc8b12f8 100644 --- a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/LoginActivity.java +++ b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/LoginActivity.java @@ -300,7 +300,6 @@ public class LoginActivity extends ActionBarActivity { SocketManager.tenant = mTenantView.getText().toString(); - //TODO: stattdessen ConnectToServer und im Callback die ChatActivity aufrufen SocketManager.loginCallback = new LoginCallback() { @Override public void doCallback() { diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/OnRequestSuccessCallback.java b/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/OnRequestSuccessCallback.java new file mode 100644 index 000000000..fbd2fe1d6 --- /dev/null +++ b/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/OnRequestSuccessCallback.java @@ -0,0 +1,9 @@ +package soapConnection; + +/** + * Created by JettenM on 20.09.2016. + */ + +public interface OnRequestSuccessCallback { + void doCallback(); +} diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/SoapCalls.java b/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/SoapCalls.java index ef83a1448..2bc5ed252 100644 --- a/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/SoapCalls.java +++ b/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/SoapCalls.java @@ -23,7 +23,6 @@ public class SoapCalls { // public static String SOAP_ADDRESS = "https://" + DESTINATION_ADDRESS + "/BeWoPlanerAndroid/AndroidSoapService.asmx"; - public static String DESTINATION_ADDRESS = "192.168.1.103"; public static int DESTINATION_PORT = 5000; diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/SocketManager.java b/Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/SocketManager.java index 382bc778e..e0c76f7d0 100644 --- a/Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/SocketManager.java +++ b/Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/SocketManager.java @@ -38,12 +38,12 @@ public class SocketManager { private static DatabaseHandler databaseHandler = DatabaseHandler.getInstance(BeWoChatApplication.getInstance()); public static String tenant; - public static Socket socket; - public static Thread listenerThread; - public static SocketListener socketListener; + private static Socket socket; + private static Thread listenerThread; + private static SocketListener socketListener; public static UIHandler uiHandler; public static LoginCallback loginCallback; - public static DataOutputStream dataOutputStream; + private static DataOutputStream dataOutputStream; public static ArrayList onlinePersonOids = new ArrayList<>(); public static ArrayList onlineEntities = new ArrayList<>(); diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/util/Util.java b/Android/BewoMitarbeiterApp/app/src/main/java/util/Util.java index dc43bdc6f..12c12e28a 100644 --- a/Android/BewoMitarbeiterApp/app/src/main/java/util/Util.java +++ b/Android/BewoMitarbeiterApp/app/src/main/java/util/Util.java @@ -13,6 +13,7 @@ import android.support.v4.app.NotificationCompat; import android.util.Log; import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; import java.util.HashMap; import java.util.Map; @@ -260,4 +261,25 @@ public class Util { entity2MessagesCountRel.remove(entity); } } + + public static Integer[] convertStringArrayToIntegerArray(String[] arrayToConvert) { + Integer[] result = new Integer[arrayToConvert.length]; + + try { + for(int i = 0; i < arrayToConvert.length; i++) { + result[i] = Integer.parseInt(arrayToConvert[i]); + } + } catch(NumberFormatException nfe) { + Log.e("UTIL", nfe.getMessage()); + nfe.printStackTrace(); + + return null; + } + + return result; + } + + public static boolean contains(final Integer[] array, final int key) { + return Arrays.asList(array).contains(key); + } } diff --git a/Android/BewoMitarbeiterApp/app/src/main/res/layout/kontakt_list_chat.xml b/Android/BewoMitarbeiterApp/app/src/main/res/layout/kontakt_list_chat.xml index 26b6e515a..8b3f80769 100644 --- a/Android/BewoMitarbeiterApp/app/src/main/res/layout/kontakt_list_chat.xml +++ b/Android/BewoMitarbeiterApp/app/src/main/res/layout/kontakt_list_chat.xml @@ -1,7 +1,8 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/Android/BewoMitarbeiterApp/build.gradle b/Android/BewoMitarbeiterApp/build.gradle index b896e3769..74d945e88 100644 --- a/Android/BewoMitarbeiterApp/build.gradle +++ b/Android/BewoMitarbeiterApp/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.1.3' + classpath 'com.android.tools.build:gradle:2.2.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } diff --git a/BeWoPlanerAndroid/AndroidSoapService.asmx.cs b/BeWoPlanerAndroid/AndroidSoapService.asmx.cs index 080025ce3..6fb54da66 100644 --- a/BeWoPlanerAndroid/AndroidSoapService.asmx.cs +++ b/BeWoPlanerAndroid/AndroidSoapService.asmx.cs @@ -6,6 +6,7 @@ using System.Text; using System.Web.Services; using BeWo.Data.Access; +using BeWo.Data.Entities; using BeWo.Service.DCEntityMapper; using BeWo.Service.ServiceContracts; using BeWo.Service.ServiceImplementations; @@ -133,13 +134,7 @@ namespace BeWoPlanerAndroid var isEmployee = customer == null; // mit den eigenen Klienten und allen anderen Mitarbeitern - var customerOids = employee.Employee2CustomerList.Select(s => s.CustomerOid.Value); - var customers = CustomerService.GetCompactCustomersById(customerOids); - - var employees = EmployeeService.GetAllActiveEmployeesCompact().Where(w => !Equals(w.EmployeeOid, employee.Oid.Value)); - - var result = employees.Select(emp => new ChatPerson(emp.PersonOid, emp.FirstName + " " + emp.LastName, false, null, null, emp.Version)).ToList(); - result.AddRange(customers.Select(cus => new ChatPerson(cus.PersonOid, cus.FullName, false, null, null, cus.Version))); + var allPersons = DAOFactory.SearchDAO.FindAllChatAuthorizedPersonsForEmployee(employee.Oid.Value).Where(w => w.Oid.Value != employee.Person.Oid.Value).Select(s => new ChatPerson(s.Oid.Value, s.FirstNameLastName, false, null, null, s.Version.Value)).ToList(); var teams = DAOFactory.SearchDAO.FindTeamsOfEmployee(employee.Oid.Value).Where(w => w.MemberList.Count > 1); @@ -162,10 +157,10 @@ namespace BeWoPlanerAndroid } } - result.Add(new ChatPerson(team.Oid.Value, team.Name, true, memberString, memberNames, team.Version.Value)); + allPersons.Add(new ChatPerson(team.Oid.Value, team.Name, true, memberString, memberNames, team.Version.Value)); } - return SerializeObject(result); + return SerializeObject(allPersons); } private static string SerializeObject(object obj) diff --git a/Data/Access/SearchDAO.cs b/Data/Access/SearchDAO.cs index b912374cf..80b2792a0 100644 --- a/Data/Access/SearchDAO.cs +++ b/Data/Access/SearchDAO.cs @@ -437,8 +437,7 @@ namespace BeWo.Data.Access return test; } - public IEnumerable FindAccoutingTransactions(DateTimeSpan pSpan, - long? pSupportConceptOid, long? pSupportConceptCostBearerRelOid) + public IEnumerable FindAccoutingTransactions(DateTimeSpan pSpan, long? pSupportConceptOid, long? pSupportConceptCostBearerRelOid) { var lCriteria = CreateCriteriaIsActive() .CreateAlias(AccountingTransaction.PropertyName_CostBearer2SupportConcept, "cb2sc", JoinType.LeftOuterJoin); @@ -561,7 +560,6 @@ namespace BeWo.Data.Access .List(); } - public IEnumerable GetAllCustomersWithRelatedEmployee() { return CreateCriteria() @@ -1224,7 +1222,7 @@ namespace BeWo.Data.Access return criteria.List(); } - static string GetSpecificValueFromRecurrenceInfo(string str, int startIndex) + private static string GetSpecificValueFromRecurrenceInfo(string str, int startIndex) { var valueBuilder = new StringBuilder(); @@ -1630,5 +1628,30 @@ namespace BeWo.Data.Access return c.List(); } + + public IEnumerable FindAllChatAuthorizedPersonsForEmployee(long pEmployeeOid) + { + var employee = CreateCriteriaIsActive().Add(Restrictions.Eq(BeWoEntityBase.PropertyName_Oid, pEmployeeOid)).UniqueResult(); + + var relatedCustomerOids = employee.Employee2CustomerList.Select(s => s.CustomerOid.Value); + + var c1 = CreateCriteriaIsActive() + .Add(Restrictions.Eq(CustomerAPPCode.PropertyName_IsChatAktiv, 1)); + var codes = c1.List().Select(s => s.CustomerOid.Value).ToArray(); + var c2 = CreateCriteriaIsActive() + .Add(Restrictions.In(BeWoEntityBase.PropertyName_Oid, codes)) + .Add(Restrictions.In(BeWoEntityBase.PropertyName_Oid, relatedCustomerOids.ToList())); + + var customers = c2.List(); + var employees = FindAllChatActiveEmployees(); + + var oids = customers.Select(s => s.Person.Oid.Value).ToList(); + oids.AddRange(employees.Select(s => s.Person.Oid.Value)); + + var c = CreateCriteriaIsActive() + .Add(Restrictions.In(BeWoEntityBase.PropertyName_Oid, oids.Distinct().ToList())); + + return c.List(); + } } }